From 7c7f7b2a86fe845ce0385757c1d07a7ea787b8b3 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Fri, 25 Mar 2016 14:04:21 +0800 Subject: [PATCH] format according google code style --- apollo-adminservice/pom.xml | 84 +- .../ctrip/apollo/AdminServiceApplication.java | 7 +- .../controller/ClusterController.java | 13 +- .../controller/ConfigController.java | 25 +- .../controller/VersionController.java | 23 +- .../com/ctrip/apollo/biz/entity/Cluster.java | 83 +- .../ctrip/apollo/biz/entity/ConfigItem.java | 246 +- .../com/ctrip/apollo/biz/entity/Release.java | 78 +- .../apollo/biz/entity/ReleaseSnapShot.java | 101 +- .../com/ctrip/apollo/biz/entity/Version.java | 153 +- .../biz/repository/ClusterRepository.java | 3 +- .../biz/repository/ConfigItemRepository.java | 3 +- .../repository/ReleaseSnapShotRepository.java | 8 +- .../biz/repository/VersionRepository.java | 7 +- .../biz/service/AdminConfigService.java | 15 +- .../apollo/biz/service/ConfigService.java | 35 +- .../service/impl/AdminConfigServiceImpl.java | 164 +- .../biz/service/impl/ConfigServiceImpl.java | 90 +- .../java/com/ctrip/apollo/biz/AllTests.java | 3 +- .../service/impl/ConfigServiceImplTest.java | 247 +- apollo-client/pom.xml | 2 +- .../apollo/client/ApolloConfigManager.java | 270 +- .../apollo/client/constants/Constants.java | 8 +- .../client/enums/PropertyChangeType.java | 20 +- .../apollo/client/env/ClientEnvironment.java | 30 +- .../apollo/client/loader/ConfigLoader.java | 4 +- .../client/loader/ConfigLoaderFactory.java | 51 +- .../client/loader/ConfigLoaderManager.java | 300 +- .../client/loader/ConfigServiceLocator.java | 14 +- .../loader/impl/AbstractConfigLoader.java | 40 +- .../loader/impl/InMemoryConfigLoader.java | 10 +- .../loader/impl/LocalFileConfigLoader.java | 11 +- .../loader/impl/RemoteConfigLoader.java | 144 +- .../apollo/client/model/ApolloRegistry.java | 44 +- .../apollo/client/model/PropertyChange.java | 87 +- .../model/PropertySourceReloadResult.java | 66 +- .../apollo/client/util/ClassLoaderUtil.java | 20 +- .../ctrip/apollo/client/util/ConfigUtil.java | 117 +- .../com/ctrip/apollo/client/AllTests.java | 5 +- .../client/ApolloConfigManagerTest.java | 217 +- .../loader/ConfigLoaderManagerTest.java | 341 +- .../loader/impl/RemoteConfigLoaderTest.java | 246 +- .../apollo/client/util/ConfigUtilTest.java | 85 +- apollo-client/src/test/resources/log4j2.xml | 2 +- apollo-configservice/pom.xml | 152 +- .../com/ctrip/apollo/ServerApplication.java | 6 +- .../com/ctrip/apollo/ServletInitializer.java | 9 +- .../controller/ConfigController.java | 74 +- .../controller/ServiceController.java | 10 +- .../metaservice/service/DiscoveryService.java | 14 +- .../AbstractConfigServiceTest.java | 1 + .../ctrip/apollo/configservice/AllTests.java | 6 +- .../controller/ConfigControllerTest.java | 208 +- apollo-core/pom.xml | 60 +- .../main/java/com/ctrip/apollo/Apollo.java | 10 +- .../java/com/ctrip/apollo/core/Constants.java | 2 +- .../ctrip/apollo/core/MetaDomainConsts.java | 4 +- .../ctrip/apollo/core/ServiceNameConsts.java | 2 +- .../ctrip/apollo/core/dto/ApolloConfig.java | 156 +- .../com/ctrip/apollo/core/dto/ClusterDTO.java | 42 +- .../ctrip/apollo/core/dto/ConfigItemDTO.java | 166 +- .../apollo/core/dto/ReleaseSnapshotDTO.java | 60 +- .../com/ctrip/apollo/core/dto/VersionDTO.java | 74 +- .../core/utils/ApolloThreadFactory.java | 132 +- .../com/ctrip/apollo/core/utils/DNSUtil.java | 20 +- .../ctrip/apollo/core/utils/StringUtils.java | 680 +- .../java/com/ctrip/apollo/demo/AppConfig.java | 9 +- .../java/com/ctrip/apollo/demo/WebConfig.java | 36 +- .../demo/controller/DemoController.java | 64 +- .../demo/exception/RestExceptionHandler.java | 14 +- .../com/ctrip/apollo/demo/model/Config.java | 24 +- .../ctrip/apollo/demo/model/ErrorResult.java | 24 +- .../apollo/demo/service/DemoService.java | 16 +- apollo-demo/src/main/resources/log4j2.xml | 2 +- .../src/main/webapp/WEB-INF/views/welcome.jsp | 2 +- .../scripts/angular-toastr-1.4.1.tpls.min.js | 248 +- apollo-demo/src/main/webapp/s/scripts/app.js | 24 +- .../main/webapp/s/scripts/loading-bar.min.js | 93 +- .../s/scripts/ui-bootstrap-0.13.0.min.js | 1888 ++++- .../s/scripts/ui-bootstrap-tpls-0.13.0.min.js | 1949 ++++- .../s/styles/angular-toastr-1.4.1.min.css | 234 +- .../main/webapp/s/styles/loading-bar.min.css | 124 +- .../src/main/webapp/s/templates/list.html | 3 +- apollo-portal/pom.xml | 92 +- .../apollo/portal/PortalApplication.java | 2 +- .../com/ctrip/apollo/portal/RestUtils.java | 12 +- .../portal/constants/PortalConstants.java | 2 +- .../portal/controller/AppController.java | 8 +- .../portal/controller/ConfigController.java | 30 +- .../GlobalDefaultExceptionHandler.java | 35 +- .../portal/controller/VersionController.java | 13 +- .../com/ctrip/apollo/portal/entity/App.java | 2 +- .../apollo/portal/entity/AppConfigVO.java | 273 +- .../ctrip/apollo/portal/entity/Privilege.java | 2 +- .../com/ctrip/apollo/portal/enums/Env.java | 47 +- .../portal/exception/NotFoundException.java | 2 +- .../portal/repository/AppRepository.java | 4 +- .../repository/PrivilegeRepository.java | 4 +- .../apollo/portal/service/AppService.java | 6 +- .../apollo/portal/service/ConfigService.java | 23 +- .../portal/service/PrivilegeService.java | 8 +- .../apollo/portal/service/VersionService.java | 7 +- .../service/impl/ConfigServiceImpl.java | 398 +- .../src/main/resources/static/scripts/app.js | 10 +- .../scripts/controller/CreateAppController.js | 38 +- .../controller/app/AppPageController.js | 2 +- .../resources/static/styles/common-style.css | 2 +- .../vendor/angular/angular-cookies.min.js | 64 +- .../vendor/angular/angular-resource.min.js | 184 +- .../vendor/angular/angular-route.min.js | 186 +- .../vendor/angular/angular-strap.min.js | 2159 ++++- .../vendor/angular/angular-strap.tpl.min.js | 27 +- .../angular/angular-toastr-1.4.1.min.css | 234 +- .../angular/angular-toastr-1.4.1.tpls.min.js | 248 +- .../vendor/angular/angular-ui-router.min.js | 2581 +++++- .../vendor/angular/angular-upload.min.js | 136 +- .../static/vendor/angular/angular.min.js | 7367 ++++++++++++++++- .../static/vendor/angular/bootbox.min.js | 263 +- .../static/vendor/angular/loading-bar.min.css | 124 +- .../static/vendor/angular/loading-bar.min.js | 93 +- .../static/vendor/angular/smart-table.min.js | 166 +- .../angular/ui-bootstrap-tpls-0.13.0.min.js | 1949 ++++- .../static/vendor/angular/xeditable.min.js | 470 +- .../bootstrap/css/bootstrap-theme.min.css | 476 +- .../vendor/bootstrap/css/bootstrap.min.css | 7196 +++++++++++++++- .../vendor/bootstrap/js/bootstrap.min.js | 780 +- .../main/resources/static/vendor/jquery.js | 2574 +++++- .../resources/static/views/app/index.html | 2 +- .../resources/static/views/common/footer.html | 1 - .../resources/static/views/create-app.html | 8 +- .../com/ctrip/apollo/portal/AllTests.java | 11 +- .../portal/controller/AppControllerTest.java | 10 +- .../portal/repository/AppRepositoryTest.java | 8 +- .../portal/service/ConfigServiceTest.java | 448 +- .../portal/service/PrivilegeServiceTest.java | 8 +- 135 files changed, 35138 insertions(+), 3821 deletions(-) diff --git a/apollo-adminservice/pom.xml b/apollo-adminservice/pom.xml index 621a1c90d..9e7f1813b 100644 --- a/apollo-adminservice/pom.xml +++ b/apollo-adminservice/pom.xml @@ -1,45 +1,45 @@ - - com.ctrip.apollo - apollo - 0.0.1-SNAPSHOT - ../pom.xml - - 4.0.0 - apollo-adminservice - Apollo AdminService - - - - com.ctrip.apollo - apollo-biz - - - - - org.springframework.data - spring-data-redis - - - redis.clients - jedis - - - - - org.springframework.cloud - spring-cloud-starter-eureka-server - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + com.ctrip.apollo + apollo + 0.0.1-SNAPSHOT + ../pom.xml + + 4.0.0 + apollo-adminservice + Apollo AdminService + + + + com.ctrip.apollo + apollo-biz + + + + + org.springframework.data + spring-data-redis + + + redis.clients + jedis + + + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/apollo-adminservice/src/main/java/com/ctrip/apollo/AdminServiceApplication.java b/apollo-adminservice/src/main/java/com/ctrip/apollo/AdminServiceApplication.java index ee2a3b9ff..910cdf043 100644 --- a/apollo-adminservice/src/main/java/com/ctrip/apollo/AdminServiceApplication.java +++ b/apollo-adminservice/src/main/java/com/ctrip/apollo/AdminServiceApplication.java @@ -2,13 +2,12 @@ package com.ctrip.apollo; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication //@EnableEurekaClient public class AdminServiceApplication { - public static void main(String[] args) { - new SpringApplicationBuilder(AdminServiceApplication.class).web(true).run(args); - } + public static void main(String[] args) { + new SpringApplicationBuilder(AdminServiceApplication.class).web(true).run(args); + } } diff --git a/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ClusterController.java b/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ClusterController.java index 960d501a3..7dc874322 100644 --- a/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ClusterController.java +++ b/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ClusterController.java @@ -2,6 +2,7 @@ package com.ctrip.apollo.adminservice.controller; import com.ctrip.apollo.biz.service.AdminConfigService; import com.ctrip.apollo.core.dto.ClusterDTO; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -13,11 +14,11 @@ import java.util.List; @RequestMapping("/cluster") public class ClusterController { - @Autowired - private AdminConfigService adminConfigService; + @Autowired + private AdminConfigService adminConfigService; - @RequestMapping("/app/{appId}") - public List findClustersByApp(@PathVariable long appId){ - return adminConfigService.findClustersByApp(appId); - } + @RequestMapping("/app/{appId}") + public List findClustersByApp(@PathVariable long appId) { + return adminConfigService.findClustersByApp(appId); + } } diff --git a/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ConfigController.java b/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ConfigController.java index b9a9b55e5..85c97edd8 100644 --- a/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ConfigController.java +++ b/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/ConfigController.java @@ -3,31 +3,34 @@ package com.ctrip.apollo.adminservice.controller; import com.ctrip.apollo.biz.service.AdminConfigService; import com.ctrip.apollo.core.dto.ConfigItemDTO; import com.ctrip.apollo.core.dto.ReleaseSnapshotDTO; + import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import javax.annotation.Resource; import java.util.List; +import javax.annotation.Resource; + @RestController @RequestMapping("/configs") public class ConfigController { - @Resource(name = "adminConfigService") - private AdminConfigService adminConfigService; + @Resource(name = "adminConfigService") + private AdminConfigService adminConfigService; - @RequestMapping("/release/{releaseId}") - public List getRelaseSnapshot(@PathVariable long releaseId){ - return adminConfigService.findReleaseSnapshotByReleaseId(releaseId); - } + @RequestMapping("/release/{releaseId}") + public List getRelaseSnapshot(@PathVariable long releaseId) { + return adminConfigService.findReleaseSnapshotByReleaseId(releaseId); + } - @RequestMapping("/latest") - public List findConfigItemsByClusters(@RequestParam(value = "clusterIds") List clusterIds){ - return adminConfigService.findConfigItemsByClusters(clusterIds); - } + @RequestMapping("/latest") + public List findConfigItemsByClusters( + @RequestParam(value = "clusterIds") List clusterIds) { + return adminConfigService.findConfigItemsByClusters(clusterIds); + } } diff --git a/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/VersionController.java b/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/VersionController.java index de5161f08..0686299ef 100644 --- a/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/VersionController.java +++ b/apollo-adminservice/src/main/java/com/ctrip/apollo/adminservice/controller/VersionController.java @@ -2,6 +2,7 @@ package com.ctrip.apollo.adminservice.controller; import com.ctrip.apollo.biz.service.AdminConfigService; import com.ctrip.apollo.core.dto.VersionDTO; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -13,21 +14,19 @@ import java.util.List; @RequestMapping("/version") public class VersionController { - @Autowired - private AdminConfigService adminConfigService; - - @RequestMapping("/app/{appId}") - public List versions(@PathVariable long appId){ - - return adminConfigService.findVersionsByApp(appId); - } + @Autowired + private AdminConfigService adminConfigService; - @RequestMapping("/{versionId}") - public VersionDTO version(@PathVariable long versionId){ - return adminConfigService.loadVersionById(versionId); - } + @RequestMapping("/app/{appId}") + public List versions(@PathVariable long appId) { + return adminConfigService.findVersionsByApp(appId); + } + @RequestMapping("/{versionId}") + public VersionDTO version(@PathVariable long versionId) { + return adminConfigService.loadVersionById(versionId); + } } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Cluster.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Cluster.java index d60173f53..2a86c285f 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Cluster.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Cluster.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.biz.entity; import com.ctrip.apollo.core.dto.ClusterDTO; + import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -16,58 +17,58 @@ import javax.persistence.Id; @Where(clause = "isDeleted = 0") @SQLDelete(sql = "Update Cluster set isDeleted = 1 where id = ?") public class Cluster { - @Id - @GeneratedValue - private long id; + @Id + @GeneratedValue + private long id; - @Column(nullable = false) - private String name; + @Column(nullable = false) + private String name; - @Column(nullable = false) - private long appId; + @Column(nullable = false) + private long appId; - private boolean isDeleted; + private boolean isDeleted; - public Cluster() { - } + public Cluster() { + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } - public boolean isDeleted() { - return isDeleted; - } + public boolean isDeleted() { + return isDeleted; + } - public void setDeleted(boolean deleted) { - isDeleted = deleted; - } + public void setDeleted(boolean deleted) { + isDeleted = deleted; + } - public ClusterDTO toDTO(){ - ClusterDTO dto = new ClusterDTO(); - dto.setAppId(appId); - dto.setId(id); - dto.setName(name); - return dto; - } + public ClusterDTO toDTO() { + ClusterDTO dto = new ClusterDTO(); + dto.setAppId(appId); + dto.setId(id); + dto.setName(name); + return dto; + } } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ConfigItem.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ConfigItem.java index 2c6208b69..2d9d5bda9 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ConfigItem.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ConfigItem.java @@ -1,166 +1,168 @@ package com.ctrip.apollo.biz.entity; import com.ctrip.apollo.core.dto.ConfigItemDTO; + import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; +import java.util.Date; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; -import java.util.Date; @Entity @Where(clause = "isDeleted = 0") @SQLDelete(sql = "Update ConfigItem set isDeleted = 1 where id = ?") public class ConfigItem { - @Id - @GeneratedValue - private long id; + @Id + @GeneratedValue + private long id; - @Column(nullable = false) - private long clusterId; + @Column(nullable = false) + private long clusterId; - @Column(nullable = false) - private String clusterName; + @Column(nullable = false) + private String clusterName; - @Column(nullable = false) - private long appId; + @Column(nullable = false) + private long appId; - @Column(nullable = false) - private String key; + @Column(nullable = false) + private String key; - @Column - private String value; + @Column + private String value; - @Column - private String comment; + @Column + private String comment; - @Column - private String dataChangeCreatedBy; + @Column + private String dataChangeCreatedBy; - @Column - private Date dataChangeCreatedTime; + @Column + private Date dataChangeCreatedTime; - @Column - private String dataChangeLastModifiedBy; + @Column + private String dataChangeLastModifiedBy; - @Column - private Date dataChangeLastModifiedTime; + @Column + private Date dataChangeLastModifiedTime; - @Column - private boolean IsDeleted; + @Column + private boolean IsDeleted; - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public long getClusterId() { - return clusterId; - } + public long getClusterId() { + return clusterId; + } - public void setClusterId(long clusterId) { - this.clusterId = clusterId; - } + public void setClusterId(long clusterId) { + this.clusterId = clusterId; + } - public String getClusterName() { - return clusterName; - } + public String getClusterName() { + return clusterName; + } - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public void setKey(String key) { - this.key = key; - } + public void setKey(String key) { + this.key = key; + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } - public void setValue(String value) { - this.value = value; - } + public void setValue(String value) { + this.value = value; + } - public String getComment() { - return comment; - } + public String getComment() { + return comment; + } - public void setComment(String comment) { - this.comment = comment; - } + public void setComment(String comment) { + this.comment = comment; + } - public String getDataChangeCreatedBy() { - return dataChangeCreatedBy; - } + public String getDataChangeCreatedBy() { + return dataChangeCreatedBy; + } - public void setDataChangeCreatedBy(String dataChangeCreatedBy) { - this.dataChangeCreatedBy = dataChangeCreatedBy; - } - - public Date getDataChangeCreatedTime() { - return dataChangeCreatedTime; - } - - public void setDataChangeCreatedTime(Date dataChangeCreatedTime) { - this.dataChangeCreatedTime = dataChangeCreatedTime; - } - - public String getDataChangeLastModifiedBy() { - return dataChangeLastModifiedBy; - } - - public void setDataChangeLastModifiedBy(String dataChangeLastModifiedBy) { - this.dataChangeLastModifiedBy = dataChangeLastModifiedBy; - } - - public boolean isDeleted() { - return IsDeleted; - } - - public void setDeleted(boolean isDeleted) { - IsDeleted = isDeleted; - } - - public Date getDataChangeLastModifiedTime() { - return dataChangeLastModifiedTime; - } - - public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedTime) { - this.dataChangeLastModifiedTime = dataChangeLastModifiedTime; - } - - public ConfigItemDTO toDTO(){ - ConfigItemDTO dto = new ConfigItemDTO(); - dto.setAppId(appId); - dto.setId(id); - dto.setClusterId(clusterId); - dto.setClusterName(clusterName); - dto.setDataChangeCreatedBy(dataChangeCreatedBy); - dto.setDataChangeLastModifiedBy(dataChangeLastModifiedBy); - dto.setDataChangeCreatedTime(dataChangeCreatedTime); - dto.setDataChangeLastModifiedTime(dataChangeLastModifiedTime); - dto.setKey(key); - dto.setValue(value); - dto.setComment(comment); - return dto; - } + public void setDataChangeCreatedBy(String dataChangeCreatedBy) { + this.dataChangeCreatedBy = dataChangeCreatedBy; + } + + public Date getDataChangeCreatedTime() { + return dataChangeCreatedTime; + } + + public void setDataChangeCreatedTime(Date dataChangeCreatedTime) { + this.dataChangeCreatedTime = dataChangeCreatedTime; + } + + public String getDataChangeLastModifiedBy() { + return dataChangeLastModifiedBy; + } + + public void setDataChangeLastModifiedBy(String dataChangeLastModifiedBy) { + this.dataChangeLastModifiedBy = dataChangeLastModifiedBy; + } + + public boolean isDeleted() { + return IsDeleted; + } + + public void setDeleted(boolean isDeleted) { + IsDeleted = isDeleted; + } + + public Date getDataChangeLastModifiedTime() { + return dataChangeLastModifiedTime; + } + + public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedTime) { + this.dataChangeLastModifiedTime = dataChangeLastModifiedTime; + } + + public ConfigItemDTO toDTO() { + ConfigItemDTO dto = new ConfigItemDTO(); + dto.setAppId(appId); + dto.setId(id); + dto.setClusterId(clusterId); + dto.setClusterName(clusterName); + dto.setDataChangeCreatedBy(dataChangeCreatedBy); + dto.setDataChangeLastModifiedBy(dataChangeLastModifiedBy); + dto.setDataChangeCreatedTime(dataChangeCreatedTime); + dto.setDataChangeLastModifiedTime(dataChangeLastModifiedTime); + dto.setKey(key); + dto.setValue(value); + dto.setComment(comment); + return dto; + } } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Release.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Release.java index 859b152b7..380953bb5 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Release.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Release.java @@ -14,55 +14,55 @@ import javax.persistence.Id; @Where(clause = "isDeleted = 0") @SQLDelete(sql = "Update Release set isDeleted = 1 where id = ?") public class Release { - @Id - @GeneratedValue - private long id; + @Id + @GeneratedValue + private long id; - private String name; - private long appId; - private String comment; - private boolean isDeleted; + private String name; + private long appId; + private String comment; + private boolean isDeleted; - public Release() { - } + public Release() { + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } - public String getComment() { - return comment; - } + public String getComment() { + return comment; + } - public void setComment(String comment) { - this.comment = comment; - } + public void setComment(String comment) { + this.comment = comment; + } - public boolean isDeleted() { - return isDeleted; - } + public boolean isDeleted() { + return isDeleted; + } - public void setDeleted(boolean deleted) { - isDeleted = deleted; - } + public void setDeleted(boolean deleted) { + isDeleted = deleted; + } } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ReleaseSnapShot.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ReleaseSnapShot.java index 1d7fbeaeb..5bfeba1f9 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ReleaseSnapShot.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/ReleaseSnapShot.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.biz.entity; import com.ctrip.apollo.core.dto.ReleaseSnapshotDTO; + import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -16,70 +17,70 @@ import javax.persistence.Id; @Where(clause = "isDeleted = 0") @SQLDelete(sql = "Update ReleaseSnapShot set isDeleted = 1 where id = ?") public class ReleaseSnapShot { - @Id - @GeneratedValue - private long id; + @Id + @GeneratedValue + private long id; - @Column(nullable = false) - private long releaseId; + @Column(nullable = false) + private long releaseId; - @Column(nullable = false) - private String clusterName; + @Column(nullable = false) + private String clusterName; - @Column(nullable = false) - private String configurations; + @Column(nullable = false) + private String configurations; - private boolean isDeleted; + private boolean isDeleted; - public ReleaseSnapShot() { - } + public ReleaseSnapShot() { + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public long getReleaseId() { - return releaseId; - } + public long getReleaseId() { + return releaseId; + } - public void setReleaseId(long releaseId) { - this.releaseId = releaseId; - } + public void setReleaseId(long releaseId) { + this.releaseId = releaseId; + } - public String getClusterName() { - return clusterName; - } + public String getClusterName() { + return clusterName; + } - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } - public String getConfigurations() { - return configurations; - } + public String getConfigurations() { + return configurations; + } - public void setConfigurations(String configurations) { - this.configurations = configurations; - } + public void setConfigurations(String configurations) { + this.configurations = configurations; + } - public boolean isDeleted() { - return isDeleted; - } + public boolean isDeleted() { + return isDeleted; + } - public void setDeleted(boolean deleted) { - isDeleted = deleted; - } + public void setDeleted(boolean deleted) { + isDeleted = deleted; + } - public ReleaseSnapshotDTO toDTO(){ - ReleaseSnapshotDTO dto = new ReleaseSnapshotDTO(); - dto.setId(id); - dto.setClusterName(clusterName); - dto.setConfigurations(configurations); - dto.setReleaseId(releaseId); - return dto; - } + public ReleaseSnapshotDTO toDTO() { + ReleaseSnapshotDTO dto = new ReleaseSnapshotDTO(); + dto.setId(id); + dto.setClusterName(clusterName); + dto.setConfigurations(configurations); + dto.setReleaseId(releaseId); + return dto; + } } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Version.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Version.java index 09ad4e8fd..dc65a9ec1 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Version.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/entity/Version.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.biz.entity; import com.ctrip.apollo.core.dto.VersionDTO; + import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; @@ -16,80 +17,80 @@ import javax.persistence.Id; @Where(clause = "isDeleted = 0") @SQLDelete(sql = "Update Version set isDeleted = 1 where id = ?") public class Version { - @Id - @GeneratedValue - private long id; - - @Column(nullable = false) - private String name; - - @Column(nullable = false) - private long appId; - - @Column(nullable = false) - private long releaseId; - //parent version could be null - private Long parentVersion; - private boolean isDeleted; - - public Version() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public long getAppId() { - return appId; - } - - public void setAppId(long appId) { - this.appId = appId; - } - - public long getReleaseId() { - return releaseId; - } - - public void setReleaseId(long releaseId) { - this.releaseId = releaseId; - } - - public boolean isDeleted() { - return isDeleted; - } - - public void setDeleted(boolean deleted) { - isDeleted = deleted; - } - - public Long getParentVersion() { - return parentVersion; - } - - public void setParentVersion(Long parentVersion) { - this.parentVersion = parentVersion; - } - - public VersionDTO toDTO() { - VersionDTO dto = new VersionDTO(); - dto.setAppId(this.appId); - dto.setId(this.id); - dto.setName(this.name); - dto.setParentVersion(this.parentVersion); - dto.setReleaseId(this.releaseId); - return dto; - } + @Id + @GeneratedValue + private long id; + + @Column(nullable = false) + private String name; + + @Column(nullable = false) + private long appId; + + @Column(nullable = false) + private long releaseId; + //parent version could be null + private Long parentVersion; + private boolean isDeleted; + + public Version() { + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getAppId() { + return appId; + } + + public void setAppId(long appId) { + this.appId = appId; + } + + public long getReleaseId() { + return releaseId; + } + + public void setReleaseId(long releaseId) { + this.releaseId = releaseId; + } + + public boolean isDeleted() { + return isDeleted; + } + + public void setDeleted(boolean deleted) { + isDeleted = deleted; + } + + public Long getParentVersion() { + return parentVersion; + } + + public void setParentVersion(Long parentVersion) { + this.parentVersion = parentVersion; + } + + public VersionDTO toDTO() { + VersionDTO dto = new VersionDTO(); + dto.setAppId(this.appId); + dto.setId(this.id); + dto.setName(this.name); + dto.setParentVersion(this.parentVersion); + dto.setReleaseId(this.releaseId); + return dto; + } } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ClusterRepository.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ClusterRepository.java index 0150e078d..3de21a2cc 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ClusterRepository.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ClusterRepository.java @@ -2,12 +2,13 @@ package com.ctrip.apollo.biz.repository; import com.ctrip.apollo.biz.entity.Cluster; + import org.springframework.data.repository.PagingAndSortingRepository; import java.util.List; public interface ClusterRepository extends PagingAndSortingRepository { - List findByAppId(long appId); + List findByAppId(long appId); } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ConfigItemRepository.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ConfigItemRepository.java index ef398d38b..3b3b3b0bb 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ConfigItemRepository.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ConfigItemRepository.java @@ -1,12 +1,13 @@ package com.ctrip.apollo.biz.repository; import com.ctrip.apollo.biz.entity.ConfigItem; + import org.springframework.data.repository.PagingAndSortingRepository; import java.util.List; public interface ConfigItemRepository extends PagingAndSortingRepository { - List findByClusterIdIsIn(List clusterIds); + List findByClusterIdIsIn(List clusterIds); } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ReleaseSnapShotRepository.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ReleaseSnapShotRepository.java index b0c7011d4..fe3dcd4df 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ReleaseSnapShotRepository.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/ReleaseSnapShotRepository.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.biz.repository; import com.ctrip.apollo.biz.entity.ReleaseSnapShot; + import org.springframework.data.repository.PagingAndSortingRepository; import java.util.List; @@ -8,8 +9,9 @@ import java.util.List; /** * @author Jason Song(song_s@ctrip.com) */ -public interface ReleaseSnapShotRepository extends PagingAndSortingRepository { - ReleaseSnapShot findByReleaseIdAndClusterName(long releaseId, String clusterName); +public interface ReleaseSnapShotRepository + extends PagingAndSortingRepository { + ReleaseSnapShot findByReleaseIdAndClusterName(long releaseId, String clusterName); - List findByReleaseId(long releaseId); + List findByReleaseId(long releaseId); } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/VersionRepository.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/VersionRepository.java index 0e71ffbff..7fef5fd7d 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/VersionRepository.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/repository/VersionRepository.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.biz.repository; import com.ctrip.apollo.biz.entity.Version; + import org.springframework.data.repository.PagingAndSortingRepository; import java.util.List; @@ -9,9 +10,9 @@ import java.util.List; * @author Jason Song(song_s@ctrip.com) */ public interface VersionRepository extends PagingAndSortingRepository { - Version findByAppIdAndName(long appId, String name); + Version findByAppIdAndName(long appId, String name); - Version findById(long id); + Version findById(long id); - List findByAppId(long appId); + List findByAppId(long appId); } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/AdminConfigService.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/AdminConfigService.java index c732fa875..12b26ebef 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/AdminConfigService.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/AdminConfigService.java @@ -1,6 +1,9 @@ package com.ctrip.apollo.biz.service; -import com.ctrip.apollo.core.dto.*; +import com.ctrip.apollo.core.dto.ClusterDTO; +import com.ctrip.apollo.core.dto.ConfigItemDTO; +import com.ctrip.apollo.core.dto.ReleaseSnapshotDTO; +import com.ctrip.apollo.core.dto.VersionDTO; import java.util.List; @@ -9,14 +12,14 @@ import java.util.List; */ public interface AdminConfigService { - List findReleaseSnapshotByReleaseId(long releaseId); + List findReleaseSnapshotByReleaseId(long releaseId); - List findVersionsByApp(long appId); + List findVersionsByApp(long appId); - VersionDTO loadVersionById(long versionId); + VersionDTO loadVersionById(long versionId); - List findClustersByApp(long appId); + List findClustersByApp(long appId); - List findConfigItemsByClusters(List clusterIds); + List findConfigItemsByClusters(List clusterIds); } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/ConfigService.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/ConfigService.java index 5355757f9..b67777bca 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/ConfigService.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/ConfigService.java @@ -5,31 +5,22 @@ import com.ctrip.apollo.core.dto.ApolloConfig; /** * Config Service + * * @author Jason Song(song_s@ctrip.com) */ public interface ConfigService { - /** - * Load configuration from database - * @param appId - * @param clusterName - * @param versionName - * @return - */ - ApolloConfig loadConfig(long appId, String clusterName, String versionName); + /** + * Load configuration from database + */ + ApolloConfig loadConfig(long appId, String clusterName, String versionName); - /** - * Load Version by appId and versionName from database - * @param appId - * @param versionName - * @return - */ - Version loadVersionByAppIdAndVersionName(long appId, String versionName); + /** + * Load Version by appId and versionName from database + */ + Version loadVersionByAppIdAndVersionName(long appId, String versionName); - /** - * Load Config by version and clusterName from database - * @param version - * @param clusterName - * @return - */ - ApolloConfig loadConfigByVersionAndClusterName(Version version, String clusterName); + /** + * Load Config by version and clusterName from database + */ + ApolloConfig loadConfigByVersionAndClusterName(Version version, String clusterName); } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/AdminConfigServiceImpl.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/AdminConfigServiceImpl.java index a8b8053ee..ad095a0dd 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/AdminConfigServiceImpl.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/AdminConfigServiceImpl.java @@ -9,103 +9,109 @@ import com.ctrip.apollo.biz.repository.ConfigItemRepository; import com.ctrip.apollo.biz.repository.ReleaseSnapShotRepository; import com.ctrip.apollo.biz.repository.VersionRepository; import com.ctrip.apollo.biz.service.AdminConfigService; -import com.ctrip.apollo.core.dto.*; +import com.ctrip.apollo.core.dto.ClusterDTO; +import com.ctrip.apollo.core.dto.ConfigItemDTO; +import com.ctrip.apollo.core.dto.ReleaseSnapshotDTO; +import com.ctrip.apollo.core.dto.VersionDTO; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @Service("adminConfigService") public class AdminConfigServiceImpl implements AdminConfigService { - @Autowired - private VersionRepository versionRepository; - @Autowired - private ReleaseSnapShotRepository releaseSnapShotRepository; - @Autowired - private ClusterRepository clusterRepository; - @Autowired - private ConfigItemRepository configItemRepository; - - @Override - public List findReleaseSnapshotByReleaseId(long releaseId) { - if (releaseId <= 0){ - return Collections.EMPTY_LIST; - } - - List releaseSnapShots = releaseSnapShotRepository.findByReleaseId(releaseId); - - if (releaseSnapShots == null || releaseSnapShots.size() == 0){ - return Collections.EMPTY_LIST; - } - - List result = new ArrayList<>(releaseSnapShots.size()); - for (ReleaseSnapShot releaseSnapShot: releaseSnapShots){ - result.add(releaseSnapShot.toDTO()); - } - return result; + @Autowired + private VersionRepository versionRepository; + @Autowired + private ReleaseSnapShotRepository releaseSnapShotRepository; + @Autowired + private ClusterRepository clusterRepository; + @Autowired + private ConfigItemRepository configItemRepository; + + @Override + public List findReleaseSnapshotByReleaseId(long releaseId) { + if (releaseId <= 0) { + return Collections.EMPTY_LIST; } + List releaseSnapShots = releaseSnapShotRepository.findByReleaseId(releaseId); + + if (releaseSnapShots == null || releaseSnapShots.size() == 0) { + return Collections.EMPTY_LIST; + } - @Override - public List findVersionsByApp(long appId) { - if (appId <= 0) { - return Collections.EMPTY_LIST; - } + List result = new ArrayList<>(releaseSnapShots.size()); + for (ReleaseSnapShot releaseSnapShot : releaseSnapShots) { + result.add(releaseSnapShot.toDTO()); + } + return result; + } - List versions = versionRepository.findByAppId(appId); - if (versions == null || versions.size() == 0) { - return Collections.EMPTY_LIST; - } - List result = new ArrayList<>(versions.size()); - for (Version version : versions) { - result.add(version.toDTO()); - } - return result; + @Override + public List findVersionsByApp(long appId) { + if (appId <= 0) { + return Collections.EMPTY_LIST; } - @Override - public VersionDTO loadVersionById(long versionId) { - if (versionId <= 0){ - return null; - } - Version version = versionRepository.findById(versionId); - return version.toDTO(); + List versions = versionRepository.findByAppId(appId); + if (versions == null || versions.size() == 0) { + return Collections.EMPTY_LIST; } - @Override - public List findClustersByApp(long appId) { - if (appId <= 0){ - return Collections.EMPTY_LIST; - } - List clusters = clusterRepository.findByAppId(appId); - if (clusters == null || clusters.size() == 0){ - return Collections.EMPTY_LIST; - } - - List result = new ArrayList<>(clusters.size()); - for (Cluster cluster: clusters){ - result.add(cluster.toDTO()); - } - return result; + List result = new ArrayList<>(versions.size()); + for (Version version : versions) { + result.add(version.toDTO()); + } + return result; + } + + @Override + public VersionDTO loadVersionById(long versionId) { + if (versionId <= 0) { + return null; + } + Version version = versionRepository.findById(versionId); + return version.toDTO(); + } + + @Override + public List findClustersByApp(long appId) { + if (appId <= 0) { + return Collections.EMPTY_LIST; + } + List clusters = clusterRepository.findByAppId(appId); + if (clusters == null || clusters.size() == 0) { + return Collections.EMPTY_LIST; + } + + List result = new ArrayList<>(clusters.size()); + for (Cluster cluster : clusters) { + result.add(cluster.toDTO()); + } + return result; + } + + @Override + public List findConfigItemsByClusters(List clusterIds) { + if (clusterIds == null || clusterIds.size() == 0) { + return Collections.EMPTY_LIST; + } + List configItems = configItemRepository.findByClusterIdIsIn(clusterIds); + if (configItems == null || configItems.size() == 0) { + return Collections.EMPTY_LIST; } - @Override - public List findConfigItemsByClusters(List clusterIds) { - if (clusterIds == null || clusterIds.size() == 0){ - return Collections.EMPTY_LIST; - } - List configItems = configItemRepository.findByClusterIdIsIn(clusterIds); - if (configItems == null || configItems.size() == 0){ - return Collections.EMPTY_LIST; - } - - List result = new ArrayList<>(configItems.size()); - for (ConfigItem configItem: configItems){ - result.add(configItem.toDTO()); - } - return result; + List result = new ArrayList<>(configItems.size()); + for (ConfigItem configItem : configItems) { + result.add(configItem.toDTO()); } + return result; + } } diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImpl.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImpl.java index 981b7cf94..9272ebf8e 100644 --- a/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImpl.java +++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImpl.java @@ -1,5 +1,7 @@ package com.ctrip.apollo.biz.service.impl; +import com.google.common.collect.Maps; + import com.ctrip.apollo.biz.entity.ReleaseSnapShot; import com.ctrip.apollo.biz.entity.Version; import com.ctrip.apollo.biz.repository.ReleaseSnapShotRepository; @@ -8,7 +10,7 @@ import com.ctrip.apollo.biz.service.ConfigService; import com.ctrip.apollo.core.dto.ApolloConfig; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Maps; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,56 +22,58 @@ import java.util.Map; */ @Service("configService") public class ConfigServiceImpl implements ConfigService { - @Autowired - private VersionRepository versionRepository; - @Autowired - private ReleaseSnapShotRepository releaseSnapShotRepository; - @Autowired - private ObjectMapper objectMapper; - private TypeReference> configurationTypeReference = - new TypeReference>() { - }; + @Autowired + private VersionRepository versionRepository; + @Autowired + private ReleaseSnapShotRepository releaseSnapShotRepository; + @Autowired + private ObjectMapper objectMapper; + private TypeReference> configurationTypeReference = + new TypeReference>() { + }; - @Override - public ApolloConfig loadConfig(long appId, String clusterName, String versionName) { - Version version = loadVersionByAppIdAndVersionName(appId, versionName); - if (version == null) { - return null; - } - - return loadConfigByVersionAndClusterName(version, clusterName); + @Override + public ApolloConfig loadConfig(long appId, String clusterName, String versionName) { + Version version = loadVersionByAppIdAndVersionName(appId, versionName); + if (version == null) { + return null; } - @Override - public Version loadVersionByAppIdAndVersionName(long appId, String versionName) { - return versionRepository.findByAppIdAndName(appId, versionName); - } + return loadConfigByVersionAndClusterName(version, clusterName); + } - @Override - public ApolloConfig loadConfigByVersionAndClusterName(Version version, String clusterName) { - ReleaseSnapShot releaseSnapShot = - releaseSnapShotRepository.findByReleaseIdAndClusterName(version.getReleaseId(), clusterName); - if (releaseSnapShot == null) { - return null; - } + @Override + public Version loadVersionByAppIdAndVersionName(long appId, String versionName) { + return versionRepository.findByAppIdAndName(appId, versionName); + } - return assembleConfig(version, releaseSnapShot); + @Override + public ApolloConfig loadConfigByVersionAndClusterName(Version version, String clusterName) { + ReleaseSnapShot releaseSnapShot = + releaseSnapShotRepository + .findByReleaseIdAndClusterName(version.getReleaseId(), clusterName); + if (releaseSnapShot == null) { + return null; } - private ApolloConfig assembleConfig(Version version, ReleaseSnapShot releaseSnapShot) { - ApolloConfig config = - new ApolloConfig(version.getAppId(), releaseSnapShot.getClusterName(), version.getName(), version.getReleaseId()); - config.setConfigurations(transformConfigurationToMap(releaseSnapShot.getConfigurations())); + return assembleConfig(version, releaseSnapShot); + } - return config; - } + private ApolloConfig assembleConfig(Version version, ReleaseSnapShot releaseSnapShot) { + ApolloConfig config = + new ApolloConfig(version.getAppId(), releaseSnapShot.getClusterName(), version.getName(), + version.getReleaseId()); + config.setConfigurations(transformConfigurationToMap(releaseSnapShot.getConfigurations())); + + return config; + } - Map transformConfigurationToMap(String configurations) { - try { - return objectMapper.readValue(configurations, configurationTypeReference); - } catch (IOException e) { - e.printStackTrace(); - return Maps.newHashMap(); - } + Map transformConfigurationToMap(String configurations) { + try { + return objectMapper.readValue(configurations, configurationTypeReference); + } catch (IOException e) { + e.printStackTrace(); + return Maps.newHashMap(); } + } } diff --git a/apollo-biz/src/test/java/com/ctrip/apollo/biz/AllTests.java b/apollo-biz/src/test/java/com/ctrip/apollo/biz/AllTests.java index 4180f6516..254b4b5ad 100644 --- a/apollo-biz/src/test/java/com/ctrip/apollo/biz/AllTests.java +++ b/apollo-biz/src/test/java/com/ctrip/apollo/biz/AllTests.java @@ -1,13 +1,14 @@ package com.ctrip.apollo.biz; import com.ctrip.apollo.biz.service.impl.ConfigServiceImplTest; + import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ -ConfigServiceImplTest.class}) + ConfigServiceImplTest.class}) public class AllTests { } diff --git a/apollo-biz/src/test/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImplTest.java b/apollo-biz/src/test/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImplTest.java index c313fa327..ee5c9a90f 100644 --- a/apollo-biz/src/test/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImplTest.java +++ b/apollo-biz/src/test/java/com/ctrip/apollo/biz/service/impl/ConfigServiceImplTest.java @@ -1,5 +1,7 @@ package com.ctrip.apollo.biz.service.impl; +import com.google.common.collect.Maps; + import com.ctrip.apollo.biz.entity.ReleaseSnapShot; import com.ctrip.apollo.biz.entity.Version; import com.ctrip.apollo.biz.repository.ReleaseSnapShotRepository; @@ -7,7 +9,7 @@ import com.ctrip.apollo.biz.repository.VersionRepository; import com.ctrip.apollo.core.dto.ApolloConfig; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Maps; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,123 +23,140 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.anyObject; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * @author Jason Song(song_s@ctrip.com) */ @RunWith(MockitoJUnitRunner.class) public class ConfigServiceImplTest { - @Mock - private VersionRepository versionRepository; - @Mock - private ReleaseSnapShotRepository releaseSnapShotRepository; - @Mock - private ObjectMapper objectMapper; - private ConfigServiceImpl configService; - - @Before - public void setUp() throws Exception { - configService = new ConfigServiceImpl(); - ReflectionTestUtils.setField(configService, "versionRepository", versionRepository); - ReflectionTestUtils.setField(configService, "releaseSnapShotRepository", releaseSnapShotRepository); - ReflectionTestUtils.setField(configService, "objectMapper", objectMapper); - } - - @Test - public void testLoadConfig() throws Exception { - long someAppId = 1; - String someClusterName = "someClusterName"; - String someVersionName = "someVersionName"; - long someReleaseId = 1; - String someValidConfiguration = "{\"apollo.bar\": \"foo\"}"; - - Version someVersion = assembleVersion(someAppId, someVersionName, someReleaseId); - ReleaseSnapShot someReleaseSnapShot = assembleReleaseSnapShot(someReleaseId, someClusterName, someValidConfiguration); - Map someMap = Maps.newHashMap(); - - when(versionRepository.findByAppIdAndName(someAppId, someVersionName)).thenReturn(someVersion); - when(releaseSnapShotRepository.findByReleaseIdAndClusterName(someReleaseId, someClusterName)).thenReturn(someReleaseSnapShot); - when(objectMapper.readValue(eq(someValidConfiguration), (TypeReference) anyObject())).thenReturn(someMap); - - ApolloConfig result = configService.loadConfig(someAppId, someClusterName, someVersionName); - - assertEquals(someAppId, result.getAppId()); - assertEquals(someClusterName, result.getCluster()); - assertEquals(someVersionName, result.getVersion()); - assertEquals(someReleaseId, result.getReleaseId()); - assertEquals(someMap, result.getConfigurations()); - } - - @Test - public void testLoadConfigWithVersionNotFound() throws Exception { - long someAppId = 1; - String someClusterName = "someClusterName"; - String someVersionName = "someVersionName"; - - when(versionRepository.findByAppIdAndName(someAppId, someVersionName)).thenReturn(null); - - ApolloConfig result = configService.loadConfig(someAppId, someClusterName, someVersionName); - - assertNull(result); - verify(versionRepository, times(1)).findByAppIdAndName(someAppId, someVersionName); - } - - @Test - public void testLoadConfigWithConfigNotFound() throws Exception { - long someAppId = 1; - String someClusterName = "someClusterName"; - String someVersionName = "someVersionName"; - long someReleaseId = 1; - Version someVersion = assembleVersion(someAppId, someVersionName, someReleaseId); - - when(versionRepository.findByAppIdAndName(someAppId, someVersionName)).thenReturn(someVersion); - when(releaseSnapShotRepository.findByReleaseIdAndClusterName(someReleaseId, someClusterName)).thenReturn(null); - - ApolloConfig result = configService.loadConfig(someAppId, someClusterName, someVersionName); - - assertNull(result); - verify(versionRepository, times(1)).findByAppIdAndName(someAppId, someVersionName); - verify(releaseSnapShotRepository, times(1)).findByReleaseIdAndClusterName(someReleaseId, someClusterName); - } - - private Version assembleVersion(long appId, String versionName, long releaseId) { - Version version = new Version(); - version.setAppId(appId); - version.setName(versionName); - version.setReleaseId(releaseId); - return version; - } - - private ReleaseSnapShot assembleReleaseSnapShot(long releaseId, String clusterName, String configurations) { - ReleaseSnapShot releaseSnapShot = new ReleaseSnapShot(); - releaseSnapShot.setReleaseId(releaseId); - releaseSnapShot.setClusterName(clusterName); - releaseSnapShot.setConfigurations(configurations); - return releaseSnapShot; - } - - - @Test - public void testTransformConfigurationToMapSuccessful() throws Exception { - String someValidConfiguration = "{\"apollo.bar\": \"foo\"}"; - Map someMap = Maps.newHashMap(); - when(objectMapper.readValue(eq(someValidConfiguration), (TypeReference) anyObject())).thenReturn(someMap); - - Map result = configService.transformConfigurationToMap(someValidConfiguration); - - assertEquals(someMap, result); - verify(objectMapper, times(1)).readValue(eq(someValidConfiguration), (TypeReference) anyObject()); - } - - @Test - public void testTransformConfigurationToMapFailed() throws Exception { - String someInvalidConfiguration = "xxx"; - when(objectMapper.readValue(eq(someInvalidConfiguration), (TypeReference) anyObject())).thenThrow(IOException.class); - - Map result = configService.transformConfigurationToMap(someInvalidConfiguration); - - assertTrue(result.isEmpty()); - - } + @Mock + private VersionRepository versionRepository; + @Mock + private ReleaseSnapShotRepository releaseSnapShotRepository; + @Mock + private ObjectMapper objectMapper; + private ConfigServiceImpl configService; + + @Before + public void setUp() throws Exception { + configService = new ConfigServiceImpl(); + ReflectionTestUtils.setField(configService, "versionRepository", versionRepository); + ReflectionTestUtils + .setField(configService, "releaseSnapShotRepository", releaseSnapShotRepository); + ReflectionTestUtils.setField(configService, "objectMapper", objectMapper); + } + + @Test + public void testLoadConfig() throws Exception { + long someAppId = 1; + String someClusterName = "someClusterName"; + String someVersionName = "someVersionName"; + long someReleaseId = 1; + String someValidConfiguration = "{\"apollo.bar\": \"foo\"}"; + + Version someVersion = assembleVersion(someAppId, someVersionName, someReleaseId); + ReleaseSnapShot + someReleaseSnapShot = + assembleReleaseSnapShot(someReleaseId, someClusterName, someValidConfiguration); + Map someMap = Maps.newHashMap(); + + when(versionRepository.findByAppIdAndName(someAppId, someVersionName)).thenReturn(someVersion); + when(releaseSnapShotRepository.findByReleaseIdAndClusterName(someReleaseId, someClusterName)) + .thenReturn(someReleaseSnapShot); + when(objectMapper.readValue(eq(someValidConfiguration), (TypeReference) anyObject())) + .thenReturn(someMap); + + ApolloConfig result = configService.loadConfig(someAppId, someClusterName, someVersionName); + + assertEquals(someAppId, result.getAppId()); + assertEquals(someClusterName, result.getCluster()); + assertEquals(someVersionName, result.getVersion()); + assertEquals(someReleaseId, result.getReleaseId()); + assertEquals(someMap, result.getConfigurations()); + } + + @Test + public void testLoadConfigWithVersionNotFound() throws Exception { + long someAppId = 1; + String someClusterName = "someClusterName"; + String someVersionName = "someVersionName"; + + when(versionRepository.findByAppIdAndName(someAppId, someVersionName)).thenReturn(null); + + ApolloConfig result = configService.loadConfig(someAppId, someClusterName, someVersionName); + + assertNull(result); + verify(versionRepository, times(1)).findByAppIdAndName(someAppId, someVersionName); + } + + @Test + public void testLoadConfigWithConfigNotFound() throws Exception { + long someAppId = 1; + String someClusterName = "someClusterName"; + String someVersionName = "someVersionName"; + long someReleaseId = 1; + Version someVersion = assembleVersion(someAppId, someVersionName, someReleaseId); + + when(versionRepository.findByAppIdAndName(someAppId, someVersionName)).thenReturn(someVersion); + when(releaseSnapShotRepository.findByReleaseIdAndClusterName(someReleaseId, someClusterName)) + .thenReturn(null); + + ApolloConfig result = configService.loadConfig(someAppId, someClusterName, someVersionName); + + assertNull(result); + verify(versionRepository, times(1)).findByAppIdAndName(someAppId, someVersionName); + verify(releaseSnapShotRepository, times(1)) + .findByReleaseIdAndClusterName(someReleaseId, someClusterName); + } + + private Version assembleVersion(long appId, String versionName, long releaseId) { + Version version = new Version(); + version.setAppId(appId); + version.setName(versionName); + version.setReleaseId(releaseId); + return version; + } + + private ReleaseSnapShot assembleReleaseSnapShot(long releaseId, String clusterName, + String configurations) { + ReleaseSnapShot releaseSnapShot = new ReleaseSnapShot(); + releaseSnapShot.setReleaseId(releaseId); + releaseSnapShot.setClusterName(clusterName); + releaseSnapShot.setConfigurations(configurations); + return releaseSnapShot; + } + + + @Test + public void testTransformConfigurationToMapSuccessful() throws Exception { + String someValidConfiguration = "{\"apollo.bar\": \"foo\"}"; + Map someMap = Maps.newHashMap(); + when(objectMapper.readValue(eq(someValidConfiguration), (TypeReference) anyObject())) + .thenReturn(someMap); + + Map result = configService.transformConfigurationToMap(someValidConfiguration); + + assertEquals(someMap, result); + verify(objectMapper, times(1)) + .readValue(eq(someValidConfiguration), (TypeReference) anyObject()); + } + + @Test + public void testTransformConfigurationToMapFailed() throws Exception { + String someInvalidConfiguration = "xxx"; + when(objectMapper.readValue(eq(someInvalidConfiguration), (TypeReference) anyObject())) + .thenThrow(IOException.class); + + Map + result = + configService.transformConfigurationToMap(someInvalidConfiguration); + + assertTrue(result.isEmpty()); + + } } diff --git a/apollo-client/pom.xml b/apollo-client/pom.xml index d80f9c606..905257f11 100644 --- a/apollo-client/pom.xml +++ b/apollo-client/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> com.ctrip.apollo apollo diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/ApolloConfigManager.java b/apollo-client/src/main/java/com/ctrip/apollo/client/ApolloConfigManager.java index 533505b41..11cdf5e04 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/ApolloConfigManager.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/ApolloConfigManager.java @@ -5,6 +5,7 @@ import com.ctrip.apollo.client.loader.ConfigLoaderManager; import com.ctrip.apollo.client.model.PropertyChange; import com.ctrip.apollo.client.model.PropertySourceReloadResult; import com.ctrip.apollo.client.util.ConfigUtil; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -35,140 +36,155 @@ import java.util.concurrent.atomic.AtomicReference; * * @author Jason Song(song_s@ctrip.com) */ -public class ApolloConfigManager implements BeanDefinitionRegistryPostProcessor, PriorityOrdered, ApplicationContextAware { - private static final Logger logger = LoggerFactory.getLogger(ApolloConfigManager.class); - private static AtomicReference singletonProtector = new AtomicReference(); - - private ConfigLoaderManager configLoaderManager; - private ConfigurableApplicationContext applicationContext; - private ConfigUtil configUtil; - private ScheduledExecutorService executorService; - private AtomicLong counter; - private RefreshScope scope; - - public ApolloConfigManager() { - if(!singletonProtector.compareAndSet(null, this)) { - throw new IllegalStateException("There should be only one ApolloConfigManager instance!"); - } - this.configLoaderManager = ConfigLoaderFactory.getInstance().getConfigLoaderManager(); - this.configUtil = ConfigUtil.getInstance(); - this.counter = new AtomicLong(); - executorService = Executors.newScheduledThreadPool(1, new ThreadFactory() { - @Override - public Thread newThread(Runnable r) { - Thread thread = new Thread(r, "ApolloConfigManager-" + counter.incrementAndGet()); - return thread; - } - }); - } - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - if (!(applicationContext instanceof ConfigurableApplicationContext)) { - throw new RuntimeException( - String.format("ApplicationContext must implement ConfigurableApplicationContext, but found: %s", applicationContext.getClass().getName())); - } - this.applicationContext = (ConfigurableApplicationContext) applicationContext; - this.configUtil.setApplicationContext(applicationContext); - } - - /** - * This is the first method invoked, so we could prepare the property sources here. - * Specifically we need to finish preparing property source before PropertySourcesPlaceholderConfigurer - * so that configurations could be injected correctly - */ - @Override - public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { - registerDependentBeans(registry); - initializePropertySource(); - schedulePeriodicRefresh(); +public class ApolloConfigManager + implements BeanDefinitionRegistryPostProcessor, PriorityOrdered, ApplicationContextAware { + private static final Logger logger = LoggerFactory.getLogger(ApolloConfigManager.class); + private static AtomicReference + singletonProtector = + new AtomicReference(); + + private ConfigLoaderManager configLoaderManager; + private ConfigurableApplicationContext applicationContext; + private ConfigUtil configUtil; + private ScheduledExecutorService executorService; + private AtomicLong counter; + private RefreshScope scope; + + public ApolloConfigManager() { + if (!singletonProtector.compareAndSet(null, this)) { + throw new IllegalStateException("There should be only one ApolloConfigManager instance!"); } - - /** - * Register beans needed for Apollo Config Client - *
  • - * - RefreshScope: used to refresh beans when configurations changes - *
  • - *
  • - * - PropertySourcesPlaceholderConfigurer: used to support placeholder configuration injection - *
  • - * @param registry - */ - private void registerDependentBeans(BeanDefinitionRegistry registry) { - BeanDefinition refreshScope = BeanDefinitionBuilder.genericBeanDefinition(RefreshScope.class).getBeanDefinition(); - registry.registerBeanDefinition("refreshScope", refreshScope); - BeanDefinition propertySourcesPlaceholderConfigurer = BeanDefinitionBuilder.genericBeanDefinition(PropertySourcesPlaceholderConfigurer.class).getBeanDefinition(); - registry.registerBeanDefinition("propertySourcesPlaceholderConfigurer", propertySourcesPlaceholderConfigurer); + this.configLoaderManager = ConfigLoaderFactory.getInstance().getConfigLoaderManager(); + this.configUtil = ConfigUtil.getInstance(); + this.counter = new AtomicLong(); + executorService = Executors.newScheduledThreadPool(1, new ThreadFactory() { + @Override + public Thread newThread(Runnable runnable) { + Thread thread = new Thread(runnable, "ApolloConfigManager-" + counter.incrementAndGet()); + return thread; + } + }); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if (!(applicationContext instanceof ConfigurableApplicationContext)) { + throw new RuntimeException( + String.format( + "ApplicationContext must implement ConfigurableApplicationContext, but found: %s", + applicationContext.getClass().getName())); } - - /** - * This is executed after postProcessBeanDefinitionRegistry - */ - @Override - public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - } - - /** - * Make sure this bean is called before other beans - * @return - */ - @Override - public int getOrder() { - return Ordered.HIGHEST_PRECEDENCE; + this.applicationContext = (ConfigurableApplicationContext) applicationContext; + this.configUtil.setApplicationContext(applicationContext); + } + + /** + * This is the first method invoked, so we could prepare the property sources here. + * Specifically we need to finish preparing property source before PropertySourcesPlaceholderConfigurer + * so that configurations could be injected correctly + */ + @Override + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) + throws BeansException { + registerDependentBeans(registry); + initializePropertySource(); + schedulePeriodicRefresh(); + } + + /** + * Register beans needed for Apollo Config Client + *
  • + * - RefreshScope: used to refresh beans when configurations changes + *
  • + *
  • + * - PropertySourcesPlaceholderConfigurer: used to support placeholder configuration injection + *
  • + */ + private void registerDependentBeans(BeanDefinitionRegistry registry) { + BeanDefinition + refreshScope = + BeanDefinitionBuilder.genericBeanDefinition(RefreshScope.class).getBeanDefinition(); + registry.registerBeanDefinition("refreshScope", refreshScope); + BeanDefinition + propertySourcesPlaceholderConfigurer = + BeanDefinitionBuilder.genericBeanDefinition(PropertySourcesPlaceholderConfigurer.class) + .getBeanDefinition(); + registry.registerBeanDefinition("propertySourcesPlaceholderConfigurer", + propertySourcesPlaceholderConfigurer); + } + + /** + * This is executed after postProcessBeanDefinitionRegistry + */ + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) + throws BeansException { + } + + /** + * Make sure this bean is called before other beans + */ + @Override + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE; + } + + /** + * Initialize property sources + */ + void initializePropertySource() { + //TODO stop application from starting when config cannot be loaded? + CompositePropertySource result = this.configLoaderManager.loadPropertySource(); + + updateEnvironmentPropertySource(result); + } + + private void updateEnvironmentPropertySource(CompositePropertySource currentPropertySource) { + MutablePropertySources + currentPropertySources = + applicationContext.getEnvironment().getPropertySources(); + if (currentPropertySources.contains(currentPropertySource.getName())) { + currentPropertySources.replace(currentPropertySource.getName(), currentPropertySource); + return; } - - /** - * Initialize property sources - */ - void initializePropertySource() { - //TODO stop application from starting when config cannot be loaded? - CompositePropertySource result = this.configLoaderManager.loadPropertySource(); - - updateEnvironmentPropertySource(result); - } - - private void updateEnvironmentPropertySource(CompositePropertySource currentPropertySource) { - MutablePropertySources currentPropertySources = applicationContext.getEnvironment().getPropertySources(); - if (currentPropertySources.contains(currentPropertySource.getName())) { - currentPropertySources.replace(currentPropertySource.getName(), currentPropertySource); - return; - } - currentPropertySources.addFirst(currentPropertySource); - } - - void schedulePeriodicRefresh() { - executorService.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - try { - updatePropertySource(); - } catch (Throwable e) { - logger.error("Refreshing config failed", e); - } + currentPropertySources.addFirst(currentPropertySource); + } + + void schedulePeriodicRefresh() { + executorService.scheduleAtFixedRate( + new Runnable() { + @Override + public void run() { + try { + updatePropertySource(); + } catch (Throwable ex) { + logger.error("Refreshing config failed", ex); } - }, configUtil.getRefreshInterval(), configUtil.getRefreshInterval(), configUtil.getRefreshTimeUnit()); + } + }, configUtil.getRefreshInterval(), configUtil.getRefreshInterval(), + configUtil.getRefreshTimeUnit()); + } + + public List updatePropertySource() { + PropertySourceReloadResult result = this.configLoaderManager.reloadPropertySource(); + if (result.hasChanges()) { + logger.info("Found changes, refresh environment and refreshscope beans."); + updateEnvironmentPropertySource(result.getPropertySource()); + refreshBeans(); } + return result.getChanges(); + } - public List updatePropertySource() { - PropertySourceReloadResult result = this.configLoaderManager.reloadPropertySource(); - if (result.hasChanges()) { - logger.info("Found changes, refresh environment and refreshscope beans."); - updateEnvironmentPropertySource(result.getPropertySource()); - refreshBeans(); - } - return result.getChanges(); + private void refreshBeans() { + if (this.scope == null) { + this.scope = applicationContext.getBean("refreshScope", RefreshScope.class); } - private void refreshBeans() { - if (this.scope == null) { - this.scope = applicationContext.getBean("refreshScope", RefreshScope.class); - } - - if (this.scope == null) { - logger.error("Could not get refresh scope object, skip refresh beans"); - return; - } - - this.scope.refreshAll(); + if (this.scope == null) { + logger.error("Could not get refresh scope object, skip refresh beans"); + return; } + + this.scope.refreshAll(); + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/constants/Constants.java b/apollo-client/src/main/java/com/ctrip/apollo/client/constants/Constants.java index 1328b60e1..9d68c9cdc 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/constants/Constants.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/constants/Constants.java @@ -4,8 +4,8 @@ package com.ctrip.apollo.client.constants; * @author Jason Song(song_s@ctrip.com) */ public class Constants { - public static final String APP_ID = "app.id"; - public static final String VERSION = "version"; - public static final String DEFAULT_VERSION_NAME = "latest-release"; - public static final String ENV = "env"; + public static final String APP_ID = "app.id"; + public static final String VERSION = "version"; + public static final String DEFAULT_VERSION_NAME = "latest-release"; + public static final String ENV = "env"; } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/enums/PropertyChangeType.java b/apollo-client/src/main/java/com/ctrip/apollo/client/enums/PropertyChangeType.java index bb3ade156..0a12bdba5 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/enums/PropertyChangeType.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/enums/PropertyChangeType.java @@ -5,17 +5,17 @@ package com.ctrip.apollo.client.enums; * @author Jason Song(song_s@ctrip.com) */ public enum PropertyChangeType { - NEW("New"), - MODIFIED("Modified"), - DELETED("Deleted"); + NEW("New"), + MODIFIED("Modified"), + DELETED("Deleted"); - private String type; + private String type; - PropertyChangeType(String type) { - this.type = type; - } + PropertyChangeType(String type) { + this.type = type; + } - public String getType() { - return type; - } + public String getType() { + return type; + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/env/ClientEnvironment.java b/apollo-client/src/main/java/com/ctrip/apollo/client/env/ClientEnvironment.java index 0a322a4a4..f57851a56 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/env/ClientEnvironment.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/env/ClientEnvironment.java @@ -1,5 +1,14 @@ package com.ctrip.apollo.client.env; +import com.ctrip.apollo.Apollo; +import com.ctrip.apollo.Apollo.Env; +import com.ctrip.apollo.client.constants.Constants; +import com.ctrip.apollo.core.MetaDomainConsts; +import com.ctrip.apollo.core.utils.StringUtils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -10,20 +19,11 @@ import java.util.Enumeration; import java.util.Properties; import java.util.concurrent.atomic.AtomicReference; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.ctrip.apollo.Apollo; -import com.ctrip.apollo.Apollo.Env; -import com.ctrip.apollo.client.constants.Constants; -import com.ctrip.apollo.core.MetaDomainConsts; -import com.ctrip.apollo.core.utils.StringUtils; - public class ClientEnvironment { private static final Logger logger = LoggerFactory.getLogger(ClientEnvironment.class); - private final static String DEFAULT_FILE = "/apollo.properties"; + private static final String DEFAULT_FILE = "/apollo.properties"; private AtomicReference env = new AtomicReference(); @@ -84,20 +84,20 @@ public class ClientEnvironment { props.load(in); in.close(); } - } catch (Exception e) { - logger.warn("Reading config failed: {}", e.getMessage()); + } catch (Exception ex) { + logger.warn("Reading config failed: {}", ex.getMessage()); } finally { if (in != null) { try { in.close(); - } catch (IOException e) { - logger.warn("Close config failed: {}", e.getMessage()); + } catch (IOException ex) { + logger.warn("Close config failed: {}", ex.getMessage()); } } } StringBuilder sb = new StringBuilder(); for (Enumeration e = (Enumeration) props.propertyNames(); e - .hasMoreElements();) { + .hasMoreElements(); ) { String key = e.nextElement(); String val = (String) props.getProperty(key); sb.append(key).append('=').append(val).append('\n'); diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoader.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoader.java index 513eeb632..6b389ebe3 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoader.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoader.java @@ -7,7 +7,7 @@ import com.ctrip.apollo.core.dto.ApolloConfig; * @author Jason Song(songs_ctrip.com) */ public interface ConfigLoader { - ApolloConfig loadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous); + ApolloConfig loadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous); - void setFallBackLoader(ConfigLoader configLoader); + void setFallBackLoader(ConfigLoader configLoader); } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderFactory.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderFactory.java index 6e872cca0..a0646e329 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderFactory.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderFactory.java @@ -1,11 +1,12 @@ package com.ctrip.apollo.client.loader; -import com.ctrip.apollo.client.loader.impl.InMemoryConfigLoader; -import com.ctrip.apollo.client.loader.impl.LocalFileConfigLoader; import com.ctrip.apollo.Apollo.Env; import com.ctrip.apollo.client.env.ClientEnvironment; +import com.ctrip.apollo.client.loader.impl.InMemoryConfigLoader; +import com.ctrip.apollo.client.loader.impl.LocalFileConfigLoader; import com.ctrip.apollo.client.loader.impl.RemoteConfigLoader; import com.ctrip.apollo.client.util.ConfigUtil; + import org.springframework.web.client.RestTemplate; /** @@ -14,35 +15,39 @@ import org.springframework.web.client.RestTemplate; public class ConfigLoaderFactory { private static ConfigLoaderFactory configLoaderFactory = new ConfigLoaderFactory(); - private ConfigLoaderFactory() {} + private ConfigLoaderFactory() { + } public static ConfigLoaderFactory getInstance() { return configLoaderFactory; } - public ConfigLoader getLocalFileConfigLoader() { - ConfigLoader configLoader = new LocalFileConfigLoader(); - return configLoader; - } + public ConfigLoader getLocalFileConfigLoader() { + ConfigLoader configLoader = new LocalFileConfigLoader(); + return configLoader; + } - public ConfigLoader getInMemoryConfigLoader() { - ConfigLoader inMemoryConfigLoader = new InMemoryConfigLoader(); - inMemoryConfigLoader.setFallBackLoader(getLocalFileConfigLoader()); - return inMemoryConfigLoader; - } + public ConfigLoader getInMemoryConfigLoader() { + ConfigLoader inMemoryConfigLoader = new InMemoryConfigLoader(); + inMemoryConfigLoader.setFallBackLoader(getLocalFileConfigLoader()); + return inMemoryConfigLoader; + } - public ConfigLoader getRemoteConfigLoader() { - ConfigLoader remoteConfigLoader = new RemoteConfigLoader(new RestTemplate(), ConfigUtil.getInstance(), new ConfigServiceLocator()); + public ConfigLoader getRemoteConfigLoader() { + ConfigLoader + remoteConfigLoader = + new RemoteConfigLoader(new RestTemplate(), ConfigUtil.getInstance(), + new ConfigServiceLocator()); // remoteConfigLoader.setFallBackLoader(getInMemoryConfigLoader()); - return remoteConfigLoader; - } + return remoteConfigLoader; + } - public ConfigLoaderManager getConfigLoaderManager() { - ClientEnvironment env = ClientEnvironment.getInstance(); - if (env.getEnv().equals(Env.LOCAL)) { - return new ConfigLoaderManager(getLocalFileConfigLoader(), ConfigUtil.getInstance()); - } else { - return new ConfigLoaderManager(getRemoteConfigLoader(), ConfigUtil.getInstance()); - } + public ConfigLoaderManager getConfigLoaderManager() { + ClientEnvironment env = ClientEnvironment.getInstance(); + if (env.getEnv().equals(Env.LOCAL)) { + return new ConfigLoaderManager(getLocalFileConfigLoader(), ConfigUtil.getInstance()); + } else { + return new ConfigLoaderManager(getRemoteConfigLoader(), ConfigUtil.getInstance()); } + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderManager.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderManager.java index 2a5821c91..5bff8692a 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderManager.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigLoaderManager.java @@ -1,14 +1,16 @@ package com.ctrip.apollo.client.loader; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + import com.ctrip.apollo.client.enums.PropertyChangeType; import com.ctrip.apollo.client.model.ApolloRegistry; import com.ctrip.apollo.client.model.PropertyChange; import com.ctrip.apollo.client.model.PropertySourceReloadResult; import com.ctrip.apollo.client.util.ConfigUtil; import com.ctrip.apollo.core.dto.ApolloConfig; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.env.CompositePropertySource; @@ -19,172 +21,186 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.*; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicLong; /** * @author Jason Song(song_s@ctrip.com) */ public class ConfigLoaderManager { - public static final String APOLLO_PROPERTY_SOURCE_NAME = "ApolloConfigProperties"; - private static final Logger logger = LoggerFactory.getLogger(ConfigLoaderManager.class); - private ConfigLoader configLoader; - private ConfigUtil configUtil; - private final ExecutorService executorService; - private final AtomicLong counter; - private Map currentApolloRegistryConfigCache; - private Map previousApolloRegistryConfigCache; - private List apolloRegistries; - - public ConfigLoaderManager(ConfigLoader configLoader, ConfigUtil configUtil) { - this.configLoader = configLoader; - this.configUtil = configUtil; - this.counter = new AtomicLong(); - this.executorService = Executors.newFixedThreadPool(5, new ThreadFactory() { - @Override - public Thread newThread(Runnable r) { - Thread thread = new Thread(r, "ConfigLoaderManager-" + counter.incrementAndGet()); - return thread; - } - }); - this.currentApolloRegistryConfigCache = Maps.newConcurrentMap(); + public static final String APOLLO_PROPERTY_SOURCE_NAME = "ApolloConfigProperties"; + private static final Logger logger = LoggerFactory.getLogger(ConfigLoaderManager.class); + private ConfigLoader configLoader; + private ConfigUtil configUtil; + private final ExecutorService executorService; + private final AtomicLong counter; + private Map currentApolloRegistryConfigCache; + private Map previousApolloRegistryConfigCache; + private List apolloRegistries; + + public ConfigLoaderManager(ConfigLoader configLoader, ConfigUtil configUtil) { + this.configLoader = configLoader; + this.configUtil = configUtil; + this.counter = new AtomicLong(); + this.executorService = Executors.newFixedThreadPool(5, new ThreadFactory() { + @Override + public Thread newThread(Runnable runnable) { + Thread thread = new Thread(runnable, "ConfigLoaderManager-" + counter.incrementAndGet()); + return thread; + } + }); + this.currentApolloRegistryConfigCache = Maps.newConcurrentMap(); + } + + public CompositePropertySource loadPropertySource() { + try { + apolloRegistries = configUtil.loadApolloRegistries(); + } catch (IOException ex) { + throw new RuntimeException("Load apollo config registry failed", ex); } - public CompositePropertySource loadPropertySource() { - try { - apolloRegistries = configUtil.loadApolloRegistries(); - } catch (IOException e) { - throw new RuntimeException("Load apollo config registry failed", e); - } - - return loadPropertySourceWithApolloRegistries(apolloRegistries); - } - - public PropertySourceReloadResult reloadPropertySource() { - CompositePropertySource composite = loadPropertySourceWithApolloRegistries(apolloRegistries); - List previous = Lists.newArrayList(this.previousApolloRegistryConfigCache.values()); - List current = Lists.newArrayList(this.currentApolloRegistryConfigCache.values()); - return new PropertySourceReloadResult(composite, calcPropertyChanges(previous, current)); + return loadPropertySourceWithApolloRegistries(apolloRegistries); + } + + public PropertySourceReloadResult reloadPropertySource() { + CompositePropertySource composite = loadPropertySourceWithApolloRegistries(apolloRegistries); + List + previous = + Lists.newArrayList(this.previousApolloRegistryConfigCache.values()); + List current = Lists.newArrayList(this.currentApolloRegistryConfigCache.values()); + return new PropertySourceReloadResult(composite, calcPropertyChanges(previous, current)); + } + + /** + * Load property source with apollo registries provided + * Should not be invoked in parallel since there are some operations like create/destroy cache, + * writing to files etc. + */ + private synchronized CompositePropertySource loadPropertySourceWithApolloRegistries( + List apolloRegistries) { + resetApolloRegistryConfigCache(); + CompositePropertySource composite = new CompositePropertySource(APOLLO_PROPERTY_SOURCE_NAME); + if (apolloRegistries == null || apolloRegistries.isEmpty()) { + logger.warn("No Apollo Registry found!"); + return composite; } - - /** - * Load property source with apollo registries provided - * Should not be invoked in parallel since there are some operations like create/destroy cache, - * writing to files etc. - * @param apolloRegistries - * @return - */ - private synchronized CompositePropertySource loadPropertySourceWithApolloRegistries(List apolloRegistries) { - resetApolloRegistryConfigCache(); - CompositePropertySource composite = new CompositePropertySource(APOLLO_PROPERTY_SOURCE_NAME); - if (apolloRegistries == null || apolloRegistries.isEmpty()) { - logger.warn("No Apollo Registry found!"); - return composite; - } - try { - List apolloConfigList = loadApolloConfigs(apolloRegistries); - - Collections.sort(apolloConfigList); - for (ApolloConfig apolloConfig : apolloConfigList) { - composite.addPropertySource(new MapPropertySource(assemblePropertySourceName(apolloConfig), apolloConfig.getConfigurations())); - } - return composite; - } catch (Throwable throwable) { - throw new RuntimeException("Load apollo configs failed", throwable); - } + try { + List apolloConfigList = loadApolloConfigs(apolloRegistries); + + Collections.sort(apolloConfigList); + for (ApolloConfig apolloConfig : apolloConfigList) { + composite.addPropertySource(new MapPropertySource(assemblePropertySourceName(apolloConfig), + apolloConfig.getConfigurations())); + } + return composite; + } catch (Throwable throwable) { + throw new RuntimeException("Load apollo configs failed", throwable); } + } - List calcPropertyChanges(List previous, List current) { - Map previousMap = collectConfigurations(previous); - Map currentMap = collectConfigurations(current); + List calcPropertyChanges(List previous, + List current) { + Map previousMap = collectConfigurations(previous); + Map currentMap = collectConfigurations(current); - Set previousKeys = previousMap.keySet(); - Set currentKeys = currentMap.keySet(); + Set previousKeys = previousMap.keySet(); + Set currentKeys = currentMap.keySet(); - Set commonKeys = Sets.intersection(previousKeys, currentKeys); - Set newKeys = Sets.difference(currentKeys, commonKeys); - Set removedKeys = Sets.difference(previousKeys, commonKeys); + Set commonKeys = Sets.intersection(previousKeys, currentKeys); + Set newKeys = Sets.difference(currentKeys, commonKeys); + Set removedKeys = Sets.difference(previousKeys, commonKeys); - List changes = Lists.newArrayList(); - - for (String newKey : newKeys) { - changes.add(new PropertyChange(newKey, null, currentMap.get(newKey), PropertyChangeType.NEW)); - } + List changes = Lists.newArrayList(); - for (String removedKey : removedKeys) { - changes.add(new PropertyChange(removedKey, previousMap.get(removedKey), null, PropertyChangeType.DELETED)); - } - - for (String commonKey : commonKeys) { - if (previousMap.get(commonKey).equals(currentMap.get(commonKey))) { - continue; - } - changes.add(new PropertyChange(commonKey, previousMap.get(commonKey), currentMap.get(commonKey), PropertyChangeType.MODIFIED)); - } + for (String newKey : newKeys) { + changes.add(new PropertyChange(newKey, null, currentMap.get(newKey), PropertyChangeType.NEW)); + } - return changes; + for (String removedKey : removedKeys) { + changes.add(new PropertyChange(removedKey, previousMap.get(removedKey), null, + PropertyChangeType.DELETED)); } - Map collectConfigurations(List apolloConfigs) { - Collections.sort(apolloConfigs); - Map configMap = Maps.newHashMap(); - for (int i = apolloConfigs.size() - 1; i > -1; i--) { - configMap.putAll(apolloConfigs.get(i).getConfigurations()); - } - return configMap; + for (String commonKey : commonKeys) { + if (previousMap.get(commonKey).equals(currentMap.get(commonKey))) { + continue; + } + changes.add( + new PropertyChange(commonKey, previousMap.get(commonKey), currentMap.get(commonKey), + PropertyChangeType.MODIFIED)); } - List loadApolloConfigs(List apolloRegistries) throws Throwable { - List> futures = Lists.newArrayList(); - for (final ApolloRegistry apolloRegistry : apolloRegistries) { - futures.add(executorService.submit(new Callable() { - @Override - public ApolloConfig call() throws Exception { - return loadSingleApolloConfig(apolloRegistry); - } - })); - } - List apolloConfigList = Lists.newArrayList(); - for (Future future : futures) { - try { - ApolloConfig result = future.get(); - if (result == null) { - continue; - } - apolloConfigList.add(result); - } catch (ExecutionException e) { - throw e.getCause(); - } + return changes; + } + + Map collectConfigurations(List apolloConfigs) { + Collections.sort(apolloConfigs); + Map configMap = Maps.newHashMap(); + for (int i = apolloConfigs.size() - 1; i > -1; i--) { + configMap.putAll(apolloConfigs.get(i).getConfigurations()); + } + return configMap; + } + + List loadApolloConfigs(List apolloRegistries) throws Throwable { + List> futures = Lists.newArrayList(); + for (final ApolloRegistry apolloRegistry : apolloRegistries) { + futures.add(executorService.submit(new Callable() { + @Override + public ApolloConfig call() throws Exception { + return loadSingleApolloConfig(apolloRegistry); } - return apolloConfigList; + })); } - - ApolloConfig loadSingleApolloConfig(ApolloRegistry apolloRegistry) { - ApolloConfig result = configLoader.loadApolloConfig(apolloRegistry, getPreviousApolloConfig(apolloRegistry)); + List apolloConfigList = Lists.newArrayList(); + for (Future future : futures) { + try { + ApolloConfig result = future.get(); if (result == null) { - logger.error("Loaded config null..."); - return null; + continue; } - logger.info("Loaded config: {}", result); - updateCurrentApolloConfigCache(apolloRegistry, result); - - return result; + apolloConfigList.add(result); + } catch (ExecutionException ex) { + throw ex.getCause(); + } } - - void resetApolloRegistryConfigCache() { - this.previousApolloRegistryConfigCache = currentApolloRegistryConfigCache; - this.currentApolloRegistryConfigCache = Maps.newConcurrentMap(); + return apolloConfigList; + } + + ApolloConfig loadSingleApolloConfig(ApolloRegistry apolloRegistry) { + ApolloConfig + result = + configLoader.loadApolloConfig(apolloRegistry, getPreviousApolloConfig(apolloRegistry)); + if (result == null) { + logger.error("Loaded config null..."); + return null; } + logger.info("Loaded config: {}", result); + updateCurrentApolloConfigCache(apolloRegistry, result); - ApolloConfig getPreviousApolloConfig(ApolloRegistry apolloRegistry) { - return previousApolloRegistryConfigCache.get(apolloRegistry); - } + return result; + } - void updateCurrentApolloConfigCache(ApolloRegistry apolloRegistry, ApolloConfig apolloConfig) { - currentApolloRegistryConfigCache.put(apolloRegistry, apolloConfig); - } + void resetApolloRegistryConfigCache() { + this.previousApolloRegistryConfigCache = currentApolloRegistryConfigCache; + this.currentApolloRegistryConfigCache = Maps.newConcurrentMap(); + } - private String assemblePropertySourceName(ApolloConfig apolloConfig) { - return String.format("%d-%s-%s-%d", apolloConfig.getAppId(), apolloConfig.getCluster(), apolloConfig.getVersion(), apolloConfig.getReleaseId()); - } + ApolloConfig getPreviousApolloConfig(ApolloRegistry apolloRegistry) { + return previousApolloRegistryConfigCache.get(apolloRegistry); + } + + void updateCurrentApolloConfigCache(ApolloRegistry apolloRegistry, ApolloConfig apolloConfig) { + currentApolloRegistryConfigCache.put(apolloRegistry, apolloConfig); + } + + private String assemblePropertySourceName(ApolloConfig apolloConfig) { + return String.format("%d-%s-%s-%d", apolloConfig.getAppId(), apolloConfig.getCluster(), + apolloConfig.getVersion(), apolloConfig.getReleaseId()); + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigServiceLocator.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigServiceLocator.java index e2bf7de46..0139dce6d 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigServiceLocator.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/ConfigServiceLocator.java @@ -1,15 +1,15 @@ package com.ctrip.apollo.client.loader; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; +import com.ctrip.apollo.client.env.ClientEnvironment; +import com.ctrip.apollo.core.serivce.ApolloService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.client.RestTemplate; -import com.ctrip.apollo.client.env.ClientEnvironment; -import com.ctrip.apollo.core.serivce.ApolloService; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; public class ConfigServiceLocator { @@ -31,8 +31,8 @@ public class ConfigServiceLocator { serviceCaches.add(service); } } - } catch (Exception e) { - logger.warn(e.getMessage()); + } catch (Exception ex) { + logger.warn(ex.getMessage()); } return serviceCaches; } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/AbstractConfigLoader.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/AbstractConfigLoader.java index 6371ca5d9..4eec26360 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/AbstractConfigLoader.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/AbstractConfigLoader.java @@ -3,6 +3,7 @@ package com.ctrip.apollo.client.loader.impl; import com.ctrip.apollo.client.loader.ConfigLoader; import com.ctrip.apollo.client.model.ApolloRegistry; import com.ctrip.apollo.core.dto.ApolloConfig; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,26 +11,29 @@ import org.slf4j.LoggerFactory; * @author Jason Song(song_s@ctrip.com) */ public abstract class AbstractConfigLoader implements ConfigLoader { - private static final Logger logger = LoggerFactory.getLogger(AbstractConfigLoader.class); - private ConfigLoader fallback; + private static final Logger logger = LoggerFactory.getLogger(AbstractConfigLoader.class); + private ConfigLoader fallback; - @Override - public ApolloConfig loadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { - try { - return doLoadApolloConfig(apolloRegistry, previous); - } catch (Throwable e) { - if (this.fallback == null) { - throw new RuntimeException(String.format("Load Apollo Config failed - %s", apolloRegistry.toString()), e); - } - logger.error("Load Config via {} failed, try to use its fallback {} to load", getClass().getSimpleName(), fallback.getClass().getSimpleName(), e); - return this.fallback.loadApolloConfig(apolloRegistry, previous); - } + @Override + public ApolloConfig loadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { + try { + return doLoadApolloConfig(apolloRegistry, previous); + } catch (Throwable ex) { + if (this.fallback == null) { + throw new RuntimeException( + String.format("Load Apollo Config failed - %s", apolloRegistry.toString()), ex); + } + logger.error("Load Config via {} failed, try to use its fallback {} to load", + getClass().getSimpleName(), fallback.getClass().getSimpleName(), ex); + return this.fallback.loadApolloConfig(apolloRegistry, previous); } + } - protected abstract ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous); + protected abstract ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, + ApolloConfig previous); - @Override - public void setFallBackLoader(ConfigLoader configLoader) { - this.fallback = configLoader; - } + @Override + public void setFallBackLoader(ConfigLoader configLoader) { + this.fallback = configLoader; + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/InMemoryConfigLoader.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/InMemoryConfigLoader.java index d72e50a3d..c38fc8b38 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/InMemoryConfigLoader.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/InMemoryConfigLoader.java @@ -6,10 +6,10 @@ import com.ctrip.apollo.core.dto.ApolloConfig; /** * @author Jason Song(song_s@ctrip.com) */ -public class InMemoryConfigLoader extends AbstractConfigLoader{ +public class InMemoryConfigLoader extends AbstractConfigLoader { - @Override - protected ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { - return null; - } + @Override + protected ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { + return null; + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/LocalFileConfigLoader.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/LocalFileConfigLoader.java index a997ed638..80dc316d3 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/LocalFileConfigLoader.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/LocalFileConfigLoader.java @@ -5,11 +5,12 @@ import com.ctrip.apollo.core.dto.ApolloConfig; /** * Load config from local backup file + * * @author Jason Song(song_s@ctrip.com) */ -public class LocalFileConfigLoader extends AbstractConfigLoader{ - @Override - public ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { - return null; - } +public class LocalFileConfigLoader extends AbstractConfigLoader { + @Override + public ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { + return null; + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoader.java b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoader.java index 15ac7cd5d..a30538893 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoader.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoader.java @@ -1,11 +1,13 @@ package com.ctrip.apollo.client.loader.impl; +import com.google.common.collect.Maps; + import com.ctrip.apollo.client.loader.ConfigServiceLocator; import com.ctrip.apollo.client.model.ApolloRegistry; import com.ctrip.apollo.client.util.ConfigUtil; import com.ctrip.apollo.core.dto.ApolloConfig; import com.ctrip.apollo.core.serivce.ApolloService; -import com.google.common.collect.Maps; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpEntity; @@ -24,76 +26,80 @@ import java.util.Map; * @author Jason Song(song_s@ctrip.com) */ public class RemoteConfigLoader extends AbstractConfigLoader { - private static final Logger logger = LoggerFactory.getLogger(RemoteConfigLoader.class); - private final RestTemplate restTemplate; - private final ConfigUtil configUtil; - private final ConfigServiceLocator serviceLocator; - - public RemoteConfigLoader(RestTemplate restTemplate, ConfigUtil configUtil, ConfigServiceLocator locator) { - this.restTemplate = restTemplate; - this.configUtil = configUtil; - this.serviceLocator = locator; + private static final Logger logger = LoggerFactory.getLogger(RemoteConfigLoader.class); + private final RestTemplate restTemplate; + private final ConfigUtil configUtil; + private final ConfigServiceLocator serviceLocator; + + public RemoteConfigLoader(RestTemplate restTemplate, ConfigUtil configUtil, + ConfigServiceLocator locator) { + this.restTemplate = restTemplate; + this.configUtil = configUtil; + this.serviceLocator = locator; + } + + ApolloConfig getRemoteConfig(RestTemplate restTemplate, String uri, String cluster, + ApolloRegistry apolloRegistry, ApolloConfig previousConfig) { + long appId = apolloRegistry.getAppId(); + String version = apolloRegistry.getVersion(); + + logger.info("Loading config from {}, appId={}, cluster={}, version={}", uri, appId, cluster, + version); + String path = "/config/{appId}/{cluster}"; + Map paramMap = Maps.newHashMap(); + paramMap.put("appId", appId); + paramMap.put("cluster", cluster); + + if (StringUtils.hasText(version)) { + path = path + "/{version}"; + paramMap.put("version", version); + } + if (previousConfig != null) { + path = path + "?releaseId={releaseId}"; + paramMap.put("releaseId", previousConfig.getReleaseId()); } - ApolloConfig getRemoteConfig(RestTemplate restTemplate, String uri, String cluster, ApolloRegistry apolloRegistry, ApolloConfig previousConfig) { - long appId = apolloRegistry.getAppId(); - String version = apolloRegistry.getVersion(); - - logger.info("Loading config from {}, appId={}, cluster={}, version={}", uri, appId, cluster, version); - String path = "/config/{appId}/{cluster}"; - Map paramMap = Maps.newHashMap(); - paramMap.put("appId", appId); - paramMap.put("cluster", cluster); - - if (StringUtils.hasText(version)) { - path = path + "/{version}"; - paramMap.put("version", version); - } - if (previousConfig != null) { - path = path + "?releaseId={releaseId}"; - paramMap.put("releaseId", previousConfig.getReleaseId()); - } - - ResponseEntity response; - - try { - // TODO retry - response = restTemplate.exchange(uri - + path, HttpMethod.GET, new HttpEntity((Void) null), ApolloConfig.class, paramMap); - } catch (Throwable e) { - throw e; - } - - if (response == null) { - throw new RuntimeException("Load apollo config failed, response is null"); - } - - if (response.getStatusCode() == HttpStatus.NOT_MODIFIED) { - return null; - } - - if (response.getStatusCode() != HttpStatus.OK) { - throw new RuntimeException(String.format("Load apollo config failed, response status %s", response.getStatusCode())); - } - - ApolloConfig result = response.getBody(); - return result; + ResponseEntity response; + + try { + // TODO retry + response = restTemplate.exchange(uri + + path, HttpMethod.GET, new HttpEntity((Void) null), ApolloConfig.class, paramMap); + } catch (Throwable ex) { + throw ex; + } + + if (response == null) { + throw new RuntimeException("Load apollo config failed, response is null"); + } + + if (response.getStatusCode() == HttpStatus.NOT_MODIFIED) { + return null; } - @Override - protected ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { - ApolloConfig result = this.getRemoteConfig(restTemplate, - getConfigServiceUrl(), configUtil.getCluster(), - apolloRegistry, previous); - //When remote server return 304, we need to return the previous result - return result == null ? previous : result; + if (response.getStatusCode() != HttpStatus.OK) { + throw new RuntimeException( + String.format("Load apollo config failed, response status %s", response.getStatusCode())); + } + + ApolloConfig result = response.getBody(); + return result; + } + + @Override + protected ApolloConfig doLoadApolloConfig(ApolloRegistry apolloRegistry, ApolloConfig previous) { + ApolloConfig result = this.getRemoteConfig(restTemplate, + getConfigServiceUrl(), configUtil.getCluster(), + apolloRegistry, previous); + //When remote server return 304, we need to return the previous result + return result == null ? previous : result; + } + + private String getConfigServiceUrl() { + List services = serviceLocator.getConfigServices(); + if (services.size() == 0) { + throw new RuntimeException("No available config service"); } - - private String getConfigServiceUrl() { - List services = serviceLocator.getConfigServices(); - if(services.size()==0){ - throw new RuntimeException("No available config service"); - } - return services.get(0).getHomepageUrl(); - } -} \ No newline at end of file + return services.get(0).getHomepageUrl(); + } +} diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/model/ApolloRegistry.java b/apollo-client/src/main/java/com/ctrip/apollo/client/model/ApolloRegistry.java index d3a4932ff..876b10a25 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/model/ApolloRegistry.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/model/ApolloRegistry.java @@ -6,31 +6,31 @@ import com.google.common.base.MoreObjects; * @author Jason Song(song_s@ctrip.com) */ public class ApolloRegistry { - private long appId; - private String version; + private long appId; + private String version; - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } - public String getVersion() { - return version; - } + public String getVersion() { + return version; + } - public void setVersion(String version) { - this.version = version; - } + public void setVersion(String version) { + this.version = version; + } - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .omitNullValues() - .add("appId", appId) - .add("version", version) - .toString(); - } + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .omitNullValues() + .add("appId", appId) + .add("version", version) + .toString(); + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertyChange.java b/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertyChange.java index 699f08d7a..beb97318e 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertyChange.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertyChange.java @@ -6,47 +6,48 @@ import com.ctrip.apollo.client.enums.PropertyChangeType; * @author Jason Song(song_s@ctrip.com) */ public class PropertyChange { - private String propertyName; - private Object oldValue; - private Object newValue; - private PropertyChangeType changeType; - - public PropertyChange(String propertyName, Object oldValue, Object newValue, PropertyChangeType changeType) { - this.propertyName = propertyName; - this.oldValue = oldValue; - this.newValue = newValue; - this.changeType = changeType; - } - - public String getPropertyName() { - return propertyName; - } - - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public Object getOldValue() { - return oldValue; - } - - public void setOldValue(Object oldValue) { - this.oldValue = oldValue; - } - - public Object getNewValue() { - return newValue; - } - - public void setNewValue(Object newValue) { - this.newValue = newValue; - } - - public PropertyChangeType getChangeType() { - return changeType; - } - - public void setChangeType(PropertyChangeType changeType) { - this.changeType = changeType; - } + private String propertyName; + private Object oldValue; + private Object newValue; + private PropertyChangeType changeType; + + public PropertyChange(String propertyName, Object oldValue, Object newValue, + PropertyChangeType changeType) { + this.propertyName = propertyName; + this.oldValue = oldValue; + this.newValue = newValue; + this.changeType = changeType; + } + + public String getPropertyName() { + return propertyName; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public Object getOldValue() { + return oldValue; + } + + public void setOldValue(Object oldValue) { + this.oldValue = oldValue; + } + + public Object getNewValue() { + return newValue; + } + + public void setNewValue(Object newValue) { + this.newValue = newValue; + } + + public PropertyChangeType getChangeType() { + return changeType; + } + + public void setChangeType(PropertyChangeType changeType) { + this.changeType = changeType; + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertySourceReloadResult.java b/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertySourceReloadResult.java index ad594dda4..316158b92 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertySourceReloadResult.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/model/PropertySourceReloadResult.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.client.model; import com.google.common.collect.Lists; + import org.springframework.core.env.CompositePropertySource; import java.util.List; @@ -9,36 +10,37 @@ import java.util.List; * @author Jason Song(song_s@ctrip.com) */ public class PropertySourceReloadResult { - private CompositePropertySource propertySource; - private List changes; - - public PropertySourceReloadResult(CompositePropertySource propertySource) { - this.propertySource = propertySource; - changes = Lists.newArrayList(); - } - - public PropertySourceReloadResult(CompositePropertySource propertySource, List changes) { - this.propertySource = propertySource; - this.changes = changes; - } - - public CompositePropertySource getPropertySource() { - return propertySource; - } - - public void setPropertySource(CompositePropertySource propertySource) { - this.propertySource = propertySource; - } - - public List getChanges() { - return changes; - } - - public void setChanges(List changes) { - this.changes = changes; - } - - public boolean hasChanges() { - return !changes.isEmpty(); - } + private CompositePropertySource propertySource; + private List changes; + + public PropertySourceReloadResult(CompositePropertySource propertySource) { + this.propertySource = propertySource; + changes = Lists.newArrayList(); + } + + public PropertySourceReloadResult(CompositePropertySource propertySource, + List changes) { + this.propertySource = propertySource; + this.changes = changes; + } + + public CompositePropertySource getPropertySource() { + return propertySource; + } + + public void setPropertySource(CompositePropertySource propertySource) { + this.propertySource = propertySource; + } + + public List getChanges() { + return changes; + } + + public void setChanges(List changes) { + this.changes = changes; + } + + public boolean hasChanges() { + return !changes.isEmpty(); + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/util/ClassLoaderUtil.java b/apollo-client/src/main/java/com/ctrip/apollo/client/util/ClassLoaderUtil.java index 062d98b0e..4767e0a77 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/util/ClassLoaderUtil.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/util/ClassLoaderUtil.java @@ -7,18 +7,18 @@ import org.slf4j.LoggerFactory; * @author Jason Song(song_s@ctrip.com) */ public class ClassLoaderUtil { - private static final Logger logger = LoggerFactory.getLogger(ClassLoaderUtil.class); + private static final Logger logger = LoggerFactory.getLogger(ClassLoaderUtil.class); - private static ClassLoader loader = Thread.currentThread().getContextClassLoader(); + private static ClassLoader loader = Thread.currentThread().getContextClassLoader(); - static { - if (loader == null) { - logger.info("Using system class loader"); - loader = ClassLoader.getSystemClassLoader(); - } + static { + if (loader == null) { + logger.info("Using system class loader"); + loader = ClassLoader.getSystemClassLoader(); } + } - public static ClassLoader getLoader() { - return loader; - } + public static ClassLoader getLoader() { + return loader; + } } diff --git a/apollo-client/src/main/java/com/ctrip/apollo/client/util/ConfigUtil.java b/apollo-client/src/main/java/com/ctrip/apollo/client/util/ConfigUtil.java index 059a602e9..38d00a7f6 100644 --- a/apollo-client/src/main/java/com/ctrip/apollo/client/util/ConfigUtil.java +++ b/apollo-client/src/main/java/com/ctrip/apollo/client/util/ConfigUtil.java @@ -1,10 +1,12 @@ package com.ctrip.apollo.client.util; -import com.ctrip.apollo.client.constants.Constants; -import com.ctrip.apollo.client.model.ApolloRegistry; import com.google.common.base.Function; import com.google.common.base.Predicates; import com.google.common.collect.FluentIterable; + +import com.ctrip.apollo.client.constants.Constants; +import com.ctrip.apollo.client.model.ApolloRegistry; + import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; import org.springframework.core.io.support.EncodedResource; @@ -21,68 +23,69 @@ import java.util.concurrent.TimeUnit; * @author Jason Song(song_s@ctrip.com) */ public class ConfigUtil { - public static final String APOLLO_PROPERTY = "apollo.properties"; - //TODO read from config? - private static final int refreshInterval = 5; - private static final TimeUnit refreshIntervalTimeUnit = TimeUnit.MINUTES; + public static final String APOLLO_PROPERTY = "apollo.properties"; + //TODO read from config? + private static final int refreshInterval = 5; + private static final TimeUnit refreshIntervalTimeUnit = TimeUnit.MINUTES; - private static ConfigUtil configUtil = new ConfigUtil(); - private ApplicationContext applicationContext; - - private ConfigUtil() { - } + private static ConfigUtil configUtil = new ConfigUtil(); + private ApplicationContext applicationContext; - public static ConfigUtil getInstance() { - return configUtil; - } + private ConfigUtil() { + } - public String getCluster() { - // TODO return the actual cluster - return "default"; - } + public static ConfigUtil getInstance() { + return configUtil; + } - public void setApplicationContext(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } + public String getCluster() { + // TODO return the actual cluster + return "default"; + } - public int getRefreshInterval() { - return refreshInterval; - } + public void setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } - public TimeUnit getRefreshTimeUnit() { - return refreshIntervalTimeUnit; - } + public int getRefreshInterval() { + return refreshInterval; + } - public List loadApolloRegistries() throws IOException { - List resourceUrls = - Collections.list(ClassLoaderUtil.getLoader().getResources(APOLLO_PROPERTY)); - List registries = - FluentIterable.from(resourceUrls).transform(new Function() { - @Override - public ApolloRegistry apply(URL input) { - Properties properties = loadPropertiesFromResourceURL(input); - if (properties == null || !properties.containsKey(Constants.APP_ID)) { - return null; - } - ApolloRegistry registry = new ApolloRegistry(); - registry.setAppId(Long.parseLong(properties.getProperty(Constants.APP_ID))); - registry.setVersion(properties.getProperty(Constants.VERSION, Constants.DEFAULT_VERSION_NAME)); - return registry; - } - }).filter(Predicates.notNull()).toList(); - return registries; - } + public TimeUnit getRefreshTimeUnit() { + return refreshIntervalTimeUnit; + } + + public List loadApolloRegistries() throws IOException { + List resourceUrls = + Collections.list(ClassLoaderUtil.getLoader().getResources(APOLLO_PROPERTY)); + List registries = + FluentIterable.from(resourceUrls).transform(new Function() { + @Override + public ApolloRegistry apply(URL input) { + Properties properties = loadPropertiesFromResourceURL(input); + if (properties == null || !properties.containsKey(Constants.APP_ID)) { + return null; + } + ApolloRegistry registry = new ApolloRegistry(); + registry.setAppId(Long.parseLong(properties.getProperty(Constants.APP_ID))); + registry.setVersion( + properties.getProperty(Constants.VERSION, Constants.DEFAULT_VERSION_NAME)); + return registry; + } + }).filter(Predicates.notNull()).toList(); + return registries; + } - Properties loadPropertiesFromResourceURL(URL resourceUrl) { - Resource resource = applicationContext.getResource(resourceUrl.toExternalForm()); - if (resource == null || !resource.exists()) { - return null; - } - try { - return PropertiesLoaderUtils.loadProperties(new EncodedResource(resource, "UTF-8")); - } catch (IOException e) { - e.printStackTrace(); - } - return null; + Properties loadPropertiesFromResourceURL(URL resourceUrl) { + Resource resource = applicationContext.getResource(resourceUrl.toExternalForm()); + if (resource == null || !resource.exists()) { + return null; + } + try { + return PropertiesLoaderUtils.loadProperties(new EncodedResource(resource, "UTF-8")); + } catch (IOException ex) { + ex.printStackTrace(); } + return null; + } } diff --git a/apollo-client/src/test/java/com/ctrip/apollo/client/AllTests.java b/apollo-client/src/test/java/com/ctrip/apollo/client/AllTests.java index ff1024338..796611568 100644 --- a/apollo-client/src/test/java/com/ctrip/apollo/client/AllTests.java +++ b/apollo-client/src/test/java/com/ctrip/apollo/client/AllTests.java @@ -3,14 +3,15 @@ package com.ctrip.apollo.client; import com.ctrip.apollo.client.loader.ConfigLoaderManagerTest; import com.ctrip.apollo.client.loader.impl.RemoteConfigLoaderTest; import com.ctrip.apollo.client.util.ConfigUtilTest; + import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ -ApolloConfigManagerTest.class, ConfigLoaderManagerTest.class, RemoteConfigLoaderTest.class, -ConfigUtilTest.class + ApolloConfigManagerTest.class, ConfigLoaderManagerTest.class, RemoteConfigLoaderTest.class, + ConfigUtilTest.class }) public class AllTests { diff --git a/apollo-client/src/test/java/com/ctrip/apollo/client/ApolloConfigManagerTest.java b/apollo-client/src/test/java/com/ctrip/apollo/client/ApolloConfigManagerTest.java index e2ede58d3..b05898f1e 100644 --- a/apollo-client/src/test/java/com/ctrip/apollo/client/ApolloConfigManagerTest.java +++ b/apollo-client/src/test/java/com/ctrip/apollo/client/ApolloConfigManagerTest.java @@ -3,6 +3,7 @@ package com.ctrip.apollo.client; import com.ctrip.apollo.client.loader.ConfigLoaderManager; import com.ctrip.apollo.client.model.PropertyChange; import com.ctrip.apollo.client.model.PropertySourceReloadResult; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -25,110 +26,126 @@ import java.util.List; import java.util.concurrent.atomic.AtomicReference; import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * @author Jason Song(song_s@ctrip.com) */ @RunWith(MockitoJUnitRunner.class) public class ApolloConfigManagerTest { - private ApolloConfigManager apolloConfigManager; - @Mock - private ConfigLoaderManager configLoaderManager; - @Mock - private ConfigurableApplicationContext applicationContext; - @Mock - private ConfigurableEnvironment env; - @Mock - private MutablePropertySources mutablePropertySources; - @Mock - private BeanDefinitionRegistry beanDefinitionRegistry; - @Mock - private RefreshScope scope; - - @Before - public void setUp() { - apolloConfigManager = spy(new ApolloConfigManager()); - - when(applicationContext.getEnvironment()).thenReturn(env); - when(env.getPropertySources()).thenReturn(mutablePropertySources); - - apolloConfigManager.setApplicationContext(applicationContext); - ReflectionTestUtils.setField(apolloConfigManager, "configLoaderManager", configLoaderManager); - ReflectionTestUtils.setField(apolloConfigManager, "scope", scope); - } - - @After - public void tearDown() throws Exception { - AtomicReference singletonProtector = - (AtomicReference)ReflectionTestUtils.getField(ApolloConfigManager.class, "singletonProtector"); - singletonProtector.set(null); - } - - @Test(expected = RuntimeException.class) - public void testInvalidApplicationContext() { - ApplicationContext someInvalidApplication = mock(ApplicationContext.class); - apolloConfigManager.setApplicationContext(someInvalidApplication); - } - - @Test - public void testInitializePropertySourceSuccessfully() { - CompositePropertySource somePropertySource = mock(CompositePropertySource.class); - final ArgumentCaptor captor = ArgumentCaptor.forClass(CompositePropertySource.class); - - when(configLoaderManager.loadPropertySource()).thenReturn(somePropertySource); - - apolloConfigManager.initializePropertySource(); - - verify(configLoaderManager, times(1)).loadPropertySource(); - verify(mutablePropertySources, times(1)).addFirst(captor.capture()); - - final CompositePropertySource insertedPropertySource = captor.getValue(); - - assertEquals(insertedPropertySource, somePropertySource); - } - - @Test - public void testPostProcessBeanDefinitionRegistry() { - doNothing().when(apolloConfigManager).initializePropertySource(); - - apolloConfigManager.postProcessBeanDefinitionRegistry(beanDefinitionRegistry); - - verify(beanDefinitionRegistry, times(2)).registerBeanDefinition(anyString(), any(BeanDefinition.class)); - } - - @Test - public void testUpdatePropertySourceWithChanges() throws Exception { - PropertySourceReloadResult somePropertySourceReloadResult = mock(PropertySourceReloadResult.class); - CompositePropertySource somePropertySource = mock(CompositePropertySource.class); - List someChanges = mock(List.class); - - when(somePropertySourceReloadResult.hasChanges()).thenReturn(true); - when(somePropertySourceReloadResult.getPropertySource()).thenReturn(somePropertySource); - when(somePropertySourceReloadResult.getChanges()).thenReturn(someChanges); - when(configLoaderManager.reloadPropertySource()).thenReturn(somePropertySourceReloadResult); - - List result = apolloConfigManager.updatePropertySource(); - - assertEquals(someChanges, result); - verify(scope, times(1)).refreshAll(); - } - - @Test - public void testUpdatePropertySourceWithNoChange() throws Exception { - PropertySourceReloadResult somePropertySourceReloadResult = mock(PropertySourceReloadResult.class); - CompositePropertySource somePropertySource = mock(CompositePropertySource.class); - List emptyChanges = Collections.emptyList(); - - when(somePropertySourceReloadResult.hasChanges()).thenReturn(false); - when(somePropertySourceReloadResult.getPropertySource()).thenReturn(somePropertySource); - when(somePropertySourceReloadResult.getChanges()).thenReturn(emptyChanges); - when(configLoaderManager.reloadPropertySource()).thenReturn(somePropertySourceReloadResult); - - List result = apolloConfigManager.updatePropertySource(); - - assertEquals(emptyChanges, result); - verify(scope, never()).refreshAll(); - - } + private ApolloConfigManager apolloConfigManager; + @Mock + private ConfigLoaderManager configLoaderManager; + @Mock + private ConfigurableApplicationContext applicationContext; + @Mock + private ConfigurableEnvironment env; + @Mock + private MutablePropertySources mutablePropertySources; + @Mock + private BeanDefinitionRegistry beanDefinitionRegistry; + @Mock + private RefreshScope scope; + + @Before + public void setUp() { + apolloConfigManager = spy(new ApolloConfigManager()); + + when(applicationContext.getEnvironment()).thenReturn(env); + when(env.getPropertySources()).thenReturn(mutablePropertySources); + + apolloConfigManager.setApplicationContext(applicationContext); + ReflectionTestUtils.setField(apolloConfigManager, "configLoaderManager", configLoaderManager); + ReflectionTestUtils.setField(apolloConfigManager, "scope", scope); + } + + @After + public void tearDown() throws Exception { + AtomicReference singletonProtector = + (AtomicReference) ReflectionTestUtils + .getField(ApolloConfigManager.class, "singletonProtector"); + singletonProtector.set(null); + } + + @Test(expected = RuntimeException.class) + public void testInvalidApplicationContext() { + ApplicationContext someInvalidApplication = mock(ApplicationContext.class); + apolloConfigManager.setApplicationContext(someInvalidApplication); + } + + @Test + public void testInitializePropertySourceSuccessfully() { + CompositePropertySource somePropertySource = mock(CompositePropertySource.class); + final ArgumentCaptor + captor = + ArgumentCaptor.forClass(CompositePropertySource.class); + + when(configLoaderManager.loadPropertySource()).thenReturn(somePropertySource); + + apolloConfigManager.initializePropertySource(); + + verify(configLoaderManager, times(1)).loadPropertySource(); + verify(mutablePropertySources, times(1)).addFirst(captor.capture()); + + final CompositePropertySource insertedPropertySource = captor.getValue(); + + assertEquals(insertedPropertySource, somePropertySource); + } + + @Test + public void testPostProcessBeanDefinitionRegistry() { + doNothing().when(apolloConfigManager).initializePropertySource(); + + apolloConfigManager.postProcessBeanDefinitionRegistry(beanDefinitionRegistry); + + verify(beanDefinitionRegistry, times(2)) + .registerBeanDefinition(anyString(), any(BeanDefinition.class)); + } + + @Test + public void testUpdatePropertySourceWithChanges() throws Exception { + PropertySourceReloadResult + somePropertySourceReloadResult = + mock(PropertySourceReloadResult.class); + CompositePropertySource somePropertySource = mock(CompositePropertySource.class); + List someChanges = mock(List.class); + + when(somePropertySourceReloadResult.hasChanges()).thenReturn(true); + when(somePropertySourceReloadResult.getPropertySource()).thenReturn(somePropertySource); + when(somePropertySourceReloadResult.getChanges()).thenReturn(someChanges); + when(configLoaderManager.reloadPropertySource()).thenReturn(somePropertySourceReloadResult); + + List result = apolloConfigManager.updatePropertySource(); + + assertEquals(someChanges, result); + verify(scope, times(1)).refreshAll(); + } + + @Test + public void testUpdatePropertySourceWithNoChange() throws Exception { + PropertySourceReloadResult + somePropertySourceReloadResult = + mock(PropertySourceReloadResult.class); + CompositePropertySource somePropertySource = mock(CompositePropertySource.class); + List emptyChanges = Collections.emptyList(); + + when(somePropertySourceReloadResult.hasChanges()).thenReturn(false); + when(somePropertySourceReloadResult.getPropertySource()).thenReturn(somePropertySource); + when(somePropertySourceReloadResult.getChanges()).thenReturn(emptyChanges); + when(configLoaderManager.reloadPropertySource()).thenReturn(somePropertySourceReloadResult); + + List result = apolloConfigManager.updatePropertySource(); + + assertEquals(emptyChanges, result); + verify(scope, never()).refreshAll(); + + } } diff --git a/apollo-client/src/test/java/com/ctrip/apollo/client/loader/ConfigLoaderManagerTest.java b/apollo-client/src/test/java/com/ctrip/apollo/client/loader/ConfigLoaderManagerTest.java index 3fbeb9622..0c18584c6 100644 --- a/apollo-client/src/test/java/com/ctrip/apollo/client/loader/ConfigLoaderManagerTest.java +++ b/apollo-client/src/test/java/com/ctrip/apollo/client/loader/ConfigLoaderManagerTest.java @@ -1,23 +1,23 @@ package com.ctrip.apollo.client.loader; +import com.google.common.base.Function; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + import com.ctrip.apollo.client.enums.PropertyChangeType; import com.ctrip.apollo.client.model.ApolloRegistry; import com.ctrip.apollo.client.model.PropertyChange; import com.ctrip.apollo.client.model.PropertySourceReloadResult; import com.ctrip.apollo.client.util.ConfigUtil; import com.ctrip.apollo.core.dto.ApolloConfig; -import com.google.common.base.Function; -import com.google.common.collect.FluentIterable; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.ObjectArrays; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.core.env.CompositePropertySource; -import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.PropertySource; import org.springframework.test.util.ReflectionTestUtils; @@ -26,173 +26,192 @@ import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.anyList; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; /** * @author Jason Song(song_s@ctrip.com) */ @RunWith(MockitoJUnitRunner.class) public class ConfigLoaderManagerTest { - private ConfigLoaderManager configLoaderManager; - @Mock - private ConfigLoader configLoader; - @Mock - private ConfigUtil configUtil; - - @Before - public void setUp() { - configLoaderManager = spy(new ConfigLoaderManager(configLoader, configUtil)); - } - - @Test - public void testLoadPropertySource() throws Exception { - long someAppId = 100; - long anotherAppId = 101; - ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); - ApolloRegistry anotherApolloRegistry = assembleSomeApolloRegistry(anotherAppId, "anotherVersion"); - ApolloConfig someApolloConfig = mock(ApolloConfig.class); - ApolloConfig anotherApolloConfig = mock(ApolloConfig.class); - Map someMap = mock(Map.class); - Map anotherMap = mock(Map.class); - - when(someApolloConfig.getAppId()).thenReturn(someAppId); - when(someApolloConfig.getAppId()).thenReturn(anotherAppId); - when(configUtil.loadApolloRegistries()).thenReturn(Lists.newArrayList(someApolloRegistry, anotherApolloRegistry)); - doReturn(someApolloConfig).when(configLoaderManager).loadSingleApolloConfig(someApolloRegistry); - doReturn(anotherApolloConfig).when(configLoaderManager).loadSingleApolloConfig(anotherApolloRegistry); - when(someApolloConfig.getConfigurations()).thenReturn(someMap); - when(anotherApolloConfig.getConfigurations()).thenReturn(anotherMap); - - CompositePropertySource result = configLoaderManager.loadPropertySource(); - - assertEquals(2, result.getPropertySources().size()); - - List> resultMaps = FluentIterable.from(result.getPropertySources()).transform(new Function, Map>() { - @Override - public Map apply(PropertySource input) { - return (Map)input.getSource(); - } - }).toList(); - - assertTrue(resultMaps.containsAll(Lists.newArrayList(someMap, anotherMap))); - } - - @Test(expected = RuntimeException.class) - public void testLoadPropertySourceWithError() throws Exception { - Exception someException = mock(Exception.class); - long someAppId = 100; - ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); - when(configUtil.loadApolloRegistries()).thenReturn(Lists.newArrayList(someApolloRegistry)); - - doThrow(someException).when(configLoaderManager).loadSingleApolloConfig(someApolloRegistry); - - configLoaderManager.loadPropertySource(); - } - - @Test - public void testLoadApolloConfigsWithNoApolloRegistry() throws Exception { - when(configUtil.loadApolloRegistries()).thenReturn(null); - - CompositePropertySource result = configLoaderManager.loadPropertySource(); - - assertTrue(result.getPropertySources().isEmpty()); - } - - @Test - public void testLoadSingleApolloConfig() throws Exception { - ApolloConfig someApolloConfig = mock(ApolloConfig.class); - Map someMap = Maps.newHashMap(); - long someAppId = 100; - ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); - ApolloConfig previousConfig = null; - - doReturn(null).when(configLoaderManager).getPreviousApolloConfig(someApolloRegistry); - when(someApolloConfig.getConfigurations()).thenReturn(someMap); - when(configLoader.loadApolloConfig(someApolloRegistry, previousConfig)).thenReturn(someApolloConfig); - - ApolloConfig result = configLoaderManager.loadSingleApolloConfig(someApolloRegistry); - - assertEquals(someMap, result.getConfigurations()); - } - - @Test - public void testReloadPropertySource() throws Exception { - long someAppId = 100; - ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); - ApolloConfig someApolloConfig = mock(ApolloConfig.class); - Map someMap = mock(Map.class); - List someChanges = mock(List.class); - ReflectionTestUtils.setField(configLoaderManager, "apolloRegistries", Lists.newArrayList(someApolloRegistry)); - - doReturn(someApolloConfig).when(configLoaderManager).loadSingleApolloConfig(someApolloRegistry); - when(someApolloConfig.getAppId()).thenReturn(someAppId); - when(someApolloConfig.getConfigurations()).thenReturn(someMap); - doReturn(someChanges).when(configLoaderManager).calcPropertyChanges(anyList(), anyList()); - - PropertySourceReloadResult result = configLoaderManager.reloadPropertySource(); - - assertEquals(1, result.getPropertySource().getPropertySources().size()); - assertEquals(someChanges, result.getChanges()); - List> resultMaps = FluentIterable.from(result.getPropertySource().getPropertySources()).transform(new Function, Map>() { - @Override - public Map apply(PropertySource input) { - return (Map)input.getSource(); - } - }).toList(); - - assertTrue(resultMaps.containsAll(Lists.newArrayList(someMap))); - } - - @Test - public void testCalcPropertyChanges() throws Exception { - long someAppId = 1; - Map someConfig = Maps.newHashMap(); - someConfig.put("key1", "val1"); - someConfig.put("key2", "val2"); - - Map anotherConfig = Maps.newHashMap(); - anotherConfig.put("key1", "val11"); - anotherConfig.put("key3", "val3"); - - List previous = Lists.newArrayList(assembleApolloConfig(someAppId, someConfig)); - List current = Lists.newArrayList(assembleApolloConfig(someAppId, anotherConfig)); - - List changes = configLoaderManager.calcPropertyChanges(previous, current); - - assertEquals(3, changes.size()); - - List changeResult = FluentIterable.from(changes).transform(new Function() { - @Override - public String apply(PropertyChange input) { - return String.format("%s-%s", input.getPropertyName(), input.getChangeType()); - } + private ConfigLoaderManager configLoaderManager; + @Mock + private ConfigLoader configLoader; + @Mock + private ConfigUtil configUtil; + + @Before + public void setUp() { + configLoaderManager = spy(new ConfigLoaderManager(configLoader, configUtil)); + } + + @Test + public void testLoadPropertySource() throws Exception { + long someAppId = 100; + long anotherAppId = 101; + ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); + ApolloRegistry + anotherApolloRegistry = + assembleSomeApolloRegistry(anotherAppId, "anotherVersion"); + ApolloConfig someApolloConfig = mock(ApolloConfig.class); + ApolloConfig anotherApolloConfig = mock(ApolloConfig.class); + Map someMap = mock(Map.class); + Map anotherMap = mock(Map.class); + + when(someApolloConfig.getAppId()).thenReturn(someAppId); + when(someApolloConfig.getAppId()).thenReturn(anotherAppId); + when(configUtil.loadApolloRegistries()) + .thenReturn(Lists.newArrayList(someApolloRegistry, anotherApolloRegistry)); + doReturn(someApolloConfig).when(configLoaderManager).loadSingleApolloConfig(someApolloRegistry); + doReturn(anotherApolloConfig).when(configLoaderManager) + .loadSingleApolloConfig(anotherApolloRegistry); + when(someApolloConfig.getConfigurations()).thenReturn(someMap); + when(anotherApolloConfig.getConfigurations()).thenReturn(anotherMap); + + CompositePropertySource result = configLoaderManager.loadPropertySource(); + + assertEquals(2, result.getPropertySources().size()); + + List> + resultMaps = + FluentIterable.from(result.getPropertySources()) + .transform(new Function, Map>() { + @Override + public Map apply(PropertySource input) { + return (Map) input.getSource(); + } + }).toList(); + + assertTrue(resultMaps.containsAll(Lists.newArrayList(someMap, anotherMap))); + } + + @Test(expected = RuntimeException.class) + public void testLoadPropertySourceWithError() throws Exception { + Exception someException = mock(Exception.class); + long someAppId = 100; + ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); + when(configUtil.loadApolloRegistries()).thenReturn(Lists.newArrayList(someApolloRegistry)); + + doThrow(someException).when(configLoaderManager).loadSingleApolloConfig(someApolloRegistry); + + configLoaderManager.loadPropertySource(); + } + + @Test + public void testLoadApolloConfigsWithNoApolloRegistry() throws Exception { + when(configUtil.loadApolloRegistries()).thenReturn(null); + + CompositePropertySource result = configLoaderManager.loadPropertySource(); + + assertTrue(result.getPropertySources().isEmpty()); + } + + @Test + public void testLoadSingleApolloConfig() throws Exception { + ApolloConfig someApolloConfig = mock(ApolloConfig.class); + Map someMap = Maps.newHashMap(); + long someAppId = 100; + ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); + ApolloConfig previousConfig = null; + + doReturn(null).when(configLoaderManager).getPreviousApolloConfig(someApolloRegistry); + when(someApolloConfig.getConfigurations()).thenReturn(someMap); + when(configLoader.loadApolloConfig(someApolloRegistry, previousConfig)) + .thenReturn(someApolloConfig); + + ApolloConfig result = configLoaderManager.loadSingleApolloConfig(someApolloRegistry); + + assertEquals(someMap, result.getConfigurations()); + } + + @Test + public void testReloadPropertySource() throws Exception { + long someAppId = 100; + ApolloRegistry someApolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); + ApolloConfig someApolloConfig = mock(ApolloConfig.class); + Map someMap = mock(Map.class); + List someChanges = mock(List.class); + ReflectionTestUtils + .setField(configLoaderManager, "apolloRegistries", Lists.newArrayList(someApolloRegistry)); + + doReturn(someApolloConfig).when(configLoaderManager).loadSingleApolloConfig(someApolloRegistry); + when(someApolloConfig.getAppId()).thenReturn(someAppId); + when(someApolloConfig.getConfigurations()).thenReturn(someMap); + doReturn(someChanges).when(configLoaderManager).calcPropertyChanges(anyList(), anyList()); + + PropertySourceReloadResult result = configLoaderManager.reloadPropertySource(); + + assertEquals(1, result.getPropertySource().getPropertySources().size()); + assertEquals(someChanges, result.getChanges()); + List> + resultMaps = + FluentIterable.from(result.getPropertySource().getPropertySources()) + .transform(new Function, Map>() { + @Override + public Map apply(PropertySource input) { + return (Map) input.getSource(); + } + }).toList(); + + assertTrue(resultMaps.containsAll(Lists.newArrayList(someMap))); + } + + @Test + public void testCalcPropertyChanges() throws Exception { + long someAppId = 1; + Map someConfig = Maps.newHashMap(); + someConfig.put("key1", "val1"); + someConfig.put("key2", "val2"); + + Map anotherConfig = Maps.newHashMap(); + anotherConfig.put("key1", "val11"); + anotherConfig.put("key3", "val3"); + + List previous = Lists.newArrayList(assembleApolloConfig(someAppId, someConfig)); + List current = Lists.newArrayList(assembleApolloConfig(someAppId, anotherConfig)); + + List changes = configLoaderManager.calcPropertyChanges(previous, current); + + assertEquals(3, changes.size()); + + List + changeResult = + FluentIterable.from(changes).transform(new Function() { + @Override + public String apply(PropertyChange input) { + return String.format("%s-%s", input.getPropertyName(), input.getChangeType()); + } }).toList(); - assertTrue(changeResult.containsAll( - Lists.newArrayList( - "key1-" + PropertyChangeType.MODIFIED, - "key2-" + PropertyChangeType.DELETED, - "key3-" + PropertyChangeType.NEW - ))); - } + assertTrue(changeResult.containsAll( + Lists.newArrayList( + "key1-" + PropertyChangeType.MODIFIED, + "key2-" + PropertyChangeType.DELETED, + "key3-" + PropertyChangeType.NEW + ))); + } - ApolloConfig assembleApolloConfig(long appId, Map configurations) { - String someCluster = "someCluster"; - String someVersion = "someVersion"; - long someReleaseId = 1; + ApolloConfig assembleApolloConfig(long appId, Map configurations) { + String someCluster = "someCluster"; + String someVersion = "someVersion"; + long someReleaseId = 1; - ApolloConfig config = new ApolloConfig(appId, someCluster, someVersion, someReleaseId); + ApolloConfig config = new ApolloConfig(appId, someCluster, someVersion, someReleaseId); - config.setConfigurations(configurations); + config.setConfigurations(configurations); - return config; - } + return config; + } - private ApolloRegistry assembleSomeApolloRegistry(long someAppId, String someVersion) { - ApolloRegistry someApolloRegistry = new ApolloRegistry(); - someApolloRegistry.setAppId(someAppId); - someApolloRegistry.setVersion(someVersion); + private ApolloRegistry assembleSomeApolloRegistry(long someAppId, String someVersion) { + ApolloRegistry someApolloRegistry = new ApolloRegistry(); + someApolloRegistry.setAppId(someAppId); + someApolloRegistry.setVersion(someVersion); - return someApolloRegistry; - } + return someApolloRegistry; + } } diff --git a/apollo-client/src/test/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoaderTest.java b/apollo-client/src/test/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoaderTest.java index 74de35773..51c609af3 100644 --- a/apollo-client/src/test/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoaderTest.java +++ b/apollo-client/src/test/java/com/ctrip/apollo/client/loader/impl/RemoteConfigLoaderTest.java @@ -1,18 +1,10 @@ package com.ctrip.apollo.client.loader.impl; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyMap; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -import java.util.ArrayList; -import java.util.List; +import com.ctrip.apollo.client.loader.ConfigServiceLocator; +import com.ctrip.apollo.client.model.ApolloRegistry; +import com.ctrip.apollo.client.util.ConfigUtil; +import com.ctrip.apollo.core.dto.ApolloConfig; +import com.ctrip.apollo.core.serivce.ApolloService; import org.junit.Before; import org.junit.Test; @@ -25,116 +17,132 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; -import com.ctrip.apollo.client.loader.ConfigServiceLocator; -import com.ctrip.apollo.client.model.ApolloRegistry; -import com.ctrip.apollo.client.util.ConfigUtil; -import com.ctrip.apollo.core.dto.ApolloConfig; -import com.ctrip.apollo.core.serivce.ApolloService; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyMap; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; /** * @author Jason Song(song_s@ctrip.com) */ @RunWith(MockitoJUnitRunner.class) public class RemoteConfigLoaderTest { - private RemoteConfigLoader remoteConfigLoader; - @Mock - private RestTemplate restTemplate; - private ConfigUtil configUtil; - @Mock - private ConfigServiceLocator serviceLocater; - @Mock - private ResponseEntity someResponse; - - @Before - public void setUp() { - configUtil = spy(ConfigUtil.getInstance()); - remoteConfigLoader = spy(new RemoteConfigLoader(restTemplate, configUtil, serviceLocater)); - } - - @Test - public void testLoadApolloConfig() throws Exception { - String someServerUrl = "http://someUrl"; - String someCluster = "some cluster"; - ApolloConfig apolloConfig = mock(ApolloConfig.class); - long someAppId = 1; - ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); - ApolloConfig previousConfig = null; - - - ApolloService someService = new ApolloService(); - someService.setHomepageUrl(someServerUrl); - List someServices = new ArrayList<>(); - someServices.add(someService); - when(serviceLocater.getConfigServices()).thenReturn(someServices); - when(configUtil.getCluster()).thenReturn(someCluster); - doReturn(apolloConfig).when(remoteConfigLoader) - .getRemoteConfig(restTemplate, someServerUrl, someCluster, apolloRegistry, previousConfig); - - ApolloConfig result = remoteConfigLoader.loadApolloConfig(apolloRegistry, previousConfig); - - assertEquals(apolloConfig, result); - } - - @Test - public void testGetRemoteConfig() throws Exception { - long someAppId = 1; - String someServerUrl = "http://someServer"; - String someClusterName = "someCluster"; - String someVersionName = "someVersion"; - ApolloConfig someApolloConfig = mock(ApolloConfig.class); - ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, someVersionName); - ApolloConfig previousConfig = null; - - when(someResponse.getStatusCode()).thenReturn(HttpStatus.OK); - when(someResponse.getBody()).thenReturn(someApolloConfig); - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), - eq(ApolloConfig.class), anyMap())).thenReturn(someResponse); - - ApolloConfig result = remoteConfigLoader.getRemoteConfig(restTemplate, someServerUrl, someClusterName, apolloRegistry, previousConfig); - - assertEquals(someApolloConfig, result); - } - - @Test(expected = RuntimeException.class) - public void testGetRemoteConfigWithServerError() throws Exception { - long someAppId = 1; - String someServerUrl = "http://someServer"; - String someClusterName = "someCluster"; - String someVersionName = "someVersion"; - ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, someVersionName); - ApolloConfig previousConfig = null; - HttpStatus someErrorCode = HttpStatus.INTERNAL_SERVER_ERROR; - - when(someResponse.getStatusCode()).thenReturn(someErrorCode); - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), - eq(ApolloConfig.class), anyMap())).thenReturn(someResponse); - - remoteConfigLoader.getRemoteConfig(restTemplate, someServerUrl, someClusterName, apolloRegistry, previousConfig); - } - - @Test - public void testGetRemoteConfigWith304Response() throws Exception { - long someAppId = 1; - String someServerUrl = "http://someServer"; - String someClusterName = "someCluster"; - String someVersionName = "someVersion"; - ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, someVersionName); - ApolloConfig previousConfig = null; - - when(someResponse.getStatusCode()).thenReturn(HttpStatus.NOT_MODIFIED); - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), - eq(ApolloConfig.class), anyMap())).thenReturn(someResponse); - - ApolloConfig result = remoteConfigLoader.getRemoteConfig(restTemplate, someServerUrl, someClusterName, apolloRegistry, previousConfig); - - assertNull(result); - } - - private ApolloRegistry assembleSomeApolloRegistry(long someAppId, String someVersion) { - ApolloRegistry someApolloRegistry = new ApolloRegistry(); - someApolloRegistry.setAppId(someAppId); - someApolloRegistry.setVersion(someVersion); - - return someApolloRegistry; - } + private RemoteConfigLoader remoteConfigLoader; + @Mock + private RestTemplate restTemplate; + private ConfigUtil configUtil; + @Mock + private ConfigServiceLocator serviceLocater; + @Mock + private ResponseEntity someResponse; + + @Before + public void setUp() { + configUtil = spy(ConfigUtil.getInstance()); + remoteConfigLoader = spy(new RemoteConfigLoader(restTemplate, configUtil, serviceLocater)); + } + + @Test + public void testLoadApolloConfig() throws Exception { + String someServerUrl = "http://someUrl"; + String someCluster = "some cluster"; + ApolloConfig apolloConfig = mock(ApolloConfig.class); + long someAppId = 1; + ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, "someVersion"); + ApolloConfig previousConfig = null; + + ApolloService someService = new ApolloService(); + someService.setHomepageUrl(someServerUrl); + List someServices = new ArrayList<>(); + someServices.add(someService); + when(serviceLocater.getConfigServices()).thenReturn(someServices); + when(configUtil.getCluster()).thenReturn(someCluster); + doReturn(apolloConfig).when(remoteConfigLoader) + .getRemoteConfig(restTemplate, someServerUrl, someCluster, apolloRegistry, previousConfig); + + ApolloConfig result = remoteConfigLoader.loadApolloConfig(apolloRegistry, previousConfig); + + assertEquals(apolloConfig, result); + } + + @Test + public void testGetRemoteConfig() throws Exception { + long someAppId = 1; + String someServerUrl = "http://someServer"; + String someClusterName = "someCluster"; + String someVersionName = "someVersion"; + ApolloConfig someApolloConfig = mock(ApolloConfig.class); + ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, someVersionName); + ApolloConfig previousConfig = null; + + when(someResponse.getStatusCode()).thenReturn(HttpStatus.OK); + when(someResponse.getBody()).thenReturn(someApolloConfig); + when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), + eq(ApolloConfig.class), anyMap())).thenReturn(someResponse); + + ApolloConfig + result = + remoteConfigLoader + .getRemoteConfig(restTemplate, someServerUrl, someClusterName, apolloRegistry, + previousConfig); + + assertEquals(someApolloConfig, result); + } + + @Test(expected = RuntimeException.class) + public void testGetRemoteConfigWithServerError() throws Exception { + long someAppId = 1; + String someServerUrl = "http://someServer"; + String someClusterName = "someCluster"; + String someVersionName = "someVersion"; + ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, someVersionName); + ApolloConfig previousConfig = null; + HttpStatus someErrorCode = HttpStatus.INTERNAL_SERVER_ERROR; + + when(someResponse.getStatusCode()).thenReturn(someErrorCode); + when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), + eq(ApolloConfig.class), anyMap())).thenReturn(someResponse); + + remoteConfigLoader.getRemoteConfig(restTemplate, someServerUrl, someClusterName, apolloRegistry, + previousConfig); + } + + @Test + public void testGetRemoteConfigWith304Response() throws Exception { + long someAppId = 1; + String someServerUrl = "http://someServer"; + String someClusterName = "someCluster"; + String someVersionName = "someVersion"; + ApolloRegistry apolloRegistry = assembleSomeApolloRegistry(someAppId, someVersionName); + ApolloConfig previousConfig = null; + + when(someResponse.getStatusCode()).thenReturn(HttpStatus.NOT_MODIFIED); + when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), + eq(ApolloConfig.class), anyMap())).thenReturn(someResponse); + + ApolloConfig + result = + remoteConfigLoader + .getRemoteConfig(restTemplate, someServerUrl, someClusterName, apolloRegistry, + previousConfig); + + assertNull(result); + } + + private ApolloRegistry assembleSomeApolloRegistry(long someAppId, String someVersion) { + ApolloRegistry someApolloRegistry = new ApolloRegistry(); + someApolloRegistry.setAppId(someAppId); + someApolloRegistry.setVersion(someVersion); + + return someApolloRegistry; + } } diff --git a/apollo-client/src/test/java/com/ctrip/apollo/client/util/ConfigUtilTest.java b/apollo-client/src/test/java/com/ctrip/apollo/client/util/ConfigUtilTest.java index ed6b11e47..db85f997b 100644 --- a/apollo-client/src/test/java/com/ctrip/apollo/client/util/ConfigUtilTest.java +++ b/apollo-client/src/test/java/com/ctrip/apollo/client/util/ConfigUtilTest.java @@ -1,8 +1,10 @@ package com.ctrip.apollo.client.util; +import com.google.common.collect.Lists; + import com.ctrip.apollo.client.constants.Constants; import com.ctrip.apollo.client.model.ApolloRegistry; -import com.google.common.collect.Lists; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -19,60 +21,65 @@ import java.util.Properties; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; /** * @author Jason Song(song_s@ctrip.com) */ @RunWith(MockitoJUnitRunner.class) public class ConfigUtilTest { - private ConfigUtil configUtil; - @Mock - private ConfigurableApplicationContext applicationContext; + private ConfigUtil configUtil; + @Mock + private ConfigurableApplicationContext applicationContext; - @Before - public void setUp() throws Exception { - configUtil = spy(ConfigUtil.getInstance()); + @Before + public void setUp() throws Exception { + configUtil = spy(ConfigUtil.getInstance()); - configUtil.setApplicationContext(applicationContext); - } + configUtil.setApplicationContext(applicationContext); + } - @Test - public void testLoadApolloRegistriesSuccessfully() throws Exception { - Properties someProperties = mock(Properties.class); - preparePropertiesFromLocalResource(someProperties); + @Test + public void testLoadApolloRegistriesSuccessfully() throws Exception { + Properties someProperties = mock(Properties.class); + preparePropertiesFromLocalResource(someProperties); - String someAppId = "1"; - String someVersionId = "someVersion"; + String someAppId = "1"; + String someVersionId = "someVersion"; - when(someProperties.containsKey(Constants.APP_ID)).thenReturn(true); - when(someProperties.getProperty(Constants.APP_ID)).thenReturn(someAppId); - when(someProperties.getProperty(eq(Constants.VERSION), anyString())).thenReturn(someVersionId); + when(someProperties.containsKey(Constants.APP_ID)).thenReturn(true); + when(someProperties.getProperty(Constants.APP_ID)).thenReturn(someAppId); + when(someProperties.getProperty(eq(Constants.VERSION), anyString())).thenReturn(someVersionId); - List apolloRegistries = configUtil.loadApolloRegistries(); + List apolloRegistries = configUtil.loadApolloRegistries(); - ApolloRegistry apolloRegistry = apolloRegistries.get(0); - assertEquals(1, apolloRegistries.size()); - assertEquals(Long.parseLong(someAppId), apolloRegistry.getAppId()); - assertEquals(someVersionId, apolloRegistry.getVersion()); - } + ApolloRegistry apolloRegistry = apolloRegistries.get(0); + assertEquals(1, apolloRegistries.size()); + assertEquals(Long.parseLong(someAppId), apolloRegistry.getAppId()); + assertEquals(someVersionId, apolloRegistry.getVersion()); + } - @Test - public void testLoadApolloRegistriesError() throws Exception { - preparePropertiesFromLocalResource(null); + @Test + public void testLoadApolloRegistriesError() throws Exception { + preparePropertiesFromLocalResource(null); - List apolloRegistries = configUtil.loadApolloRegistries(); + List apolloRegistries = configUtil.loadApolloRegistries(); - assertTrue(apolloRegistries.isEmpty()); - } + assertTrue(apolloRegistries.isEmpty()); + } - private void preparePropertiesFromLocalResource(Properties someProperties) throws IOException { - ClassLoader someClassLoader = mock(ClassLoader.class); - Thread.currentThread().setContextClassLoader(someClassLoader); - URL someUrl = new URL("http", "somepath/", "someFile"); - Enumeration someResourceUrls = Collections.enumeration(Lists.newArrayList(someUrl)); + private void preparePropertiesFromLocalResource(Properties someProperties) throws IOException { + ClassLoader someClassLoader = mock(ClassLoader.class); + Thread.currentThread().setContextClassLoader(someClassLoader); + URL someUrl = new URL("http", "somepath/", "someFile"); + Enumeration someResourceUrls = Collections.enumeration(Lists.newArrayList(someUrl)); - when(someClassLoader.getResources(anyString())).thenReturn(someResourceUrls); - doReturn(someProperties).when(configUtil).loadPropertiesFromResourceURL(someUrl); - } + when(someClassLoader.getResources(anyString())).thenReturn(someResourceUrls); + doReturn(someProperties).when(configUtil).loadPropertiesFromResourceURL(someUrl); + } } diff --git a/apollo-client/src/test/resources/log4j2.xml b/apollo-client/src/test/resources/log4j2.xml index 11593609f..6a051dea1 100644 --- a/apollo-client/src/test/resources/log4j2.xml +++ b/apollo-client/src/test/resources/log4j2.xml @@ -5,7 +5,7 @@ - + diff --git a/apollo-configservice/pom.xml b/apollo-configservice/pom.xml index e97efc360..c132145fd 100644 --- a/apollo-configservice/pom.xml +++ b/apollo-configservice/pom.xml @@ -1,79 +1,79 @@ - - com.ctrip.apollo - apollo - 0.0.1-SNAPSHOT - ../pom.xml - - 4.0.0 - apollo-configservice - Apollo ConfigService - - - - com.ctrip.apollo - apollo-biz - - - - - - - - org.springframework.cloud - spring-cloud-starter-eureka-server - - - - spring-cloud-starter-archaius - - org.springframework.cloud - - - spring-cloud-starter-ribbon - org.springframework.cloud - - - ribbon-eureka - com.netflix.ribbon - - - aws-java-sdk-core - com.amazonaws - - - aws-java-sdk-ec2 - com.amazonaws - - - aws-java-sdk-autoscaling - com.amazonaws - - - aws-java-sdk-sts - com.amazonaws - - - aws-java-sdk-route53 - com.amazonaws - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - true - - - - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + com.ctrip.apollo + apollo + 0.0.1-SNAPSHOT + ../pom.xml + + 4.0.0 + apollo-configservice + Apollo ConfigService + + + + com.ctrip.apollo + apollo-biz + + + + + + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + + spring-cloud-starter-archaius + + org.springframework.cloud + + + spring-cloud-starter-ribbon + org.springframework.cloud + + + ribbon-eureka + com.netflix.ribbon + + + aws-java-sdk-core + com.amazonaws + + + aws-java-sdk-ec2 + com.amazonaws + + + aws-java-sdk-autoscaling + com.amazonaws + + + aws-java-sdk-sts + com.amazonaws + + + aws-java-sdk-route53 + com.amazonaws + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + true + + + + diff --git a/apollo-configservice/src/main/java/com/ctrip/apollo/ServerApplication.java b/apollo-configservice/src/main/java/com/ctrip/apollo/ServerApplication.java index 1ae6d076e..de3291d94 100644 --- a/apollo-configservice/src/main/java/com/ctrip/apollo/ServerApplication.java +++ b/apollo-configservice/src/main/java/com/ctrip/apollo/ServerApplication.java @@ -6,15 +6,15 @@ import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /** * Spring boot application entry point - * + * * @author Jason Song(song_s@ctrip.com) */ @SpringBootApplication @EnableEurekaServer public class ServerApplication { - + public static void main(String[] args) { new SpringApplicationBuilder(ServerApplication.class).web(true).run(args); } - + } diff --git a/apollo-configservice/src/main/java/com/ctrip/apollo/ServletInitializer.java b/apollo-configservice/src/main/java/com/ctrip/apollo/ServletInitializer.java index b8e823981..ebdb1f795 100644 --- a/apollo-configservice/src/main/java/com/ctrip/apollo/ServletInitializer.java +++ b/apollo-configservice/src/main/java/com/ctrip/apollo/ServletInitializer.java @@ -5,13 +5,14 @@ import org.springframework.boot.context.web.SpringBootServletInitializer; /** * Entry point for traditional web app + * * @author Jason Song(song_s@ctrip.com) */ public class ServletInitializer extends SpringBootServletInitializer { - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(ServerApplication.class); - } + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(ServerApplication.class); + } } diff --git a/apollo-configservice/src/main/java/com/ctrip/apollo/configservice/controller/ConfigController.java b/apollo-configservice/src/main/java/com/ctrip/apollo/configservice/controller/ConfigController.java index c2ba0db53..617ddee20 100644 --- a/apollo-configservice/src/main/java/com/ctrip/apollo/configservice/controller/ConfigController.java +++ b/apollo-configservice/src/main/java/com/ctrip/apollo/configservice/controller/ConfigController.java @@ -3,11 +3,17 @@ package com.ctrip.apollo.configservice.controller; import com.ctrip.apollo.biz.entity.Version; import com.ctrip.apollo.biz.service.ConfigService; import com.ctrip.apollo.core.dto.ApolloConfig; -import org.springframework.web.bind.annotation.*; + +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; /** * @author Jason Song(song_s@ctrip.com) @@ -15,36 +21,38 @@ import java.io.IOException; @RestController @RequestMapping("/config") public class ConfigController { - @Resource(name = "configService") - private ConfigService configService; - - @RequestMapping(value = "/{appId}/{clusterName}/{versionName:.*}", method = RequestMethod.GET) - public ApolloConfig queryConfig(@PathVariable long appId, - @PathVariable String clusterName, - @PathVariable String versionName, - @RequestParam(value = "releaseId", defaultValue = "-1") long clientSideReleaseId, - HttpServletResponse response) throws IOException { - Version version = configService.loadVersionByAppIdAndVersionName(appId, versionName); - if (version == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, - String.format("Could not load version with appId: %d, versionName: %s", appId, versionName)); - return null; - } - if (version.getReleaseId() == clientSideReleaseId) { - //Client side configuration is the same with server side, return 304 - response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - return null; - } - - ApolloConfig apolloConfig = - configService.loadConfigByVersionAndClusterName(version, clusterName); - - if (apolloConfig == null) { - response.sendError(HttpServletResponse.SC_NOT_FOUND, - String.format("Could not load config with releaseId: %d, clusterName: %s", version.getReleaseId(), clusterName)); - return null; - } - - return apolloConfig; + @Resource(name = "configService") + private ConfigService configService; + + @RequestMapping(value = "/{appId}/{clusterName}/{versionName:.*}", method = RequestMethod.GET) + public ApolloConfig queryConfig(@PathVariable long appId, + @PathVariable String clusterName, + @PathVariable String versionName, + @RequestParam(value = "releaseId", defaultValue = "-1") long clientSideReleaseId, + HttpServletResponse response) throws IOException { + Version version = configService.loadVersionByAppIdAndVersionName(appId, versionName); + if (version == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, + String.format("Could not load version with appId: %d, versionName: %s", appId, + versionName)); + return null; } + if (version.getReleaseId() == clientSideReleaseId) { + //Client side configuration is the same with server side, return 304 + response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + return null; + } + + ApolloConfig apolloConfig = + configService.loadConfigByVersionAndClusterName(version, clusterName); + + if (apolloConfig == null) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, + String.format("Could not load config with releaseId: %d, clusterName: %s", + version.getReleaseId(), clusterName)); + return null; + } + + return apolloConfig; + } } diff --git a/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java b/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java index 7a9526eb7..56c8a528a 100644 --- a/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java +++ b/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/controller/ServiceController.java @@ -1,15 +1,15 @@ package com.ctrip.apollo.metaservice.controller; -import java.util.ArrayList; -import java.util.List; +import com.ctrip.apollo.core.serivce.ApolloService; +import com.ctrip.apollo.metaservice.service.DiscoveryService; +import com.netflix.appinfo.InstanceInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.ctrip.apollo.core.serivce.ApolloService; -import com.ctrip.apollo.metaservice.service.DiscoveryService; -import com.netflix.appinfo.InstanceInfo; +import java.util.ArrayList; +import java.util.List; @RestController @RequestMapping("/services") diff --git a/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/service/DiscoveryService.java b/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/service/DiscoveryService.java index cf1501890..64bc425c6 100644 --- a/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/service/DiscoveryService.java +++ b/apollo-configservice/src/main/java/com/ctrip/apollo/metaservice/service/DiscoveryService.java @@ -1,16 +1,16 @@ package com.ctrip.apollo.metaservice.service; -import java.util.ArrayList; -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - import com.ctrip.apollo.core.ServiceNameConsts; import com.netflix.appinfo.InstanceInfo; import com.netflix.discovery.EurekaClient; import com.netflix.discovery.shared.Application; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + @Service public class DiscoveryService { @@ -27,7 +27,7 @@ public class DiscoveryService { return application != null ? application.getInstances() : new ArrayList<>(); } - public List getAdminServiceInstances(){ + public List getAdminServiceInstances() { Application application = eurekaClient.getApplication(ServiceNameConsts.APOLLO_ADMINSERVICE); return application != null ? application.getInstances() : new ArrayList<>(); } diff --git a/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AbstractConfigServiceTest.java b/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AbstractConfigServiceTest.java index 8527923f2..8bd901712 100644 --- a/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AbstractConfigServiceTest.java +++ b/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AbstractConfigServiceTest.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.configservice; import com.ctrip.apollo.ServerApplication; + import org.junit.runner.RunWith; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; diff --git a/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AllTests.java b/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AllTests.java index 302ac553f..ef0d06e8a 100644 --- a/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AllTests.java +++ b/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/AllTests.java @@ -1,14 +1,14 @@ package com.ctrip.apollo.configservice; +import com.ctrip.apollo.configservice.controller.ConfigControllerTest; + import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; -import com.ctrip.apollo.configservice.controller.ConfigControllerTest; - @RunWith(Suite.class) @SuiteClasses({ -ConfigControllerTest.class + ConfigControllerTest.class }) public class AllTests { diff --git a/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/controller/ConfigControllerTest.java b/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/controller/ConfigControllerTest.java index 191dda86a..7674f4178 100644 --- a/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/controller/ConfigControllerTest.java +++ b/apollo-configservice/src/test/java/com/ctrip/apollo/configservice/controller/ConfigControllerTest.java @@ -2,8 +2,8 @@ package com.ctrip.apollo.configservice.controller; import com.ctrip.apollo.biz.entity.Version; import com.ctrip.apollo.biz.service.ConfigService; -import com.ctrip.apollo.configservice.controller.ConfigController; import com.ctrip.apollo.core.dto.ApolloConfig; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -15,98 +15,128 @@ import javax.servlet.http.HttpServletResponse; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * @author Jason Song(song_s@ctrip.com) */ @RunWith(MockitoJUnitRunner.class) public class ConfigControllerTest { - private ConfigController configController; - @Mock - private ConfigService configService; - - @Before - public void setUp() throws Exception { - configController = new ConfigController(); - ReflectionTestUtils.setField(configController, "configService", configService); - } - - @Test - public void testQueryConfig() throws Exception { - ApolloConfig someApolloConfig = mock(ApolloConfig.class); - long someAppId = 1; - String someClusterName = "someClusterName"; - String someVersionName = "someVersion"; - long someClientSideReleaseId = 1; - long someServerSideNewReleaseId = 2; - HttpServletResponse someResponse = mock(HttpServletResponse.class); - Version someVersion = mock(Version.class); - - when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)).thenReturn(someVersion); - when(someVersion.getReleaseId()).thenReturn(someServerSideNewReleaseId); - when(configService.loadConfigByVersionAndClusterName(someVersion, someClusterName)).thenReturn(someApolloConfig); - - ApolloConfig result = configController.queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, someResponse); - - assertEquals(someApolloConfig, result); - verify(configService, times(1)).loadVersionByAppIdAndVersionName(someAppId, someVersionName); - verify(configService, times(1)).loadConfigByVersionAndClusterName(someVersion, someClusterName); - } - - @Test - public void testQueryConfigWithVersionNotFound() throws Exception { - long someAppId = 1; - String someClusterName = "someClusterName"; - String someVersionName = "someVersion"; - long someClientSideReleaseId = 1; - HttpServletResponse someResponse = mock(HttpServletResponse.class); - - when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)).thenReturn(null); - - ApolloConfig result = configController.queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, someResponse); - - assertNull(result); - verify(someResponse, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString()); - } - - @Test - public void testQueryConfigWithApolloConfigNotFound() throws Exception { - long someAppId = 1; - String someClusterName = "someClusterName"; - String someVersionName = "someVersion"; - long someClientSideReleaseId = 1; - long someServerSideNewReleaseId = 2; - HttpServletResponse someResponse = mock(HttpServletResponse.class); - Version someVersion = mock(Version.class); - - when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)).thenReturn(someVersion); - when(someVersion.getReleaseId()).thenReturn(someServerSideNewReleaseId); - when(configService.loadConfigByVersionAndClusterName(someVersion, someClusterName)).thenReturn(null); - - ApolloConfig result = configController.queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, someResponse); - - assertNull(result); - verify(someResponse, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString()); - } - - @Test - public void testQueryConfigWithApolloConfigNotModified() throws Exception { - long someAppId = 1; - String someClusterName = "someClusterName"; - String someVersionName = "someVersion"; - long someClientSideReleaseId = 1; - long someServerSideReleaseId = someClientSideReleaseId; - HttpServletResponse someResponse = mock(HttpServletResponse.class); - Version someVersion = mock(Version.class); - - when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)).thenReturn(someVersion); - when(someVersion.getReleaseId()).thenReturn(someServerSideReleaseId); - - ApolloConfig result = configController.queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, someResponse); - - assertNull(result); - verify(someResponse, times(1)).setStatus(HttpServletResponse.SC_NOT_MODIFIED); - verify(configService, never()).loadConfigByVersionAndClusterName(any(Version.class), anyString()); - } + private ConfigController configController; + @Mock + private ConfigService configService; + + @Before + public void setUp() throws Exception { + configController = new ConfigController(); + ReflectionTestUtils.setField(configController, "configService", configService); + } + + @Test + public void testQueryConfig() throws Exception { + ApolloConfig someApolloConfig = mock(ApolloConfig.class); + long someAppId = 1; + String someClusterName = "someClusterName"; + String someVersionName = "someVersion"; + long someClientSideReleaseId = 1; + long someServerSideNewReleaseId = 2; + HttpServletResponse someResponse = mock(HttpServletResponse.class); + Version someVersion = mock(Version.class); + + when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)) + .thenReturn(someVersion); + when(someVersion.getReleaseId()).thenReturn(someServerSideNewReleaseId); + when(configService.loadConfigByVersionAndClusterName(someVersion, someClusterName)) + .thenReturn(someApolloConfig); + + ApolloConfig + result = + configController + .queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, + someResponse); + + assertEquals(someApolloConfig, result); + verify(configService, times(1)).loadVersionByAppIdAndVersionName(someAppId, someVersionName); + verify(configService, times(1)).loadConfigByVersionAndClusterName(someVersion, someClusterName); + } + + @Test + public void testQueryConfigWithVersionNotFound() throws Exception { + long someAppId = 1; + String someClusterName = "someClusterName"; + String someVersionName = "someVersion"; + long someClientSideReleaseId = 1; + HttpServletResponse someResponse = mock(HttpServletResponse.class); + + when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)) + .thenReturn(null); + + ApolloConfig + result = + configController + .queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, + someResponse); + + assertNull(result); + verify(someResponse, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString()); + } + + @Test + public void testQueryConfigWithApolloConfigNotFound() throws Exception { + long someAppId = 1; + String someClusterName = "someClusterName"; + String someVersionName = "someVersion"; + long someClientSideReleaseId = 1; + long someServerSideNewReleaseId = 2; + HttpServletResponse someResponse = mock(HttpServletResponse.class); + Version someVersion = mock(Version.class); + + when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)) + .thenReturn(someVersion); + when(someVersion.getReleaseId()).thenReturn(someServerSideNewReleaseId); + when(configService.loadConfigByVersionAndClusterName(someVersion, someClusterName)) + .thenReturn(null); + + ApolloConfig + result = + configController + .queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, + someResponse); + + assertNull(result); + verify(someResponse, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString()); + } + + @Test + public void testQueryConfigWithApolloConfigNotModified() throws Exception { + long someAppId = 1; + String someClusterName = "someClusterName"; + String someVersionName = "someVersion"; + long someClientSideReleaseId = 1; + long someServerSideReleaseId = someClientSideReleaseId; + HttpServletResponse someResponse = mock(HttpServletResponse.class); + Version someVersion = mock(Version.class); + + when(configService.loadVersionByAppIdAndVersionName(someAppId, someVersionName)) + .thenReturn(someVersion); + when(someVersion.getReleaseId()).thenReturn(someServerSideReleaseId); + + ApolloConfig + result = + configController + .queryConfig(someAppId, someClusterName, someVersionName, someClientSideReleaseId, + someResponse); + + assertNull(result); + verify(someResponse, times(1)).setStatus(HttpServletResponse.SC_NOT_MODIFIED); + verify(configService, never()) + .loadConfigByVersionAndClusterName(any(Version.class), anyString()); + } } diff --git a/apollo-core/pom.xml b/apollo-core/pom.xml index d7800c699..659db5742 100644 --- a/apollo-core/pom.xml +++ b/apollo-core/pom.xml @@ -1,39 +1,39 @@ - - com.ctrip.apollo - apollo - 0.0.1-SNAPSHOT - ../pom.xml - - 4.0.0 - apollo-core - Apollo Core - jar + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + com.ctrip.apollo + apollo + 0.0.1-SNAPSHOT + ../pom.xml + + 4.0.0 + apollo-core + Apollo Core + jar - - - - com.fasterxml.jackson.core - jackson-annotations - - - com.fasterxml.jackson.core - jackson-databind - - - - - com.google.guava - guava - - - + + + + com.fasterxml.jackson.core + jackson-annotations + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.google.guava + guava + + + org.slf4j slf4j-api - + diff --git a/apollo-core/src/main/java/com/ctrip/apollo/Apollo.java b/apollo-core/src/main/java/com/ctrip/apollo/Apollo.java index d0011e713..fb37dacd6 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/Apollo.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/Apollo.java @@ -1,21 +1,21 @@ package com.ctrip.apollo; public class Apollo { - - public final static String VERSION = "java-0.0.1-SNAPSHOT"; + + public static final String VERSION = "java-0.0.1-SNAPSHOT"; private static Env m_env; public enum Env { - LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS + LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS } public static void initialize(Env env) { - m_env = env; + m_env = env; } public static Env getEnv() { - return m_env; + return m_env; } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/Constants.java b/apollo-core/src/main/java/com/ctrip/apollo/core/Constants.java index 6f781161b..54bd0e538 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/Constants.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/Constants.java @@ -2,6 +2,6 @@ package com.ctrip.apollo.core; public interface Constants { - String DEFAULT_CLUSTER_NAME = "default-cluster-name"; + String DEFAULT_CLUSTER_NAME = "default-cluster-name"; } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/MetaDomainConsts.java b/apollo-core/src/main/java/com/ctrip/apollo/core/MetaDomainConsts.java index 970b24a67..33a44460b 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/MetaDomainConsts.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/MetaDomainConsts.java @@ -1,10 +1,10 @@ package com.ctrip.apollo.core; +import com.ctrip.apollo.Apollo.Env; + import java.util.HashMap; import java.util.Map; -import com.ctrip.apollo.Apollo.Env; - public class MetaDomainConsts { public static final String DEFAULT_PORT = "8080"; diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/ServiceNameConsts.java b/apollo-core/src/main/java/com/ctrip/apollo/core/ServiceNameConsts.java index 744f24c81..195fb6b7f 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/ServiceNameConsts.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/ServiceNameConsts.java @@ -7,6 +7,6 @@ public class ServiceNameConsts { public static final String APOLLO_CONFIGSERVICE = "apollo-configservice"; public static final String APOLLO_ADMINSERVICE = "apollo-adminservice"; - + public static final String APOLLO_PORTAL = "apollo-portal"; } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ApolloConfig.java b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ApolloConfig.java index 724534471..05e962bc9 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ApolloConfig.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ApolloConfig.java @@ -1,10 +1,10 @@ package com.ctrip.apollo.core.dto; +import com.google.common.base.MoreObjects; + import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.base.MoreObjects; -import java.util.Comparator; import java.util.Map; /** @@ -12,82 +12,82 @@ import java.util.Map; */ public class ApolloConfig implements Comparable { - private long appId; - - private String cluster; - - private String version; - - private Map configurations; - - private long releaseId; - - private int order; - - @JsonCreator - public ApolloConfig(@JsonProperty("appId") long appId, - @JsonProperty("cluster") String cluster, - @JsonProperty("version") String version, - @JsonProperty("releaseId") long releaseId) { - super(); - this.appId = appId; - this.cluster = cluster; - this.version = version; - this.releaseId = releaseId; - } - - public Map getConfigurations() { - return configurations; - } - - public void setConfigurations(Map configurations) { - this.configurations = configurations; - } - - public long getAppId() { - return appId; - } - - public String getCluster() { - return cluster; - } - - public String getVersion() { - return version; - } - - public long getReleaseId() { - return releaseId; + private long appId; + + private String cluster; + + private String version; + + private Map configurations; + + private long releaseId; + + private int order; + + @JsonCreator + public ApolloConfig(@JsonProperty("appId") long appId, + @JsonProperty("cluster") String cluster, + @JsonProperty("version") String version, + @JsonProperty("releaseId") long releaseId) { + super(); + this.appId = appId; + this.cluster = cluster; + this.version = version; + this.releaseId = releaseId; + } + + public Map getConfigurations() { + return configurations; + } + + public void setConfigurations(Map configurations) { + this.configurations = configurations; + } + + public long getAppId() { + return appId; + } + + public String getCluster() { + return cluster; + } + + public String getVersion() { + return version; + } + + public long getReleaseId() { + return releaseId; + } + + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .omitNullValues() + .add("appId", appId) + .add("cluster", cluster) + .add("version", version) + .add("releaseId", releaseId) + .add("configurations", configurations) + .toString(); + } + + @Override + public int compareTo(ApolloConfig toCompare) { + if (toCompare == null || this.getOrder() > toCompare.getOrder()) { + return 1; } - - public int getOrder() { - return order; - } - - public void setOrder(int order) { - this.order = order; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .omitNullValues() - .add("appId", appId) - .add("cluster", cluster) - .add("version", version) - .add("releaseId", releaseId) - .add("configurations", configurations) - .toString(); - } - - @Override - public int compareTo(ApolloConfig o) { - if (o == null || this.getOrder() > o.getOrder()) { - return 1; - } - if (o.getOrder() > this.getOrder()) { - return -1; - } - return 0; + if (toCompare.getOrder() > this.getOrder()) { + return -1; } + return 0; + } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ClusterDTO.java b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ClusterDTO.java index 6d19bf5a2..7cac2167a 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ClusterDTO.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ClusterDTO.java @@ -2,33 +2,33 @@ package com.ctrip.apollo.core.dto; public class ClusterDTO { - private long id; + private long id; - private String name; + private String name; - private long appId; + private long appId; - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ConfigItemDTO.java b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ConfigItemDTO.java index 5c5232c87..7743cce5b 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ConfigItemDTO.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ConfigItemDTO.java @@ -4,122 +4,122 @@ import java.util.Date; public class ConfigItemDTO { - private long id; + private long id; - private long clusterId; + private long clusterId; - private String clusterName; + private String clusterName; - private long appId; + private long appId; - private String key; + private String key; - private String value; + private String value; - private String comment; + private String comment; - private String dataChangeCreatedBy; + private String dataChangeCreatedBy; - private Date dataChangeCreatedTime; + private Date dataChangeCreatedTime; - private String DataChangeLastModifiedBy; + private String dataChangeLastModifiedBy; - private Date dataChangeLastModifiedTime; + private Date dataChangeLastModifiedTime; - public ConfigItemDTO(){ + public ConfigItemDTO() { - } + } - public ConfigItemDTO(String key, String value){ - this.key = key; - this.value = value; - } + public ConfigItemDTO(String key, String value) { + this.key = key; + this.value = value; + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public long getClusterId() { - return clusterId; - } + public long getClusterId() { + return clusterId; + } - public void setClusterId(long clusterId) { - this.clusterId = clusterId; - } + public void setClusterId(long clusterId) { + this.clusterId = clusterId; + } - public String getClusterName() { - return clusterName; - } + public String getClusterName() { + return clusterName; + } - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public void setKey(String key) { - this.key = key; - } + public void setKey(String key) { + this.key = key; + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } - public void setValue(String value) { - this.value = value; - } + public void setValue(String value) { + this.value = value; + } - public String getDataChangeCreatedBy() { - return dataChangeCreatedBy; - } + public String getDataChangeCreatedBy() { + return dataChangeCreatedBy; + } - public void setDataChangeCreatedBy(String dataChangeCreatedBy) { - this.dataChangeCreatedBy = dataChangeCreatedBy; - } + public void setDataChangeCreatedBy(String dataChangeCreatedBy) { + this.dataChangeCreatedBy = dataChangeCreatedBy; + } - public Date getDataChangeCreatedTime() { - return dataChangeCreatedTime; - } + public Date getDataChangeCreatedTime() { + return dataChangeCreatedTime; + } - public void setDataChangeCreatedTime(Date dataChangeCreatedTime) { - this.dataChangeCreatedTime = dataChangeCreatedTime; - } + public void setDataChangeCreatedTime(Date dataChangeCreatedTime) { + this.dataChangeCreatedTime = dataChangeCreatedTime; + } - public String getDataChangeLastModifiedBy() { - return DataChangeLastModifiedBy; - } + public String getDataChangeLastModifiedBy() { + return dataChangeLastModifiedBy; + } - public void setDataChangeLastModifiedBy(String dataChangeLastModifiedBy) { - DataChangeLastModifiedBy = dataChangeLastModifiedBy; - } + public void setDataChangeLastModifiedBy(String dataChangeLastModifiedBy) { + this.dataChangeLastModifiedBy = dataChangeLastModifiedBy; + } - public Date getDataChangeLastModifiedTime() { - return dataChangeLastModifiedTime; - } + public Date getDataChangeLastModifiedTime() { + return dataChangeLastModifiedTime; + } - public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedTime) { - this.dataChangeLastModifiedTime = dataChangeLastModifiedTime; - } + public void setDataChangeLastModifiedTime(Date dataChangeLastModifiedTime) { + this.dataChangeLastModifiedTime = dataChangeLastModifiedTime; + } - public String getComment() { - return comment; - } + public String getComment() { + return comment; + } - public void setComment(String comment) { - this.comment = comment; - } + public void setComment(String comment) { + this.comment = comment; + } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ReleaseSnapshotDTO.java b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ReleaseSnapshotDTO.java index 59a4328d6..d63a964b2 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ReleaseSnapshotDTO.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/ReleaseSnapshotDTO.java @@ -2,47 +2,47 @@ package com.ctrip.apollo.core.dto; public class ReleaseSnapshotDTO { - private long id; + private long id; - private long releaseId; + private long releaseId; - private String clusterName; + private String clusterName; - private String configurations; + private String configurations; - public ReleaseSnapshotDTO() { - } + public ReleaseSnapshotDTO() { + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public long getReleaseId() { - return releaseId; - } + public long getReleaseId() { + return releaseId; + } - public void setReleaseId(long releaseId) { - this.releaseId = releaseId; - } + public void setReleaseId(long releaseId) { + this.releaseId = releaseId; + } - public String getClusterName() { - return clusterName; - } + public String getClusterName() { + return clusterName; + } - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } - public String getConfigurations() { - return configurations; - } + public String getConfigurations() { + return configurations; + } - public void setConfigurations(String configurations) { - this.configurations = configurations; - } + public void setConfigurations(String configurations) { + this.configurations = configurations; + } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/VersionDTO.java b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/VersionDTO.java index 554d70ca1..3bcfdfb7d 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/dto/VersionDTO.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/dto/VersionDTO.java @@ -2,57 +2,57 @@ package com.ctrip.apollo.core.dto; public class VersionDTO { - private long id; + private long id; - private String name; + private String name; - private long appId; + private long appId; - private long releaseId; + private long releaseId; - private Long parentVersion; + private Long parentVersion; - public VersionDTO(){ + public VersionDTO() { - } + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(long id) { - this.id = id; - } + public void setId(long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } - public long getReleaseId() { - return releaseId; - } + public long getReleaseId() { + return releaseId; + } - public void setReleaseId(long releaseId) { - this.releaseId = releaseId; - } + public void setReleaseId(long releaseId) { + this.releaseId = releaseId; + } - public Long getParentVersion() { - return parentVersion; - } + public Long getParentVersion() { + return parentVersion; + } - public void setParentVersion(Long parentVersion) { - this.parentVersion = parentVersion; - } + public void setParentVersion(Long parentVersion) { + this.parentVersion = parentVersion; + } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/utils/ApolloThreadFactory.java b/apollo-core/src/main/java/com/ctrip/apollo/core/utils/ApolloThreadFactory.java index da36a2a59..0f7a17df0 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/utils/ApolloThreadFactory.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/utils/ApolloThreadFactory.java @@ -1,5 +1,8 @@ package com.ctrip.apollo.core.utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -7,85 +10,84 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public class ApolloThreadFactory implements ThreadFactory { - private static Logger log = LoggerFactory.getLogger(ApolloThreadFactory.class); + private static Logger log = LoggerFactory.getLogger(ApolloThreadFactory.class); - private final AtomicLong m_threadNumber = new AtomicLong(1); + private final AtomicLong threadNumber = new AtomicLong(1); - private final String m_namePrefix; + private final String namePrefix; - private final boolean m_daemon; + private final boolean daemon; - private final static ThreadGroup m_threadGroup = new ThreadGroup("Apollo"); + private static final ThreadGroup threadGroup = new ThreadGroup("Apollo"); - public static ThreadGroup getThreadGroup() { - return m_threadGroup; - } + public static ThreadGroup getThreadGroup() { + return threadGroup; + } - public static ThreadFactory create(String namePrefix, boolean daemon) { - return new ApolloThreadFactory(namePrefix, daemon); - } + public static ThreadFactory create(String namePrefix, boolean daemon) { + return new ApolloThreadFactory(namePrefix, daemon); + } - public static boolean waitAllShutdown(int timeoutInMillis) { - ThreadGroup group = getThreadGroup(); - Thread[] activeThreads = new Thread[group.activeCount()]; - group.enumerate(activeThreads); - Set alives = new HashSet(Arrays.asList(activeThreads)); - Set dies = new HashSet(); - log.info("Current ACTIVE thread count is: {}", alives.size()); - long expire = System.currentTimeMillis() + timeoutInMillis; - while (System.currentTimeMillis() < expire) { - classify(alives, dies, new ClassifyStandard() { - @Override - public boolean satisfy(Thread t) { - return !t.isAlive() || t.isInterrupted() || t.isDaemon(); - } - }); - if (alives.size() > 0) { - log.info("Alive apollo threads: {}", alives); - try { - TimeUnit.SECONDS.sleep(2); - } catch (InterruptedException e) { - // ignore - } - } else { - log.info("All apollo threads are shutdown."); - return true; - } + public static boolean waitAllShutdown(int timeoutInMillis) { + ThreadGroup group = getThreadGroup(); + Thread[] activeThreads = new Thread[group.activeCount()]; + group.enumerate(activeThreads); + Set alives = new HashSet(Arrays.asList(activeThreads)); + Set dies = new HashSet(); + log.info("Current ACTIVE thread count is: {}", alives.size()); + long expire = System.currentTimeMillis() + timeoutInMillis; + while (System.currentTimeMillis() < expire) { + classify(alives, dies, new ClassifyStandard() { + @Override + public boolean satisfy(Thread thread) { + return !thread.isAlive() || thread.isInterrupted() || thread.isDaemon(); + } + }); + if (alives.size() > 0) { + log.info("Alive apollo threads: {}", alives); + try { + TimeUnit.SECONDS.sleep(2); + } catch (InterruptedException ex) { + // ignore } - log.warn("Some apollo threads are still alive but expire time has reached, alive threads: {}", alives); - return false; + } else { + log.info("All apollo threads are shutdown."); + return true; + } } + log.warn("Some apollo threads are still alive but expire time has reached, alive threads: {}", + alives); + return false; + } - private static interface ClassifyStandard { - boolean satisfy(T t); - } + private static interface ClassifyStandard { + boolean satisfy(T thread); + } - private static void classify(Set src, Set des, ClassifyStandard standard) { - Set s = new HashSet<>(); - for (T t : src) { - if (standard.satisfy(t)) { - s.add(t); - } - } - src.removeAll(s); - des.addAll(s); + private static void classify(Set src, Set des, ClassifyStandard standard) { + Set set = new HashSet<>(); + for (T t : src) { + if (standard.satisfy(t)) { + set.add(t); + } } + src.removeAll(set); + des.addAll(set); + } - private ApolloThreadFactory(String namePrefix, boolean daemon) { - m_namePrefix = namePrefix; - m_daemon = daemon; - } + private ApolloThreadFactory(String namePrefix, boolean daemon) { + this.namePrefix = namePrefix; + this.daemon = daemon; + } - public Thread newThread(Runnable r) { - Thread t = new Thread(m_threadGroup, r,// - m_threadGroup.getName() + "-" + m_namePrefix + "-" + m_threadNumber.getAndIncrement()); - t.setDaemon(m_daemon); - if (t.getPriority() != Thread.NORM_PRIORITY) - t.setPriority(Thread.NORM_PRIORITY); - return t; + public Thread newThread(Runnable runnable) { + Thread thread = new Thread(threadGroup, runnable,// + threadGroup.getName() + "-" + namePrefix + "-" + threadNumber.getAndIncrement()); + thread.setDaemon(daemon); + if (thread.getPriority() != Thread.NORM_PRIORITY) { + thread.setPriority(Thread.NORM_PRIORITY); } + return thread; + } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/utils/DNSUtil.java b/apollo-core/src/main/java/com/ctrip/apollo/core/utils/DNSUtil.java index 89f8ea1eb..6eaf3f33c 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/utils/DNSUtil.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/utils/DNSUtil.java @@ -7,17 +7,17 @@ import java.util.List; public class DNSUtil { - public static List resolve(String domainName) throws UnknownHostException { - List result = new ArrayList(); + public static List resolve(String domainName) throws UnknownHostException { + List result = new ArrayList(); - InetAddress[] addresses = InetAddress.getAllByName(domainName); - if (addresses != null) { - for (InetAddress addr : addresses) { - result.add(addr.getHostAddress()); - } - } + InetAddress[] addresses = InetAddress.getAllByName(domainName); + if (addresses != null) { + for (InetAddress addr : addresses) { + result.add(addr.getHostAddress()); + } + } - return result; - } + return result; + } } diff --git a/apollo-core/src/main/java/com/ctrip/apollo/core/utils/StringUtils.java b/apollo-core/src/main/java/com/ctrip/apollo/core/utils/StringUtils.java index e596973ce..69b270690 100644 --- a/apollo-core/src/main/java/com/ctrip/apollo/core/utils/StringUtils.java +++ b/apollo-core/src/main/java/com/ctrip/apollo/core/utils/StringUtils.java @@ -5,369 +5,353 @@ import java.util.Iterator; public class StringUtils { - public static final String EMPTY = ""; + public static final String EMPTY = ""; - /** - *

    - * Checks if a String is empty ("") or null. - *

    - * - *
    -	 * StringUtils.isEmpty(null)      = true
    -	 * StringUtils.isEmpty("")        = true
    -	 * StringUtils.isEmpty(" ")       = false
    -	 * StringUtils.isEmpty("bob")     = false
    -	 * StringUtils.isEmpty("  bob  ") = false
    -	 * 
    - * - *

    - * NOTE: This method changed in Lang version 2.0. It no longer trims the String. That functionality is available in isBlank(). - *

    - * - * @param str - * the String to check, may be null - * @return true if the String is empty or null - */ - public static boolean isEmpty(String str) { - return str == null || str.length() == 0; - } + /** + *

    + * Checks if a String is empty ("") or null. + *

    + * + *
    +   * StringUtils.isEmpty(null)      = true
    +   * StringUtils.isEmpty("")        = true
    +   * StringUtils.isEmpty(" ")       = false
    +   * StringUtils.isEmpty("bob")     = false
    +   * StringUtils.isEmpty("  bob  ") = false
    +   * 
    + * + *

    + * NOTE: This method changed in Lang version 2.0. It no longer trims the String. That functionality is available in isBlank(). + *

    + * + * @param str the String to check, may be null + * @return true if the String is empty or null + */ + public static boolean isEmpty(String str) { + return str == null || str.length() == 0; + } - /** - *

    - * Checks if a String is whitespace, empty ("") or null. - *

    - * - *
    -	 * StringUtils.isBlank(null)      = true
    -	 * StringUtils.isBlank("")        = true
    -	 * StringUtils.isBlank(" ")       = true
    -	 * StringUtils.isBlank("bob")     = false
    -	 * StringUtils.isBlank("  bob  ") = false
    -	 * 
    - * - * @param str - * the String to check, may be null - * @return true if the String is null, empty or whitespace - */ - public static boolean isBlank(String str) { - int strLen; - if (str == null || (strLen = str.length()) == 0) { - return true; - } - for (int i = 0; i < strLen; i++) { - if ((Character.isWhitespace(str.charAt(i)) == false)) { - return false; - } - } - return true; - } + /** + *

    + * Checks if a String is whitespace, empty ("") or null. + *

    + * + *
    +   * StringUtils.isBlank(null)      = true
    +   * StringUtils.isBlank("")        = true
    +   * StringUtils.isBlank(" ")       = true
    +   * StringUtils.isBlank("bob")     = false
    +   * StringUtils.isBlank("  bob  ") = false
    +   * 
    + * + * @param str the String to check, may be null + * @return true if the String is null, empty or whitespace + */ + public static boolean isBlank(String str) { + int strLen; + if (str == null || (strLen = str.length()) == 0) { + return true; + } + for (int i = 0; i < strLen; i++) { + if ((Character.isWhitespace(str.charAt(i)) == false)) { + return false; + } + } + return true; + } - /** - *

    - * Removes control characters (char <= 32) from both ends of this String returning null if the String is empty - * ("") after the trim or if it is null. - * - *

    - * The String is trimmed using {@link String#trim()}. Trim removes start and end characters <= 32. To strip whitespace use - * {@link #stripToNull(String)}. - *

    - * - *
    -	 * StringUtils.trimToNull(null)          = null
    -	 * StringUtils.trimToNull("")            = null
    -	 * StringUtils.trimToNull("     ")       = null
    -	 * StringUtils.trimToNull("abc")         = "abc"
    -	 * StringUtils.trimToNull("    abc    ") = "abc"
    -	 * 
    - * - * @param str - * the String to be trimmed, may be null - * @return the trimmed String, null if only chars <= 32, empty or null String input - * @since 2.0 - */ - public static String trimToNull(String str) { - String ts = trim(str); - return isEmpty(ts) ? null : ts; - } + /** + *

    + * Removes control characters (char <= 32) from both ends of this String returning null if the String is empty + * ("") after the trim or if it is null. + * + *

    + * The String is trimmed using {@link String#trim()}. Trim removes start and end characters <= 32. To strip whitespace use + * {@link #stripToNull(String)}. + *

    + * + *
    +   * StringUtils.trimToNull(null)          = null
    +   * StringUtils.trimToNull("")            = null
    +   * StringUtils.trimToNull("     ")       = null
    +   * StringUtils.trimToNull("abc")         = "abc"
    +   * StringUtils.trimToNull("    abc    ") = "abc"
    +   * 
    + * + * @param str the String to be trimmed, may be null + * @return the trimmed String, null if only chars <= 32, empty or null String input + * @since 2.0 + */ + public static String trimToNull(String str) { + String ts = trim(str); + return isEmpty(ts) ? null : ts; + } - /** - *

    - * Removes control characters (char <= 32) from both ends of this String returning an empty String ("") if the String is empty - * ("") after the trim or if it is null. - * - *

    - * The String is trimmed using {@link String#trim()}. Trim removes start and end characters <= 32. To strip whitespace use - * {@link #stripToEmpty(String)}. - *

    - * - *
    -	 * StringUtils.trimToEmpty(null)          = ""
    -	 * StringUtils.trimToEmpty("")            = ""
    -	 * StringUtils.trimToEmpty("     ")       = ""
    -	 * StringUtils.trimToEmpty("abc")         = "abc"
    -	 * StringUtils.trimToEmpty("    abc    ") = "abc"
    -	 * 
    - * - * @param str - * the String to be trimmed, may be null - * @return the trimmed String, or an empty String if null input - * @since 2.0 - */ - public static String trimToEmpty(String str) { - return str == null ? EMPTY : str.trim(); - } + /** + *

    + * Removes control characters (char <= 32) from both ends of this String returning an empty String ("") if the String is empty + * ("") after the trim or if it is null. + * + *

    + * The String is trimmed using {@link String#trim()}. Trim removes start and end characters <= 32. To strip whitespace use + * {@link #stripToEmpty(String)}. + *

    + * + *
    +   * StringUtils.trimToEmpty(null)          = ""
    +   * StringUtils.trimToEmpty("")            = ""
    +   * StringUtils.trimToEmpty("     ")       = ""
    +   * StringUtils.trimToEmpty("abc")         = "abc"
    +   * StringUtils.trimToEmpty("    abc    ") = "abc"
    +   * 
    + * + * @param str the String to be trimmed, may be null + * @return the trimmed String, or an empty String if null input + * @since 2.0 + */ + public static String trimToEmpty(String str) { + return str == null ? EMPTY : str.trim(); + } - /** - *

    - * Removes control characters (char <= 32) from both ends of this String, handling null by returning - * null. - *

    - * - *

    - * The String is trimmed using {@link String#trim()}. Trim removes start and end characters <= 32. To strip whitespace use - * {@link #strip(String)}. - *

    - * - *

    - * To trim your choice of characters, use the {@link #strip(String, String)} methods. - *

    - * - *
    -	 * StringUtils.trim(null)          = null
    -	 * StringUtils.trim("")            = ""
    -	 * StringUtils.trim("     ")       = ""
    -	 * StringUtils.trim("abc")         = "abc"
    -	 * StringUtils.trim("    abc    ") = "abc"
    -	 * 
    - * - * @param str - * the String to be trimmed, may be null - * @return the trimmed string, null if null String input - */ - public static String trim(String str) { - return str == null ? null : str.trim(); - } + /** + *

    + * Removes control characters (char <= 32) from both ends of this String, handling null by returning + * null. + *

    + * + *

    + * The String is trimmed using {@link String#trim()}. Trim removes start and end characters <= 32. To strip whitespace use + * {@link #strip(String)}. + *

    + * + *

    + * To trim your choice of characters, use the {@link #strip(String, String)} methods. + *

    + * + *
    +   * StringUtils.trim(null)          = null
    +   * StringUtils.trim("")            = ""
    +   * StringUtils.trim("     ")       = ""
    +   * StringUtils.trim("abc")         = "abc"
    +   * StringUtils.trim("    abc    ") = "abc"
    +   * 
    + * + * @param str the String to be trimmed, may be null + * @return the trimmed string, null if null String input + */ + public static String trim(String str) { + return str == null ? null : str.trim(); + } - /** - *

    - * Compares two Strings, returning true if they are equal. - *

    - * - *

    - * nulls are handled without exceptions. Two null references are considered to be equal. The comparison - * is case sensitive. - *

    - * - *
    -	 * StringUtils.equals(null, null)   = true
    -	 * StringUtils.equals(null, "abc")  = false
    -	 * StringUtils.equals("abc", null)  = false
    -	 * StringUtils.equals("abc", "abc") = true
    -	 * StringUtils.equals("abc", "ABC") = false
    -	 * 
    - * - * @see java.lang.String#equals(Object) - * @param str1 - * the first String, may be null - * @param str2 - * the second String, may be null - * @return true if the Strings are equal, case sensitive, or both null - */ - public static boolean equals(String str1, String str2) { - return str1 == null ? str2 == null : str1.equals(str2); - } + /** + *

    + * Compares two Strings, returning true if they are equal. + *

    + * + *

    + * nulls are handled without exceptions. Two null references are considered to be equal. The comparison + * is case sensitive. + *

    + * + *
    +   * StringUtils.equals(null, null)   = true
    +   * StringUtils.equals(null, "abc")  = false
    +   * StringUtils.equals("abc", null)  = false
    +   * StringUtils.equals("abc", "abc") = true
    +   * StringUtils.equals("abc", "ABC") = false
    +   * 
    + * + * @param str1 the first String, may be null + * @param str2 the second String, may be null + * @return true if the Strings are equal, case sensitive, or both null + * @see java.lang.String#equals(Object) + */ + public static boolean equals(String str1, String str2) { + return str1 == null ? str2 == null : str1.equals(str2); + } - /** - *

    - * Compares two Strings, returning true if they are equal ignoring the case. - *

    - * - *

    - * nulls are handled without exceptions. Two null references are considered equal. Comparison is case - * insensitive. - *

    - * - *
    -	 * StringUtils.equalsIgnoreCase(null, null)   = true
    -	 * StringUtils.equalsIgnoreCase(null, "abc")  = false
    -	 * StringUtils.equalsIgnoreCase("abc", null)  = false
    -	 * StringUtils.equalsIgnoreCase("abc", "abc") = true
    -	 * StringUtils.equalsIgnoreCase("abc", "ABC") = true
    -	 * 
    - * - * @see java.lang.String#equalsIgnoreCase(String) - * @param str1 - * the first String, may be null - * @param str2 - * the second String, may be null - * @return true if the Strings are equal, case insensitive, or both null - */ - public static boolean equalsIgnoreCase(String str1, String str2) { - return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2); - } + /** + *

    + * Compares two Strings, returning true if they are equal ignoring the case. + *

    + * + *

    + * nulls are handled without exceptions. Two null references are considered equal. Comparison is case + * insensitive. + *

    + * + *
    +   * StringUtils.equalsIgnoreCase(null, null)   = true
    +   * StringUtils.equalsIgnoreCase(null, "abc")  = false
    +   * StringUtils.equalsIgnoreCase("abc", null)  = false
    +   * StringUtils.equalsIgnoreCase("abc", "abc") = true
    +   * StringUtils.equalsIgnoreCase("abc", "ABC") = true
    +   * 
    + * + * @param str1 the first String, may be null + * @param str2 the second String, may be null + * @return true if the Strings are equal, case insensitive, or both null + * @see java.lang.String#equalsIgnoreCase(String) + */ + public static boolean equalsIgnoreCase(String str1, String str2) { + return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2); + } - /** - *

    - * Check if a String starts with a specified prefix. - *

    - * - *

    - * nulls are handled without exceptions. Two null references are considered to be equal. The comparison - * is case sensitive. - *

    - * - *
    -	 * StringUtils.startsWith(null, null)      = true
    -	 * StringUtils.startsWith(null, "abc")     = false
    -	 * StringUtils.startsWith("abcdef", null)  = false
    -	 * StringUtils.startsWith("abcdef", "abc") = true
    -	 * StringUtils.startsWith("ABCDEF", "abc") = false
    -	 * 
    - * - * @see java.lang.String#startsWith(String) - * @param str - * the String to check, may be null - * @param prefix - * the prefix to find, may be null - * @return true if the String starts with the prefix, case sensitive, or both null - * @since 2.4 - */ - public static boolean startsWith(String str, String prefix) { - return startsWith(str, prefix, false); - } + /** + *

    + * Check if a String starts with a specified prefix. + *

    + * + *

    + * nulls are handled without exceptions. Two null references are considered to be equal. The comparison + * is case sensitive. + *

    + * + *
    +   * StringUtils.startsWith(null, null)      = true
    +   * StringUtils.startsWith(null, "abc")     = false
    +   * StringUtils.startsWith("abcdef", null)  = false
    +   * StringUtils.startsWith("abcdef", "abc") = true
    +   * StringUtils.startsWith("ABCDEF", "abc") = false
    +   * 
    + * + * @param str the String to check, may be null + * @param prefix the prefix to find, may be null + * @return true if the String starts with the prefix, case sensitive, or both null + * @see java.lang.String#startsWith(String) + * @since 2.4 + */ + public static boolean startsWith(String str, String prefix) { + return startsWith(str, prefix, false); + } - /** - *

    - * Case insensitive check if a String starts with a specified prefix. - *

    - * - *

    - * nulls are handled without exceptions. Two null references are considered to be equal. The comparison - * is case insensitive. - *

    - * - *
    -	 * StringUtils.startsWithIgnoreCase(null, null)      = true
    -	 * StringUtils.startsWithIgnoreCase(null, "abc")     = false
    -	 * StringUtils.startsWithIgnoreCase("abcdef", null)  = false
    -	 * StringUtils.startsWithIgnoreCase("abcdef", "abc") = true
    -	 * StringUtils.startsWithIgnoreCase("ABCDEF", "abc") = true
    -	 * 
    - * - * @see java.lang.String#startsWith(String) - * @param str - * the String to check, may be null - * @param prefix - * the prefix to find, may be null - * @return true if the String starts with the prefix, case insensitive, or both null - * @since 2.4 - */ - public static boolean startsWithIgnoreCase(String str, String prefix) { - return startsWith(str, prefix, true); - } + /** + *

    + * Check if a String starts with a specified prefix (optionally case insensitive). + *

    + * + * @param str the String to check, may be null + * @param prefix the prefix to find, may be null + * @param ignoreCase inidicates whether the compare should ignore case (case insensitive) or not. + * @return true if the String starts with the prefix or both null + * @see java.lang.String#startsWith(String) + */ + private static boolean startsWith(String str, String prefix, boolean ignoreCase) { + if (str == null || prefix == null) { + return (str == null && prefix == null); + } + if (prefix.length() > str.length()) { + return false; + } + return str.regionMatches(ignoreCase, 0, prefix, 0, prefix.length()); + } - /** - *

    - * Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false. - *

    - * - *

    - * null will return false. An empty String (length()=0) will return true. - *

    - * - *
    -	 * StringUtils.isNumeric(null)   = false
    -	 * StringUtils.isNumeric("")     = true
    -	 * StringUtils.isNumeric("  ")   = false
    -	 * StringUtils.isNumeric("123")  = true
    -	 * StringUtils.isNumeric("12 3") = false
    -	 * StringUtils.isNumeric("ab2c") = false
    -	 * StringUtils.isNumeric("12-3") = false
    -	 * StringUtils.isNumeric("12.3") = false
    -	 * 
    - * - * @param str - * the String to check, may be null - * @return true if only contains digits, and is non-null - */ - public static boolean isNumeric(String str) { - if (str == null) { - return false; - } - int sz = str.length(); - for (int i = 0; i < sz; i++) { - if (Character.isDigit(str.charAt(i)) == false) { - return false; - } - } - return true; - } + /** + *

    + * Case insensitive check if a String starts with a specified prefix. + *

    + * + *

    + * nulls are handled without exceptions. Two null references are considered to be equal. The comparison + * is case insensitive. + *

    + * + *
    +   * StringUtils.startsWithIgnoreCase(null, null)      = true
    +   * StringUtils.startsWithIgnoreCase(null, "abc")     = false
    +   * StringUtils.startsWithIgnoreCase("abcdef", null)  = false
    +   * StringUtils.startsWithIgnoreCase("abcdef", "abc") = true
    +   * StringUtils.startsWithIgnoreCase("ABCDEF", "abc") = true
    +   * 
    + * + * @param str the String to check, may be null + * @param prefix the prefix to find, may be null + * @return true if the String starts with the prefix, case insensitive, or both null + * @see java.lang.String#startsWith(String) + * @since 2.4 + */ + public static boolean startsWithIgnoreCase(String str, String prefix) { + return startsWith(str, prefix, true); + } - /** - *

    - * Check if a String starts with a specified prefix (optionally case insensitive). - *

    - * - * @see java.lang.String#startsWith(String) - * @param str - * the String to check, may be null - * @param prefix - * the prefix to find, may be null - * @param ignoreCase - * inidicates whether the compare should ignore case (case insensitive) or not. - * @return true if the String starts with the prefix or both null - */ - private static boolean startsWith(String str, String prefix, boolean ignoreCase) { - if (str == null || prefix == null) { - return (str == null && prefix == null); - } - if (prefix.length() > str.length()) { - return false; - } - return str.regionMatches(ignoreCase, 0, prefix, 0, prefix.length()); - } + /** + *

    + * Checks if the String contains only unicode digits. A decimal point is not a unicode digit and returns false. + *

    + * + *

    + * null will return false. An empty String (length()=0) will return true. + *

    + * + *
    +   * StringUtils.isNumeric(null)   = false
    +   * StringUtils.isNumeric("")     = true
    +   * StringUtils.isNumeric("  ")   = false
    +   * StringUtils.isNumeric("123")  = true
    +   * StringUtils.isNumeric("12 3") = false
    +   * StringUtils.isNumeric("ab2c") = false
    +   * StringUtils.isNumeric("12-3") = false
    +   * StringUtils.isNumeric("12.3") = false
    +   * 
    + * + * @param str the String to check, may be null + * @return true if only contains digits, and is non-null + */ + public static boolean isNumeric(String str) { + if (str == null) { + return false; + } + int sz = str.length(); + for (int i = 0; i < sz; i++) { + if (Character.isDigit(str.charAt(i)) == false) { + return false; + } + } + return true; + } - public static interface StringFormatter { - public String format(T obj); - } + public static interface StringFormatter { + public String format(T obj); + } - public static String join(Collection collection, String separator) { - return join(collection, separator, new StringFormatter() { - @Override - public String format(T obj) { - return obj.toString(); - } - }); - } + public static String join(Collection collection, String separator) { + return join(collection, separator, new StringFormatter() { + @Override + public String format(T obj) { + return obj.toString(); + } + }); + } - public static String join(Collection collection, String separator, StringFormatter formatter) { - Iterator iterator = collection.iterator(); - // handle null, zero and one elements before building a buffer - if (iterator == null) { - return null; - } - if (!iterator.hasNext()) { - return EMPTY; - } - T first = iterator.next(); - if (!iterator.hasNext()) { - return first == null ? "" : formatter.format(first); - } + public static String join(Collection collection, String separator, + StringFormatter formatter) { + Iterator iterator = collection.iterator(); + // handle null, zero and one elements before building a buffer + if (iterator == null) { + return null; + } + if (!iterator.hasNext()) { + return EMPTY; + } + T first = iterator.next(); + if (!iterator.hasNext()) { + return first == null ? "" : formatter.format(first); + } - // two or more elements - StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small - if (first != null) { - buf.append(formatter.format(first)); - } + // two or more elements + StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small + if (first != null) { + buf.append(formatter.format(first)); + } - while (iterator.hasNext()) { - buf.append(separator); - T obj = iterator.next(); - if (obj != null) { - buf.append(formatter.format(obj)); - } - } + while (iterator.hasNext()) { + buf.append(separator); + T obj = iterator.next(); + if (obj != null) { + buf.append(formatter.format(obj)); + } + } - return buf.toString(); - } + return buf.toString(); + } } diff --git a/apollo-demo/src/main/java/com/ctrip/apollo/demo/AppConfig.java b/apollo-demo/src/main/java/com/ctrip/apollo/demo/AppConfig.java index 0aaa5924b..f08f8e8d7 100644 --- a/apollo-demo/src/main/java/com/ctrip/apollo/demo/AppConfig.java +++ b/apollo-demo/src/main/java/com/ctrip/apollo/demo/AppConfig.java @@ -1,6 +1,7 @@ package com.ctrip.apollo.demo; import com.ctrip.apollo.client.ApolloConfigManager; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -11,10 +12,10 @@ import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(value = "com.ctrip.apollo.demo") public class AppConfig { - @Bean - public ApolloConfigManager apolloConfigManager() { - return new ApolloConfigManager(); - } + @Bean + public ApolloConfigManager apolloConfigManager() { + return new ApolloConfigManager(); + } // @Bean // public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { diff --git a/apollo-demo/src/main/java/com/ctrip/apollo/demo/WebConfig.java b/apollo-demo/src/main/java/com/ctrip/apollo/demo/WebConfig.java index c5dd91dec..8d04dd577 100644 --- a/apollo-demo/src/main/java/com/ctrip/apollo/demo/WebConfig.java +++ b/apollo-demo/src/main/java/com/ctrip/apollo/demo/WebConfig.java @@ -15,24 +15,24 @@ import org.springframework.web.servlet.view.JstlView; @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { - @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addViewController("/").setViewName("welcome"); - registry.addViewController("/index").setViewName("welcome"); - } + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("welcome"); + registry.addViewController("/index").setViewName("welcome"); + } - @Bean - public InternalResourceViewResolver viewResolver() { - InternalResourceViewResolver viewResolver - = new InternalResourceViewResolver(); - viewResolver.setViewClass(JstlView.class); - viewResolver.setPrefix("/WEB-INF/views/"); - viewResolver.setSuffix(".jsp"); - return viewResolver; - } + @Bean + public InternalResourceViewResolver viewResolver() { + InternalResourceViewResolver viewResolver + = new InternalResourceViewResolver(); + viewResolver.setViewClass(JstlView.class); + viewResolver.setPrefix("/WEB-INF/views/"); + viewResolver.setSuffix(".jsp"); + return viewResolver; + } - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/**").addResourceLocations("/"); - } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/**").addResourceLocations("/"); + } } diff --git a/apollo-demo/src/main/java/com/ctrip/apollo/demo/controller/DemoController.java b/apollo-demo/src/main/java/com/ctrip/apollo/demo/controller/DemoController.java index 210f69a4a..1c721cc15 100644 --- a/apollo-demo/src/main/java/com/ctrip/apollo/demo/controller/DemoController.java +++ b/apollo-demo/src/main/java/com/ctrip/apollo/demo/controller/DemoController.java @@ -6,8 +6,8 @@ import com.ctrip.apollo.client.model.PropertyChange; import com.ctrip.apollo.client.util.ConfigUtil; import com.ctrip.apollo.demo.model.Config; import com.ctrip.apollo.demo.service.DemoService; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.context.scope.refresh.RefreshScope; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.PathVariable; @@ -25,35 +25,35 @@ import java.util.List; @RequestMapping("/demo") @PropertySource("classpath:application.properties") public class DemoController { - @Autowired - private Environment env; - @Autowired - private DemoService demoService; - //Apollo config client internal impl, not intended to be used by application, only for this test page! - private ConfigUtil configUtil = ConfigUtil.getInstance(); - - //ApolloConfigManager, not intended to be used by application, only for this test page! - @Autowired - private ApolloConfigManager apolloConfigManager; - - @RequestMapping(value = "/config/{configName:.*}", method = RequestMethod.GET) - public Config queryConfig(@PathVariable String configName) { - return new Config(configName, env.getProperty(configName, "undefined")); - } - - @RequestMapping(value = "/injected/config", method = RequestMethod.GET) - public Config queryInjectedConfig() { - return new Config("apollo.foo", demoService.getFoo()); - } - - @RequestMapping(value = "/client/registries", method = RequestMethod.GET) - public List loadApolloRegistries() throws IOException { - return configUtil.loadApolloRegistries(); - } - - @RequestMapping(value = "/refresh", method = RequestMethod.POST) - public List refreshBeans() { - List changes = this.apolloConfigManager.updatePropertySource(); - return changes; - } + @Autowired + private Environment env; + @Autowired + private DemoService demoService; + //Apollo config client internal impl, not intended to be used by application, only for this test page! + private ConfigUtil configUtil = ConfigUtil.getInstance(); + + //ApolloConfigManager, not intended to be used by application, only for this test page! + @Autowired + private ApolloConfigManager apolloConfigManager; + + @RequestMapping(value = "/config/{configName:.*}", method = RequestMethod.GET) + public Config queryConfig(@PathVariable String configName) { + return new Config(configName, env.getProperty(configName, "undefined")); + } + + @RequestMapping(value = "/injected/config", method = RequestMethod.GET) + public Config queryInjectedConfig() { + return new Config("apollo.foo", demoService.getFoo()); + } + + @RequestMapping(value = "/client/registries", method = RequestMethod.GET) + public List loadApolloRegistries() throws IOException { + return configUtil.loadApolloRegistries(); + } + + @RequestMapping(value = "/refresh", method = RequestMethod.POST) + public List refreshBeans() { + List changes = this.apolloConfigManager.updatePropertySource(); + return changes; + } } diff --git a/apollo-demo/src/main/java/com/ctrip/apollo/demo/exception/RestExceptionHandler.java b/apollo-demo/src/main/java/com/ctrip/apollo/demo/exception/RestExceptionHandler.java index 7e74ce67c..d909bbc1e 100644 --- a/apollo-demo/src/main/java/com/ctrip/apollo/demo/exception/RestExceptionHandler.java +++ b/apollo-demo/src/main/java/com/ctrip/apollo/demo/exception/RestExceptionHandler.java @@ -2,6 +2,7 @@ package com.ctrip.apollo.demo.exception; import com.ctrip.apollo.demo.model.ErrorResult; import com.fasterxml.jackson.core.JsonProcessingException; + import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -15,11 +16,12 @@ import org.springframework.web.context.request.WebRequest; @ControllerAdvice public class RestExceptionHandler { - @ExceptionHandler(Exception.class) - ResponseEntity handleWebExceptions(Exception ex, - WebRequest request) throws JsonProcessingException { - ErrorResult error = new ErrorResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage()); - return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(error); + @ExceptionHandler(Exception.class) + ResponseEntity handleWebExceptions(Exception ex, + WebRequest request) + throws JsonProcessingException { + ErrorResult error = new ErrorResult(HttpStatus.INTERNAL_SERVER_ERROR.value(), ex.getMessage()); + return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(error); - } + } } diff --git a/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/Config.java b/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/Config.java index 1ddc5c0a2..c46225219 100644 --- a/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/Config.java +++ b/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/Config.java @@ -4,19 +4,19 @@ package com.ctrip.apollo.demo.model; * Created by Jason on 2/25/16. */ public class Config { - private final String name; - private final String value; + private final String name; + private final String value; - public Config(String name, String value) { - this.name = name; - this.value = value; - } + public Config(String name, String value) { + this.name = name; + this.value = value; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public String getValue() { - return value; - } + public String getValue() { + return value; + } } diff --git a/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/ErrorResult.java b/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/ErrorResult.java index 5f6f628f4..1429ec169 100644 --- a/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/ErrorResult.java +++ b/apollo-demo/src/main/java/com/ctrip/apollo/demo/model/ErrorResult.java @@ -4,19 +4,19 @@ package com.ctrip.apollo.demo.model; * Created by Jason on 7/6/15. */ public class ErrorResult { - private final int code; - private final String msg; + private final int code; + private final String msg; - public ErrorResult(int code, String msg) { - this.code = code; - this.msg = msg; - } + public ErrorResult(int code, String msg) { + this.code = code; + this.msg = msg; + } - public int getCode() { - return code; - } + public int getCode() { + return code; + } - public String getMsg() { - return msg; - } + public String getMsg() { + return msg; + } } diff --git a/apollo-demo/src/main/java/com/ctrip/apollo/demo/service/DemoService.java b/apollo-demo/src/main/java/com/ctrip/apollo/demo/service/DemoService.java index 8bc558a26..5bbf68f2a 100644 --- a/apollo-demo/src/main/java/com/ctrip/apollo/demo/service/DemoService.java +++ b/apollo-demo/src/main/java/com/ctrip/apollo/demo/service/DemoService.java @@ -10,14 +10,14 @@ import org.springframework.stereotype.Service; @Service @RefreshScope public class DemoService { - private String foo; + private String foo; - @Value("${apollo.foo}") - private void setFoo(String foo) { - this.foo = foo; - } + @Value("${apollo.foo}") + private void setFoo(String foo) { + this.foo = foo; + } - public String getFoo() { - return foo; - } + public String getFoo() { + return foo; + } } diff --git a/apollo-demo/src/main/resources/log4j2.xml b/apollo-demo/src/main/resources/log4j2.xml index c11609d98..9592c3c23 100644 --- a/apollo-demo/src/main/resources/log4j2.xml +++ b/apollo-demo/src/main/resources/log4j2.xml @@ -5,7 +5,7 @@ - + diff --git a/apollo-demo/src/main/webapp/WEB-INF/views/welcome.jsp b/apollo-demo/src/main/webapp/WEB-INF/views/welcome.jsp index 183957207..9aeccb777 100644 --- a/apollo-demo/src/main/webapp/WEB-INF/views/welcome.jsp +++ b/apollo-demo/src/main/webapp/WEB-INF/views/welcome.jsp @@ -6,7 +6,7 @@ Apollo Config Client - + diff --git a/apollo-demo/src/main/webapp/s/scripts/angular-toastr-1.4.1.tpls.min.js b/apollo-demo/src/main/webapp/s/scripts/angular-toastr-1.4.1.tpls.min.js index 5b0b8c938..ee2413ba8 100644 --- a/apollo-demo/src/main/webapp/s/scripts/angular-toastr-1.4.1.tpls.min.js +++ b/apollo-demo/src/main/webapp/s/scripts/angular-toastr-1.4.1.tpls.min.js @@ -1 +1,247 @@ -!function(){"use strict";function t(t,e,s,n,o,r,a){function i(t){if(t)d(t.toastId);else for(var e=0;e=e&&O[e-1].open.resolve(),o()&&(h.remove(),h=null,T=a.defer())}))}function g(t,e,s,n){return angular.isObject(s)&&(n=s,s=null),v({iconClass:t,message:e,optionsOverride:n,title:s})}function m(){return angular.extend({},r)}function f(e){if(h)return T.promise;h=angular.element("
    "),h.attr("id",e.containerId),h.addClass(e.positionClass),h.css({"pointer-events":"auto"});var s=angular.element(document.querySelector(e.target));if(!s||!s.length)throw"Target for toasts doesn't exist";return t.enter(h,s).then(function(){T.resolve()}),T.promise}function v(s){function r(t,e,s){s.allowHtml?(t.scope.allowHtml=!0,t.scope.title=o.trustAsHtml(e.title),t.scope.message=o.trustAsHtml(e.message)):(t.scope.title=e.title,t.scope.message=e.message),t.scope.toastType=t.iconClass,t.scope.toastId=t.toastId,t.scope.options={extendedTimeOut:s.extendedTimeOut,messageClass:s.messageClass,onHidden:s.onHidden,onShown:s.onShown,progressBar:s.progressBar,tapToDismiss:s.tapToDismiss,timeOut:s.timeOut,titleClass:s.titleClass,toastClass:s.toastClass},s.closeButton&&(t.scope.options.closeHtml=s.closeHtml)}function i(){function t(t){for(var e=["containerId","iconClasses","maxOpened","newestOnTop","positionClass","preventDuplicates","preventOpenDuplicates","templates"],s=0,n=e.length;n>s;s++)delete t[e[s]];return t}var e={toastId:C++,isOpened:!1,scope:n.$new(),open:a.defer()};return e.iconClass=s.iconClass,s.optionsOverride&&(p=angular.extend(p,t(s.optionsOverride)),e.iconClass=s.optionsOverride.iconClass||e.iconClass),r(e,s,p),e.el=l(e.scope),e}function l(t){var s=angular.element("
    "),n=e.get("$compile");return n(s)(t)}function c(){return p.maxOpened&&O.length<=p.maxOpened||!p.maxOpened}function u(){var t=p.preventDuplicates&&s.message===w,e=p.preventOpenDuplicates&&B[s.message];return t||e?!0:(w=s.message,B[s.message]=!0,!1)}var p=m();if(!u()){var g=i();if(O.push(g),p.autoDismiss&&p.maxOpened>0)for(var v=O.slice(0,O.length-p.maxOpened),T=0,$=v.length;$>T;T++)d(v[T].toastId);return c()&&g.open.resolve(),g.open.promise.then(function(){f(p).then(function(){if(g.isOpened=!0,p.newestOnTop)t.enter(g.el,h).then(function(){g.scope.init()});else{var e=h[0].lastChild?angular.element(h[0].lastChild):null;t.enter(g.el,h,e).then(function(){g.scope.init()})}})}),g}}var h,C=0,O=[],w="",B={},T=a.defer(),$={clear:i,error:l,info:c,remove:d,success:u,warning:p};return $}angular.module("toastr",[]).factory("toastr",t),t.$inject=["$animate","$injector","$document","$rootScope","$sce","toastrConfig","$q"]}(),function(){"use strict";angular.module("toastr").constant("toastrConfig",{allowHtml:!1,autoDismiss:!1,closeButton:!1,closeHtml:"",containerId:"toast-container",extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},maxOpened:0,messageClass:"toast-message",newestOnTop:!0,onHidden:null,onShown:null,positionClass:"toast-top-right",preventDuplicates:!1,preventOpenDuplicates:!1,progressBar:!1,tapToDismiss:!0,target:"body",templates:{toast:"directives/toast/toast.html",progressbar:"directives/progressbar/progressbar.html"},timeOut:5e3,titleClass:"toast-title",toastClass:"toast"})}(),function(){"use strict";function t(t){function e(t,e,s,n){function o(){var t=(i-(new Date).getTime())/a*100;e.css("width",t+"%")}var r,a,i;n.progressBar=t,t.start=function(t){r&&clearInterval(r),a=parseFloat(t),i=(new Date).getTime()+a,r=setInterval(o,10)},t.stop=function(){r&&clearInterval(r)},t.$on("$destroy",function(){clearInterval(r)})}return{replace:!0,require:"^toast",templateUrl:function(){return t.templates.progressbar},link:e}}angular.module("toastr").directive("progressBar",t),t.$inject=["toastrConfig"]}(),function(){"use strict";function t(){this.progressBar=null,this.startProgressBar=function(t){this.progressBar&&this.progressBar.start(t)},this.stopProgressBar=function(){this.progressBar&&this.progressBar.stop()}}angular.module("toastr").controller("ToastController",t)}(),function(){"use strict";function t(t,e,s,n){function o(s,o,r,a){function i(t){return a.startProgressBar(t),e(function(){a.stopProgressBar(),n.remove(s.toastId)},t,1)}function l(){s.progressBar=!1,a.stopProgressBar()}function c(){return s.options.closeHtml}var u;if(s.toastClass=s.options.toastClass,s.titleClass=s.options.titleClass,s.messageClass=s.options.messageClass,s.progressBar=s.options.progressBar,c()){var p=angular.element(s.options.closeHtml),d=t.get("$compile");p.addClass("toast-close-button"),p.attr("ng-click","close()"),d(p)(s),o.prepend(p)}s.init=function(){s.options.timeOut&&(u=i(s.options.timeOut)),s.options.onShown&&s.options.onShown()},o.on("mouseenter",function(){l(),u&&e.cancel(u)}),s.tapToast=function(){s.options.tapToDismiss&&s.close(!0)},s.close=function(t){n.remove(s.toastId,t)},o.on("mouseleave",function(){(0!==s.options.timeOut||0!==s.options.extendedTimeOut)&&(s.$apply(function(){s.progressBar=s.options.progressBar}),u=i(s.options.extendedTimeOut))})}return{replace:!0,templateUrl:function(){return s.templates.toast},controller:"ToastController",link:o}}angular.module("toastr").directive("toast",t),t.$inject=["$injector","$interval","toastrConfig","toastr"]}(),angular.module("toastr").run(["$templateCache",function(t){t.put("directives/progressbar/progressbar.html",'
    \n'),t.put("directives/toast/toast.html",'
    \n
    \n
    {{title}}
    \n
    {{message}}
    \n
    \n
    \n
    \n \n
    \n')}]); \ No newline at end of file +!function () { + "use strict"; + function t(t, e, s, n, o, r, a) { + function i(t) { + if (t)d(t.toastId); else for (var e = 0; e < O.length; e++)d(O[e].toastId) + } + + function l(t, e, s) { + var n = m().iconClasses.error; + return g(n, t, e, s) + } + + function c(t, e, s) { + var n = m().iconClasses.info; + return g(n, t, e, s) + } + + function u(t, e, s) { + var n = m().iconClasses.success; + return g(n, t, e, s) + } + + function p(t, e, s) { + var n = m().iconClasses.warning; + return g(n, t, e, s) + } + + function d(e, s) { + function n(t) { + for (var e = 0; e < O.length; e++)if (O[e].toastId === t)return O[e] + } + + function o() { + return !O.length + } + + var i = n(e); + i && !i.deleting && (i.deleting = !0, i.isOpened = !1, t.leave(i.el).then(function () { + i.scope.options.onHidden && i.scope.options.onHidden(s), i.scope.$destroy(); + var t = O.indexOf(i); + delete B[i.scope.message], O.splice(t, 1); + var e = r.maxOpened; + e && O.length >= e && O[e - 1].open.resolve(), o() && (h.remove(), h = null, T = a.defer()) + })) + } + + function g(t, e, s, n) { + return angular.isObject(s) && (n = s, s = null), v({iconClass: t, message: e, optionsOverride: n, title: s}) + } + + function m() { + return angular.extend({}, r) + } + + function f(e) { + if (h)return T.promise; + h = angular.element("
    "), h.attr("id", e.containerId), h.addClass(e.positionClass), h.css({"pointer-events": "auto"}); + var s = angular.element(document.querySelector(e.target)); + if (!s || !s.length)throw"Target for toasts doesn't exist"; + return t.enter(h, s).then(function () { + T.resolve() + }), T.promise + } + + function v(s) { + function r(t, e, s) { + s.allowHtml ? (t.scope.allowHtml = !0, t.scope.title = o.trustAsHtml(e.title), t.scope.message = o.trustAsHtml(e.message)) : (t.scope.title = e.title, t.scope.message = e.message), t.scope.toastType = t.iconClass, t.scope.toastId = t.toastId, t.scope.options = { + extendedTimeOut: s.extendedTimeOut, + messageClass: s.messageClass, + onHidden: s.onHidden, + onShown: s.onShown, + progressBar: s.progressBar, + tapToDismiss: s.tapToDismiss, + timeOut: s.timeOut, + titleClass: s.titleClass, + toastClass: s.toastClass + }, s.closeButton && (t.scope.options.closeHtml = s.closeHtml) + } + + function i() { + function t(t) { + for (var e = ["containerId", "iconClasses", "maxOpened", "newestOnTop", "positionClass", "preventDuplicates", "preventOpenDuplicates", "templates"], s = 0, n = e.length; n > s; s++)delete t[e[s]]; + return t + } + + var e = {toastId: C++, isOpened: !1, scope: n.$new(), open: a.defer()}; + return e.iconClass = s.iconClass, s.optionsOverride && (p = angular.extend(p, t(s.optionsOverride)), e.iconClass = s.optionsOverride.iconClass || e.iconClass), r(e, s, p), e.el = l(e.scope), e + } + + function l(t) { + var s = angular.element("
    "), n = e.get("$compile"); + return n(s)(t) + } + + function c() { + return p.maxOpened && O.length <= p.maxOpened || !p.maxOpened + } + + function u() { + var t = p.preventDuplicates && s.message === w, e = p.preventOpenDuplicates && B[s.message]; + return t || e ? !0 : (w = s.message, B[s.message] = !0, !1) + } + + var p = m(); + if (!u()) { + var g = i(); + if (O.push(g), p.autoDismiss && p.maxOpened > 0)for (var v = O.slice(0, O.length - p.maxOpened), T = 0, $ = v.length; $ > T; T++)d(v[T].toastId); + return c() && g.open.resolve(), g.open.promise.then(function () { + f(p).then(function () { + if (g.isOpened = !0, p.newestOnTop)t.enter(g.el, h).then(function () { + g.scope.init() + }); else { + var e = h[0].lastChild ? angular.element(h[0].lastChild) : null; + t.enter(g.el, h, e).then(function () { + g.scope.init() + }) + } + }) + }), g + } + } + + var h, C = 0, O = [], w = "", B = {}, T = a.defer(), $ = { + clear: i, + error: l, + info: c, + remove: d, + success: u, + warning: p + }; + return $ + } + + angular.module("toastr", []).factory("toastr", t), t.$inject = ["$animate", "$injector", "$document", "$rootScope", "$sce", "toastrConfig", "$q"] +}(), function () { + "use strict"; + angular.module("toastr").constant("toastrConfig", { + allowHtml: !1, + autoDismiss: !1, + closeButton: !1, + closeHtml: "", + containerId: "toast-container", + extendedTimeOut: 1e3, + iconClasses: {error: "toast-error", info: "toast-info", success: "toast-success", warning: "toast-warning"}, + maxOpened: 0, + messageClass: "toast-message", + newestOnTop: !0, + onHidden: null, + onShown: null, + positionClass: "toast-top-right", + preventDuplicates: !1, + preventOpenDuplicates: !1, + progressBar: !1, + tapToDismiss: !0, + target: "body", + templates: {toast: "directives/toast/toast.html", progressbar: "directives/progressbar/progressbar.html"}, + timeOut: 5e3, + titleClass: "toast-title", + toastClass: "toast" + }) +}(), function () { + "use strict"; + function t(t) { + function e(t, e, s, n) { + function o() { + var t = (i - (new Date).getTime()) / a * 100; + e.css("width", t + "%") + } + + var r, a, i; + n.progressBar = t, t.start = function (t) { + r && clearInterval(r), a = parseFloat(t), i = (new Date).getTime() + a, r = setInterval(o, 10) + }, t.stop = function () { + r && clearInterval(r) + }, t.$on("$destroy", function () { + clearInterval(r) + }) + } + + return { + replace: !0, require: "^toast", templateUrl: function () { + return t.templates.progressbar + }, link: e + } + } + + angular.module("toastr").directive("progressBar", t), t.$inject = ["toastrConfig"] +}(), function () { + "use strict"; + function t() { + this.progressBar = null, this.startProgressBar = function (t) { + this.progressBar && this.progressBar.start(t) + }, this.stopProgressBar = function () { + this.progressBar && this.progressBar.stop() + } + } + + angular.module("toastr").controller("ToastController", t) +}(), function () { + "use strict"; + function t(t, e, s, n) { + function o(s, o, r, a) { + function i(t) { + return a.startProgressBar(t), e(function () { + a.stopProgressBar(), n.remove(s.toastId) + }, t, 1) + } + + function l() { + s.progressBar = !1, a.stopProgressBar() + } + + function c() { + return s.options.closeHtml + } + + var u; + if (s.toastClass = s.options.toastClass, s.titleClass = s.options.titleClass, s.messageClass = s.options.messageClass, s.progressBar = s.options.progressBar, c()) { + var p = angular.element(s.options.closeHtml), d = t.get("$compile"); + p.addClass("toast-close-button"), p.attr("ng-click", "close()"), d(p)(s), o.prepend(p) + } + s.init = function () { + s.options.timeOut && (u = i(s.options.timeOut)), s.options.onShown && s.options.onShown() + }, o.on("mouseenter", function () { + l(), u && e.cancel(u) + }), s.tapToast = function () { + s.options.tapToDismiss && s.close(!0) + }, s.close = function (t) { + n.remove(s.toastId, t) + }, o.on("mouseleave", function () { + (0 !== s.options.timeOut || 0 !== s.options.extendedTimeOut) && (s.$apply(function () { + s.progressBar = s.options.progressBar + }), u = i(s.options.extendedTimeOut)) + }) + } + + return { + replace: !0, templateUrl: function () { + return s.templates.toast + }, controller: "ToastController", link: o + } + } + + angular.module("toastr").directive("toast", t), t.$inject = ["$injector", "$interval", "toastrConfig", "toastr"] +}(), angular.module("toastr").run(["$templateCache", function (t) { + t.put("directives/progressbar/progressbar.html", '
    \n'), t.put("directives/toast/toast.html", '
    \n
    \n
    {{title}}
    \n
    {{message}}
    \n
    \n
    \n
    \n \n
    \n') +}]); diff --git a/apollo-demo/src/main/webapp/s/scripts/app.js b/apollo-demo/src/main/webapp/s/scripts/app.js index 421b3b4b7..3e7c489fa 100644 --- a/apollo-demo/src/main/webapp/s/scripts/app.js +++ b/apollo-demo/src/main/webapp/s/scripts/app.js @@ -16,7 +16,7 @@ var self = this; - this.loadRegistries = function() { + this.loadRegistries = function () { $http.get("demo/client/registries") .success(function (data) { self.registries = data; @@ -26,43 +26,43 @@ }); }; - this.queryConfig = function() { + this.queryConfig = function () { $http.get("demo/config/" + encodeURIComponent(this.configQuery.configName)) - .success(function(data) { + .success(function (data) { self.configQuery.configValue = data.value; }) - .error(function(data, status) { + .error(function (data, status) { toastr.error((data && data.msg) || 'Load config failed'); }); }; this.queryInjectedConfig = function () { $http.get("demo/injected/config") - .success(function(data) { + .success(function (data) { self.injectedConfigValue = data.value; }) - .error(function(data, status) { + .error(function (data, status) { toastr.error((data && data.msg) || 'Load injected config failed'); }); }; - this.refreshConfig = function() { + this.refreshConfig = function () { $http.post("demo/refresh") - .success(function(data) { + .success(function (data) { self.assembleRefreshResult(data); }) - .error(function(data, status) { + .error(function (data, status) { toastr.error((data && data.msg) || 'Refresh config failed'); }); }; - this.assembleRefreshResult = function(changedPropertyArray) { - if(!changedPropertyArray || !changedPropertyArray.length) { + this.assembleRefreshResult = function (changedPropertyArray) { + if (!changedPropertyArray || !changedPropertyArray.length) { this.refreshResult = NONE; return; } - this.refreshResult = _.map(changedPropertyArray, function(propertyChange) { + this.refreshResult = _.map(changedPropertyArray, function (propertyChange) { return propertyChange.propertyName + '(' + propertyChange.changeType + ')'; }); }; diff --git a/apollo-demo/src/main/webapp/s/scripts/loading-bar.min.js b/apollo-demo/src/main/webapp/s/scripts/loading-bar.min.js index 5026baf91..0e4db623f 100644 --- a/apollo-demo/src/main/webapp/s/scripts/loading-bar.min.js +++ b/apollo-demo/src/main/webapp/s/scripts/loading-bar.min.js @@ -4,4 +4,95 @@ * Copyright (c) 2015 Wes Cruver * License: MIT */ -!function(){"use strict";angular.module("angular-loading-bar",["cfp.loadingBarInterceptor"]),angular.module("chieffancypants.loadingBar",["cfp.loadingBarInterceptor"]),angular.module("cfp.loadingBarInterceptor",["cfp.loadingBar"]).config(["$httpProvider",function(a){var b=["$q","$cacheFactory","$timeout","$rootScope","$log","cfpLoadingBar",function(b,c,d,e,f,g){function h(){d.cancel(j),g.complete(),l=0,k=0}function i(b){var d,e=c.get("$http"),f=a.defaults;!b.cache&&!f.cache||b.cache===!1||"GET"!==b.method&&"JSONP"!==b.method||(d=angular.isObject(b.cache)?b.cache:angular.isObject(f.cache)?f.cache:e);var g=void 0!==d?void 0!==d.get(b.url):!1;return void 0!==b.cached&&g!==b.cached?b.cached:(b.cached=g,g)}var j,k=0,l=0,m=g.latencyThreshold;return{request:function(a){return a.ignoreLoadingBar||i(a)||(e.$broadcast("cfpLoadingBar:loading",{url:a.url}),0===k&&(j=d(function(){g.start()},m)),k++,g.set(l/k)),a},response:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),a):(f.error("Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),a)},responseError:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),b.reject(a)):(f.error("Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),b.reject(a))}}}];a.interceptors.push(b)}]),angular.module("cfp.loadingBar",[]).provider("cfpLoadingBar",function(){this.autoIncrement=!0,this.includeSpinner=!0,this.includeBar=!0,this.latencyThreshold=100,this.startSize=.02,this.parentSelector="body",this.spinnerTemplate='
    ',this.loadingBarTemplate='
    ',this.$get=["$injector","$document","$timeout","$rootScope",function(a,b,c,d){function e(){k||(k=a.get("$animate"));var e=b.find(n).eq(0);c.cancel(m),r||(d.$broadcast("cfpLoadingBar:started"),r=!0,v&&k.enter(o,e,angular.element(e[0].lastChild)),u&&k.enter(q,e,angular.element(e[0].lastChild)),f(w))}function f(a){if(r){var b=100*a+"%";p.css("width",b),s=a,t&&(c.cancel(l),l=c(function(){g()},250))}}function g(){if(!(h()>=1)){var a=0,b=h();a=b>=0&&.25>b?(3*Math.random()+3)/100:b>=.25&&.65>b?3*Math.random()/100:b>=.65&&.9>b?2*Math.random()/100:b>=.9&&.99>b?.005:0;var c=h()+a;f(c)}}function h(){return s}function i(){s=0,r=!1}function j(){k||(k=a.get("$animate")),d.$broadcast("cfpLoadingBar:completed"),f(1),c.cancel(m),m=c(function(){var a=k.leave(o,i);a&&a.then&&a.then(i),k.leave(q)},500)}var k,l,m,n=this.parentSelector,o=angular.element(this.loadingBarTemplate),p=o.find("div").eq(0),q=angular.element(this.spinnerTemplate),r=!1,s=0,t=this.autoIncrement,u=this.includeSpinner,v=this.includeBar,w=this.startSize;return{start:e,set:f,status:h,inc:g,complete:j,autoIncrement:this.autoIncrement,includeSpinner:this.includeSpinner,latencyThreshold:this.latencyThreshold,parentSelector:this.parentSelector,startSize:this.startSize}}]})}(); \ No newline at end of file +!function () { + "use strict"; + angular.module("angular-loading-bar", ["cfp.loadingBarInterceptor"]), angular.module("chieffancypants.loadingBar", ["cfp.loadingBarInterceptor"]), angular.module("cfp.loadingBarInterceptor", ["cfp.loadingBar"]).config(["$httpProvider", function (a) { + var b = ["$q", "$cacheFactory", "$timeout", "$rootScope", "$log", "cfpLoadingBar", function (b, c, d, e, f, g) { + function h() { + d.cancel(j), g.complete(), l = 0, k = 0 + } + + function i(b) { + var d, e = c.get("$http"), f = a.defaults; + !b.cache && !f.cache || b.cache === !1 || "GET" !== b.method && "JSONP" !== b.method || (d = angular.isObject(b.cache) ? b.cache : angular.isObject(f.cache) ? f.cache : e); + var g = void 0 !== d ? void 0 !== d.get(b.url) : !1; + return void 0 !== b.cached && g !== b.cached ? b.cached : (b.cached = g, g) + } + + var j, k = 0, l = 0, m = g.latencyThreshold; + return { + request: function (a) { + return a.ignoreLoadingBar || i(a) || (e.$broadcast("cfpLoadingBar:loading", {url: a.url}), 0 === k && (j = d(function () { + g.start() + }, m)), k++, g.set(l / k)), a + }, response: function (a) { + return a && a.config ? (a.config.ignoreLoadingBar || i(a.config) || (l++, e.$broadcast("cfpLoadingBar:loaded", { + url: a.config.url, + result: a + }), l >= k ? h() : g.set(l / k)), a) : (f.error("Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"), a) + }, responseError: function (a) { + return a && a.config ? (a.config.ignoreLoadingBar || i(a.config) || (l++, e.$broadcast("cfpLoadingBar:loaded", { + url: a.config.url, + result: a + }), l >= k ? h() : g.set(l / k)), b.reject(a)) : (f.error("Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"), b.reject(a)) + } + } + }]; + a.interceptors.push(b) + }]), angular.module("cfp.loadingBar", []).provider("cfpLoadingBar", function () { + this.autoIncrement = !0, this.includeSpinner = !0, this.includeBar = !0, this.latencyThreshold = 100, this.startSize = .02, this.parentSelector = "body", this.spinnerTemplate = '
    ', this.loadingBarTemplate = '
    ', this.$get = ["$injector", "$document", "$timeout", "$rootScope", function (a, b, c, d) { + function e() { + k || (k = a.get("$animate")); + var e = b.find(n).eq(0); + c.cancel(m), r || (d.$broadcast("cfpLoadingBar:started"), r = !0, v && k.enter(o, e, angular.element(e[0].lastChild)), u && k.enter(q, e, angular.element(e[0].lastChild)), f(w)) + } + + function f(a) { + if (r) { + var b = 100 * a + "%"; + p.css("width", b), s = a, t && (c.cancel(l), l = c(function () { + g() + }, 250)) + } + } + + function g() { + if (!(h() >= 1)) { + var a = 0, b = h(); + a = b >= 0 && .25 > b ? (3 * Math.random() + 3) / 100 : b >= .25 && .65 > b ? 3 * Math.random() / 100 : b >= .65 && .9 > b ? 2 * Math.random() / 100 : b >= .9 && .99 > b ? .005 : 0; + var c = h() + a; + f(c) + } + } + + function h() { + return s + } + + function i() { + s = 0, r = !1 + } + + function j() { + k || (k = a.get("$animate")), d.$broadcast("cfpLoadingBar:completed"), f(1), c.cancel(m), m = c(function () { + var a = k.leave(o, i); + a && a.then && a.then(i), k.leave(q) + }, 500) + } + + var k, l, m, n = this.parentSelector, o = angular.element(this.loadingBarTemplate), p = o.find("div").eq(0), q = angular.element(this.spinnerTemplate), r = !1, s = 0, t = this.autoIncrement, u = this.includeSpinner, v = this.includeBar, w = this.startSize; + return { + start: e, + set: f, + status: h, + inc: g, + complete: j, + autoIncrement: this.autoIncrement, + includeSpinner: this.includeSpinner, + latencyThreshold: this.latencyThreshold, + parentSelector: this.parentSelector, + startSize: this.startSize + } + }] + }) +}(); diff --git a/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-0.13.0.min.js b/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-0.13.0.min.js index c3f5c2403..9de7f99b6 100644 --- a/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-0.13.0.min.js +++ b/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-0.13.0.min.js @@ -5,5 +5,1889 @@ * Version: 0.13.0 - 2015-05-02 * License: MIT */ -angular.module("ui.bootstrap",["ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.transition","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.collapse",[]).directive("collapse",["$animate",function(a){return{link:function(b,c,d){function e(){c.removeClass("collapse").addClass("collapsing"),a.addClass(c,"in",{to:{height:c[0].scrollHeight+"px"}}).then(f)}function f(){c.removeClass("collapsing"),c.css({height:"auto"})}function g(){c.css({height:c[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing"),a.removeClass(c,"in",{to:{height:"0"}}).then(h)}function h(){c.css({height:"0"}),c.removeClass("collapsing"),c.addClass("collapse")}b.$watch(d.collapse,function(a){a?g():e()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",transclude:!0,replace:!1,templateUrl:"template/accordion/accordion.html"}}).directive("accordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/accordion/accordion-group.html",scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.$watch("isOpen",function(b){b&&d.closeOthers(a)}),a.toggleOpen=function(){a.isDisabled||(a.isOpen=!a.isOpen)}}}}).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,angular.noop))}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.accordionTransclude]},function(a){a&&(b.html(""),b.append(a))})}}}),angular.module("ui.bootstrap.alert",[]).controller("AlertController",["$scope","$attrs",function(a,b){a.closeable="close"in b,this.close=a.close}]).directive("alert",function(){return{restrict:"EA",controller:"AlertController",templateUrl:"template/alert/alert.html",transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}).directive("dismissOnTimeout",["$timeout",function(a){return{require:"alert",link:function(b,c,d,e){a(function(){e.close()},parseInt(d.dismissOnTimeout,10))}}}]),angular.module("ui.bootstrap.bindHtml",[]).directive("bindHtmlUnsafe",function(){return function(a,b,c){b.addClass("ng-binding").data("$binding",c.bindHtmlUnsafe),a.$watch(c.bindHtmlUnsafe,function(a){b.html(a||"")})}}),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).controller("ButtonsController",["buttonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("btnRadio",function(){return{require:["btnRadio","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){var e=d[0],f=d[1];f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.btnRadio)))},b.bind(e.toggleEvent,function(){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.btnRadio)),f.$render()})})}}}).directive("btnCheckbox",function(){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){var d=a.$eval(b);return angular.isDefined(d)?d:c}var h=d[0],i=d[1];i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.bind(h.toggleEvent,function(){a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",[]).controller("CarouselController",["$scope","$interval","$animate",function(a,b,c){function d(a){if(angular.isUndefined(k[a].index))return k[a];{var b;k.length}for(b=0;b0&&(h=b(g,c))}function f(){h&&(b.cancel(h),h=null)}function g(){var b=+a.interval;i&&!isNaN(b)&&b>0?a.next():a.pause()}var h,i,j=this,k=j.slides=a.slides=[],l=-1;j.currentSlide=null;var m=!1;j.select=a.select=function(b,d){function f(){m||(angular.extend(b,{direction:d,active:!0}),angular.extend(j.currentSlide||{},{direction:d,active:!1}),c.enabled()&&!a.noTransition&&b.$element&&(a.$currentTransition=!0,b.$element.one("$animate:close",function(){a.$currentTransition=null})),j.currentSlide=b,l=g,e())}var g=j.indexOfSlide(b);void 0===d&&(d=g>j.getCurrentIndex()?"next":"prev"),b&&b!==j.currentSlide&&f()},a.$on("$destroy",function(){m=!0}),j.getCurrentIndex=function(){return j.currentSlide&&angular.isDefined(j.currentSlide.index)?+j.currentSlide.index:l},j.indexOfSlide=function(a){return angular.isDefined(a.index)?+a.index:k.indexOf(a)},a.next=function(){var b=(j.getCurrentIndex()+1)%k.length;return a.$currentTransition?void 0:j.select(d(b),"next")},a.prev=function(){var b=j.getCurrentIndex()-1<0?k.length-1:j.getCurrentIndex()-1;return a.$currentTransition?void 0:j.select(d(b),"prev")},a.isActive=function(a){return j.currentSlide===a},a.$watch("interval",e),a.$on("$destroy",f),a.play=function(){i||(i=!0,e())},a.pause=function(){a.noPause||(i=!1,f())},j.addSlide=function(b,c){b.$element=c,k.push(b),1===k.length||b.active?(j.select(k[k.length-1]),1==k.length&&a.play()):b.active=!1},j.removeSlide=function(a){angular.isDefined(a.index)&&k.sort(function(a,b){return+a.index>+b.index});var b=k.indexOf(a);k.splice(b,1),k.length>0&&a.active?j.select(b>=k.length?k[b-1]:k[b]):l>b&&l--}}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",require:"carousel",templateUrl:"template/carousel/carousel.html",scope:{interval:"=",noTransition:"=",noPause:"="}}}]).directive("slide",function(){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/carousel/slide.html",scope:{active:"=?",index:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}).animation(".item",["$animate",function(a){return{beforeAddClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return b.addClass(f),a.addClass(b,g).then(function(){e||b.removeClass(g+" "+f),d()}),function(){e=!0}}d()},beforeRemoveClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return a.addClass(b,g).then(function(){e||b.removeClass(g),d()}),function(){e=!0}}d()}}}]),angular.module("ui.bootstrap.dateparser",[]).service("dateParser",["$locale","orderByFilter",function(a,b){function c(a){var c=[],d=a.split("");return angular.forEach(f,function(b,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+b.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),c.push({index:f,apply:b.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:b(c,"index")}}function d(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}var e=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.parsers={};var f={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:a.DATETIME_FORMATS.MONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.MONTH.indexOf(b)}},MMM:{regex:a.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.SHORTMONTH.indexOf(b)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:a.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:a.DATETIME_FORMATS.SHORTDAY.join("|")},HH:{regex:"(?:0|1)[0-9]|2[0-3]",apply:function(a){this.hours=+a}},H:{regex:"1?[0-9]|2[0-3]",apply:function(a){this.hours=+a}},mm:{regex:"[0-5][0-9]",apply:function(a){this.minutes=+a}},m:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.minutes=+a}},sss:{regex:"[0-9][0-9][0-9]",apply:function(a){this.milliseconds=+a}},ss:{regex:"[0-5][0-9]",apply:function(a){this.seconds=+a}},s:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.seconds=+a}}};this.parse=function(b,f,g){if(!angular.isString(b)||!f)return b;f=a.DATETIME_FORMATS[f]||f,f=f.replace(e,"\\$&"),this.parsers[f]||(this.parsers[f]=c(f));var h=this.parsers[f],i=h.regex,j=h.map,k=b.match(i);if(k&&k.length){var l,m;l=g?{year:g.getFullYear(),month:g.getMonth(),date:g.getDate(),hours:g.getHours(),minutes:g.getMinutes(),seconds:g.getSeconds(),milliseconds:g.getMilliseconds()}:{year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0};for(var n=1,o=k.length;o>n;n++){var p=j[n-1];p.apply&&p.apply.call(l,k[n])}return d(l.year,l.month,l.date)&&(m=new Date(l.year,l.month,l.date,l.hours,l.minutes,l.seconds,l.milliseconds||0)),m}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).constant("datepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$timeout","$log","dateFilter","datepickerConfig",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","minMode","maxMode","showWeeks","startingDay","yearRange","shortcutPropagation"],function(c,e){i[c]=angular.isDefined(b[c])?8>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):h[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=h[d]?new Date(h[d]):null}),a.datepickerMode=a.datepickerMode||h.datepickerMode,a.maxMode=i.maxMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(j.$isEmpty(j.$modelValue)||j.$invalid)&&(i.activeDate=a,i.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$viewValue){var a=new Date(j.$viewValue),b=!isNaN(a);b?this.activeDate=a:f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'),j.$setValidity("date",b)}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$viewValue?new Date(j.$viewValue):null;j.$setValidity("date-disabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$viewValue?new Date(j.$viewValue):null;return{date:a,label:g(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$viewValue?new Date(j.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){e(function(){i.element[0].focus()},0,!1)};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),i.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]).directive("datepicker",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/datepicker.html",scope:{datepickerMode:"=?",dateDisabled:"&",customClass:"&",shortcutPropagation:"&?"},require:["datepicker","?^ngModel"],controller:"DatepickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}).directive("daypicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/day.html",require:"^datepicker",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){var c=new Array(b),d=new Date(a),e=0;for(d.setHours(12);b>e;)c[e++]=new Date(d),d.setDate(d.getDate()+1);return c}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+"-"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,"EEEE")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=(11-e.startingDay)%7,p=b.rows.length,q=0;p>q;q++)b.weekNumbers.push(h(b.rows[q][o].date))}},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},e.handleKeyDown=function(a){var b=e.activeDate.getDate();if("left"===a)b-=1;else if("up"===a)b-=7;else if("right"===a)b+=1;else if("down"===a)b+=7;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getMonth()+("pageup"===a?-1:1);e.activeDate.setMonth(c,1),b=Math.min(f(e.activeDate.getFullYear(),e.activeDate.getMonth()),b)}else"home"===a?b=1:"end"===a&&(b=f(e.activeDate.getFullYear(),e.activeDate.getMonth()));e.activeDate.setDate(b)},e.refreshView()}}}]).directive("monthpicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/month.html",require:"^datepicker",link:function(b,c,d,e){e.step={years:1},e.element=c,e._refreshView=function(){for(var c=new Array(12),d=e.activeDate.getFullYear(),f=0;12>f;f++)c[f]=angular.extend(e.createDateObject(new Date(d,f,1),e.formatMonth),{uid:b.uniqueId+"-"+f});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(c,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if("left"===a)b-=1;else if("up"===a)b-=3;else if("right"===a)b+=1;else if("down"===a)b+=3;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getFullYear()+("pageup"===a?-1:1);e.activeDate.setFullYear(c)}else"home"===a?b=0:"end"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive("yearpicker",["dateFilter",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/year.html",require:"^datepicker",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b=new Array(f),c=0,g=e(d.activeDate.getFullYear());f>c;c++)b[c]=angular.extend(d.createDateObject(new Date(g+c,0,1),d.formatYear),{uid:a.uniqueId+"-"+c});a.title=[b[0].label,b[f-1].label].join(" - "),a.rows=d.split(b,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();"left"===a?b-=1:"up"===a?b-=5:"right"===a?b+=1:"down"===a?b+=5:"pageup"===a||"pagedown"===a?b+=("pageup"===a?-1:1)*d.step.years:"home"===a?b=e(d.activeDate.getFullYear()):"end"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant("datepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0}).directive("datepickerPopup",["$compile","$parse","$document","$position","dateFilter","dateParser","datepickerPopupConfig",function(a,b,c,d,e,f,g){return{restrict:"EA",require:"ngModel",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&",customClass:"&"},link:function(h,i,j,k){function l(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function m(a){if(angular.isNumber(a)&&(a=new Date(a)),a){if(angular.isDate(a)&&!isNaN(a))return a;if(angular.isString(a)){var b=f.parse(a,o,h.date)||new Date(a);return isNaN(b)?void 0:b}return void 0}return null}function n(a,b){var c=a||b;if(angular.isNumber(c)&&(c=new Date(c)),c){if(angular.isDate(c)&&!isNaN(c))return!0;if(angular.isString(c)){var d=f.parse(c,o)||new Date(c);return!isNaN(d)}return!1}return!0}var o,p=angular.isDefined(j.closeOnDateSelection)?h.$parent.$eval(j.closeOnDateSelection):g.closeOnDateSelection,q=angular.isDefined(j.datepickerAppendToBody)?h.$parent.$eval(j.datepickerAppendToBody):g.appendToBody;h.showButtonBar=angular.isDefined(j.showButtonBar)?h.$parent.$eval(j.showButtonBar):g.showButtonBar,h.getText=function(a){return h[a+"Text"]||g[a+"Text"]};var r=!1;if(g.html5Types[j.type]?(o=g.html5Types[j.type],r=!0):(o=j.datepickerPopup||g.datepickerPopup,j.$observe("datepickerPopup",function(a){var b=a||g.datepickerPopup;if(b!==o&&(o=b,k.$modelValue=null,!o))throw new Error("datepickerPopup must have a date format specified.")})),!o)throw new Error("datepickerPopup must have a date format specified.");if(r&&j.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");var s=angular.element("
    ");s.attr({"ng-model":"date","ng-change":"dateSelection()"});var t=angular.element(s.children()[0]);if(r&&"month"==j.type&&(t.attr("datepicker-mode",'"month"'),t.attr("min-mode","month")),j.datepickerOptions){var u=h.$parent.$eval(j.datepickerOptions);u.initDate&&(h.initDate=u.initDate,t.attr("init-date","initDate"),delete u.initDate),angular.forEach(u,function(a,b){t.attr(l(b),a)})}h.watchData={},angular.forEach(["minDate","maxDate","datepickerMode","initDate","shortcutPropagation"],function(a){if(j[a]){var c=b(j[a]);if(h.$parent.$watch(c,function(b){h.watchData[a]=b}),t.attr(l(a),"watchData."+a),"datepickerMode"===a){var d=c.assign;h.$watch("watchData."+a,function(a,b){a!==b&&d(h.$parent,a)})}}}),j.dateDisabled&&t.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),j.showWeeks&&t.attr("show-weeks",j.showWeeks),j.customClass&&t.attr("custom-class","customClass({ date: date, mode: mode })"),r?k.$formatters.push(function(a){return h.date=a,a}):(k.$$parserName="date",k.$validators.date=n,k.$parsers.unshift(m),k.$formatters.push(function(a){return h.date=a,k.$isEmpty(a)?a:e(a,o)})),h.dateSelection=function(a){angular.isDefined(a)&&(h.date=a);var b=h.date?e(h.date,o):"";i.val(b),k.$setViewValue(b),p&&(h.isOpen=!1,i[0].focus())},k.$viewChangeListeners.push(function(){h.date=f.parse(k.$viewValue,o,h.date)||new Date(k.$viewValue)});var v=function(a){h.isOpen&&a.target!==i[0]&&h.$apply(function(){h.isOpen=!1})},w=function(a){h.keydown(a)};i.bind("keydown",w),h.keydown=function(a){27===a.which?(a.preventDefault(),h.isOpen&&a.stopPropagation(),h.close()):40!==a.which||h.isOpen||(h.isOpen=!0)},h.$watch("isOpen",function(a){a?(h.$broadcast("datepicker.focus"),h.position=q?d.offset(i):d.position(i),h.position.top=h.position.top+i.prop("offsetHeight"),c.bind("click",v)):c.unbind("click",v)}),h.select=function(a){if("today"===a){var b=new Date;angular.isDate(h.date)?(a=new Date(h.date),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}h.dateSelection(a)},h.close=function(){h.isOpen=!1,i[0].focus()};var x=a(s)(h);s.remove(),q?c.find("body").append(x):i.after(x),h.$on("$destroy",function(){x.remove(),i.unbind("keydown",w),c.unbind("click",v)})}}}]).directive("datepickerPopupWrap",function(){return{restrict:"EA",replace:!0,transclude:!0,templateUrl:"template/datepicker/popup.html",link:function(a,b){b.bind("click",function(a){a.preventDefault(),a.stopPropagation()})}}}),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("dropdownConfig",{openClass:"open"}).service("dropdownService",["$document","$rootScope",function(a,b){var c=null;this.open=function(b){c||(a.bind("click",d),a.bind("keydown",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b){c===b&&(c=null,a.unbind("click",d),a.unbind("keydown",e))};var d=function(a){if(c&&(!a||"disabled"!==c.getAutoClose())){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getElement();a&&"outsideClick"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which&&(c.focusToggleElement(),d())}}]).controller("DropdownController",["$scope","$attrs","$parse","dropdownConfig","dropdownService","$animate","$position","$document",function(a,b,c,d,e,f,g,h){var i,j=this,k=a.$new(),l=d.openClass,m=angular.noop,n=b.onToggle?c(b.onToggle):angular.noop,o=!1;this.init=function(d){j.$element=d,b.isOpen&&(i=c(b.isOpen),m=i.assign,a.$watch(i,function(a){k.isOpen=!!a})),o=angular.isDefined(b.dropdownAppendToBody),o&&j.dropdownMenu&&(h.find("body").append(j.dropdownMenu),d.on("$destroy",function(){j.dropdownMenu.remove()}))},this.toggle=function(a){return k.isOpen=arguments.length?!!a:!k.isOpen},this.isOpen=function(){return k.isOpen},k.getToggleElement=function(){return j.toggleElement},k.getAutoClose=function(){return b.autoClose||"always"},k.getElement=function(){return j.$element},k.focusToggleElement=function(){j.toggleElement&&j.toggleElement[0].focus()},k.$watch("isOpen",function(b,c){if(o&&j.dropdownMenu){var d=g.positionElements(j.$element,j.dropdownMenu,"bottom-left",!0);j.dropdownMenu.css({top:d.top+"px",left:d.left+"px",display:b?"block":"none"})}f[b?"addClass":"removeClass"](j.$element,l),b?(k.focusToggleElement(),e.open(k)):e.close(k),m(a,b),angular.isDefined(b)&&b!==c&&n(a,{open:!!b})}),a.$on("$locationChangeSuccess",function(){k.isOpen=!1}),a.$on("$destroy",function(){k.$destroy()})}]).directive("dropdown",function(){return{controller:"DropdownController",link:function(a,b,c,d){d.init(b)}}}).directive("dropdownMenu",function(){return{restrict:"AC",require:"?^dropdown",link:function(a,b,c,d){d&&(d.dropdownMenu=b)}}}).directive("dropdownToggle",function(){return{require:"?^dropdown",link:function(a,b,c,d){if(d){d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.modal",[]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c0),i()})}function i(){if(l&&-1==g()){var a=m;j(l,m,function(){a=null}),l=void 0,m=void 0}}function j(c,d,f){function g(){g.done||(g.done=!0,c.remove(),d.$destroy(),f&&f())}d.animate=!1,c.attr("modal-animation")&&a.enabled()?c.one("$animate:close",function(){e.$evalAsync(g)}):b(g)}function k(a,b,c){return!a.value.modalScope.$broadcast("modal.closing",b,c).defaultPrevented}var l,m,n="modal-open",o=f.createNew(),p={};return e.$watch(g,function(a){m&&(m.index=a)}),c.bind("keydown",function(a){var b;27===a.which&&(b=o.top(),b&&b.value.keyboard&&(a.preventDefault(),e.$apply(function(){p.dismiss(b.key,"escape key press")})))}),p.open=function(a,b){var f=c[0].activeElement;o.add(a,{deferred:b.deferred,renderDeferred:b.renderDeferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard});var h=c.find("body").eq(0),i=g();if(i>=0&&!l){m=e.$new(!0),m.index=i;var j=angular.element('
    ');j.attr("backdrop-class",b.backdropClass),b.animation&&j.attr("modal-animation","true"),l=d(j)(m),h.append(l)}var k=angular.element('
    ');k.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,size:b.size,index:o.length()-1,animate:"animate"}).html(b.content),b.animation&&k.attr("modal-animation","true");var p=d(k)(b.scope);o.top().value.modalDomEl=p,o.top().value.modalOpener=f,h.append(p),h.addClass(n)},p.close=function(a,b){var c=o.get(a);return c&&k(c,b,!0)?(c.value.deferred.resolve(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismiss=function(a,b){var c=o.get(a);return c&&k(c,b,!1)?(c.value.deferred.reject(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},p.getTop=function(){return o.top()},p.modalRendered=function(a){var b=o.get(a);b&&b.value.renderDeferred.resolve()},p}]).provider("$modal",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$templateRequest","$controller","$modalStack",function(b,c,d,e,f,g){function h(a){return a.template?d.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}function i(a){var c=[];return angular.forEach(a,function(a){(angular.isFunction(a)||angular.isArray(a))&&c.push(d.when(b.invoke(a)))}),c}var j={};return j.open=function(b){var e=d.defer(),j=d.defer(),k=d.defer(),l={result:e.promise,opened:j.promise,rendered:k.promise,close:function(a){return g.close(l,a)},dismiss:function(a){return g.dismiss(l,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var m=d.all([h(b)].concat(i(b.resolve)));return m.then(function(a){var d=(b.scope||c).$new();d.$close=l.close,d.$dismiss=l.dismiss;var h,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=l,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),h=f(b.controller,i),b.controllerAs&&(d[b.controllerAs]=h)),g.open(l,{scope:d,deferred:e,renderDeferred:k,content:a[0],animation:b.animation,backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size})},function(a){e.reject(a)}),m.then(function(){j.resolve(!0)},function(a){j.reject(a)}),l},j}]};return a}),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop; -this.init=function(g,h){e=g,this.config=h,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=h.itemsPerPage,a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b,c){a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).constant("paginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["$parse","paginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@"},require:["pagination","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pagination.html",replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("pagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@"},require:["pager","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).provider("$tooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",animation:!0,popupDelay:0,useContentExp:!1},c={mouseenter:"mouseleave",click:"click",focus:"blur"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$position","$interpolate",function(e,f,g,h,i,j){return function(e,k,l,m){function n(a){var b=a||m.trigger||l,d=c[b]||b;return{show:b,hide:d}}m=angular.extend({},b,d,m);var o=a(e),p=j.startSymbol(),q=j.endSymbol(),r="
    ';return{restrict:"EA",compile:function(){var a=f(r);return function(b,c,d){function f(){E.isOpen?l():j()}function j(){(!D||b.$eval(d[k+"Enable"]))&&(s(),E.popupDelay?A||(A=g(o,E.popupDelay,!1),A.then(function(a){a()})):o()())}function l(){b.$apply(function(){p()})}function o(){return A=null,z&&(g.cancel(z),z=null),(m.useContentExp?E.contentExp():E.content)?(q(),x.css({top:0,left:0,display:"block"}),E.$digest(),F(),E.isOpen=!0,E.$apply(),F):angular.noop}function p(){E.isOpen=!1,g.cancel(A),A=null,E.animation?z||(z=g(r,500)):r()}function q(){x&&r(),y=E.$new(),x=a(y,function(a){B?h.find("body").append(a):c.after(a)}),y.$watch(function(){g(F,0,!1)}),m.useContentExp&&y.$watch("contentExp()",function(a){!a&&E.isOpen&&p()})}function r(){z=null,x&&(x.remove(),x=null),y&&(y.$destroy(),y=null)}function s(){t(),u(),v()}function t(){E.popupClass=d[k+"Class"]}function u(){var a=d[k+"Placement"];E.placement=angular.isDefined(a)?a:m.placement}function v(){var a=d[k+"PopupDelay"],b=parseInt(a,10);E.popupDelay=isNaN(b)?m.popupDelay:b}function w(){var a=d[k+"Trigger"];G(),C=n(a),C.show===C.hide?c.bind(C.show,f):(c.bind(C.show,j),c.bind(C.hide,l))}var x,y,z,A,B=angular.isDefined(m.appendToBody)?m.appendToBody:!1,C=n(void 0),D=angular.isDefined(d[k+"Enable"]),E=b.$new(!0),F=function(){if(x){var a=i.positionElements(c,x,E.placement,B);a.top+="px",a.left+="px",x.css(a)}};E.origScope=b,E.isOpen=!1,E.contentExp=function(){return b.$eval(d[e])},m.useContentExp||d.$observe(e,function(a){E.content=a,!a&&E.isOpen&&p()}),d.$observe("disabled",function(a){a&&E.isOpen&&p()}),d.$observe(k+"Title",function(a){E.title=a});var G=function(){c.unbind(C.show,j),c.unbind(C.hide,l)};w();var H=b.$eval(d[k+"Animation"]);E.animation=angular.isDefined(H)?!!H:m.animation;var I=b.$eval(d[k+"AppendToBody"]);B=angular.isDefined(I)?I:B,B&&b.$on("$locationChangeSuccess",function(){E.isOpen&&p()}),b.$on("$destroy",function(){g.cancel(z),g.cancel(A),G(),r(),E=null})}}}}}]}).directive("tooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit("$includeContentLoaded",b)}},function(){g===l&&(m(),e.$emit("$includeContentError",b))}),e.$emit("$includeContentRequested",b)):m()}),e.$on("$destroy",m)}}}]).directive("tooltipClasses",function(){return{restrict:"A",link:function(a,b,c){a.placement&&b.addClass(a.placement),a.popupClass&&b.addClass(a.popupClass),a.animation()&&b.addClass(c.tooltipAnimationClass)}}}).directive("tooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/tooltip/tooltip-template-popup.html"}}).directive("tooltipTemplate",["$tooltip",function(a){return a("tooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlPopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-popup.html"}}).directive("tooltipHtml",["$tooltip",function(a){return a("tooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).value("tooltipHtmlUnsafeSuppressDeprecated",!1).directive("tooltipHtmlUnsafe",["$tooltip","tooltipHtmlUnsafeSuppressDeprecated","$log",function(a,b,c){return b||c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."),a("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/popover/popover-template.html"}}).directive("popoverTemplate",["$tooltip",function(a){return a("popoverTemplate","popover","click",{useContentExp:!0})}]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("progressConfig",{animate:!0,max:100}).controller("ProgressController",["$scope","$attrs","progressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c){e||c.css({transition:"none"}),this.bars.push(b),b.$watch("value",function(c){b.percent=+(100*c/a.max).toFixed(2)}),b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)}}]).directive("progress",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{},templateUrl:"template/progressbar/progress.html"}}).directive("bar",function(){return{restrict:"EA",replace:!0,transclude:!0,require:"^progress",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b)}}}).directive("progressbar",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5,stateOn:null,stateOff:null}).controller("RatingController",["$scope","$attrs","ratingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(f)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff},a[b]);return a},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("rating",function(){return{restrict:"EA",require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("TabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length&&a.active!==!1?a.active=!0:a.active?b.select(a):a.active=!1},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("tab",["$parse","$log",function(a,b){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},compile:function(c,d,e){return function(c,d,f,g){c.$watch("active",function(a){a&&g.select(c)}),c.disabled=!1,f.disable&&c.$parent.$watch(a(f.disable),function(a){c.disabled=!!a}),f.disabled&&(b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'),c.$parent.$watch(a(f.disabled),function(a){c.disabled=!!a})),c.select=function(){c.disabled||(c.active=!0)},g.addTab(c),c.$on("$destroy",function(){g.removeTab(c)}),c.$transcludeFn=e}}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}]).directive("tabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0}).controller("TimepickerController",["$scope","$attrs","$parse","$log","$locale","timepickerConfig",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===p[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a.toString()}function j(a){k(),o.$setViewValue(new Date(n)),l(a)}function k(){o.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=n.getHours(),d=n.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:i(c),"m"!==b&&(a.minutes=i(d)),a.meridian=n.getHours()<12?p[0]:p[1]}function m(a){var b=new Date(n.getTime()+6e4*a);n.setHours(b.getHours(),b.getMinutes()),j()}var n=new Date,o={$setViewValue:angular.noop},p=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){o=c,o.$render=this.render,o.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g);var i=angular.isDefined(b.arrowkeys)?a.$parent.$eval(b.arrowkeys):f.arrowkeys;i&&this.setupArrowkeyEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var q=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){q=parseInt(a,10)});var r=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){r=parseInt(a,10)}),a.showMeridian=f.showMeridian,b.showMeridian&&a.$parent.$watch(c(b.showMeridian),function(b){if(a.showMeridian=!!b,o.$error.time){var c=g(),d=h();angular.isDefined(c)&&angular.isDefined(d)&&(n.setHours(c),j())}else l()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c){b.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply())}),c.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply())})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){o.$setViewValue(null),o.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(n.setHours(a),j("h")):d(!0)},b.bind("blur",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(n.setMinutes(a),j("m")):d(void 0,!0)},c.bind("blur",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var a=o.$viewValue;isNaN(a)?(o.$setValidity("time",!1),d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(a&&(n=a),k(),l())},a.incrementHours=function(){m(60*q)},a.decrementHours=function(){m(60*-q)},a.incrementMinutes=function(){m(r)},a.decrementMinutes=function(){m(-r)},a.toggleMeridian=function(){m(720*(n.getHours()<12?1:-1))}}]).directive("timepicker",function(){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",replace:!0,scope:{},templateUrl:"template/timepicker/timepicker.html",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.transition",[]).value("$transitionSuppressDeprecated",!1).factory("$transition",["$q","$timeout","$rootScope","$log","$transitionSuppressDeprecated",function(a,b,c,d,e){function f(a){for(var b in a)if(void 0!==h.style[b])return a[b]}e||d.warn("$transition is now deprecated. Use $animate from ngAnimate instead.");var g=function(d,e,f){f=f||{};var h=a.defer(),i=g[f.animation?"animationEndEventName":"transitionEndEventName"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(e)?d.addClass(e):angular.isFunction(e)?e(d):angular.isObject(e)&&d.css(e),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject("Transition cancelled")},h.promise},h=document.createElement("trans"),i={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},j={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return g.transitionEndEventName=f(i),g.animationEndEventName=f(j),g}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).factory("typeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$position","typeaheadParser",function(a,b,c,d,e,f,g){var h=[9,13,27,38,40];return{require:"ngModel",link:function(i,j,k,l){var m,n=i.$eval(k.typeaheadMinLength)||1,o=i.$eval(k.typeaheadWaitMs)||0,p=i.$eval(k.typeaheadEditable)!==!1,q=b(k.typeaheadLoading).assign||angular.noop,r=b(k.typeaheadOnSelect),s=k.typeaheadInputFormatter?b(k.typeaheadInputFormatter):void 0,t=k.typeaheadAppendToBody?i.$eval(k.typeaheadAppendToBody):!1,u=i.$eval(k.typeaheadFocusFirst)!==!1,v=b(k.ngModel).assign,w=g.parse(k.typeahead),x=i.$new();i.$on("$destroy",function(){x.$destroy()});var y="typeahead-"+x.$id+"-"+Math.floor(1e4*Math.random());j.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":y});var z=angular.element("
    ");z.attr({id:y,matches:"matches",active:"activeIdx",select:"select(activeIdx)",query:"query",position:"position"}),angular.isDefined(k.typeaheadTemplateUrl)&&z.attr("template-url",k.typeaheadTemplateUrl);var A=function(){x.matches=[],x.activeIdx=-1,j.attr("aria-expanded",!1)},B=function(a){return y+"-option-"+a};x.$watch("activeIdx",function(a){0>a?j.removeAttr("aria-activedescendant"):j.attr("aria-activedescendant",B(a))});var C=function(a){var b={$viewValue:a};q(i,!0),c.when(w.source(i,b)).then(function(c){var d=a===l.$viewValue;if(d&&m)if(c&&c.length>0){x.activeIdx=u?0:-1,x.matches.length=0;for(var e=0;e=n?o>0?(F(),E(a)):C(a):(q(i,!1),F(),A()),p?a:a?void l.$setValidity("editable",!1):(l.$setValidity("editable",!0),a)}),l.$formatters.push(function(a){var b,c,d={};return p||l.$setValidity("editable",!0),s?(d.$model=a,s(i,d)):(d[w.itemName]=a,b=w.viewMapper(i,d),d[w.itemName]=void 0,c=w.viewMapper(i,d),b!==c?b:a)}),x.select=function(a){var b,c,e={};e[w.itemName]=c=x.matches[a].model,b=w.modelMapper(i,e),v(i,b),l.$setValidity("editable",!0),l.$setValidity("parse",!0),r(i,{$item:c,$model:b,$label:w.viewMapper(i,e)}),A(),d(function(){j[0].focus()},0,!1)},j.bind("keydown",function(a){0!==x.matches.length&&-1!==h.indexOf(a.which)&&(-1!=x.activeIdx||13!==a.which&&9!==a.which)&&(a.preventDefault(),40===a.which?(x.activeIdx=(x.activeIdx+1)%x.matches.length,x.$digest()):38===a.which?(x.activeIdx=(x.activeIdx>0?x.activeIdx:x.matches.length)-1,x.$digest()):13===a.which||9===a.which?x.$apply(function(){x.select(x.activeIdx)}):27===a.which&&(a.stopPropagation(),A(),x.$digest()))}),j.bind("blur",function(){m=!1});var G=function(a){j[0]!==a.target&&(A(),x.$digest())};e.bind("click",G),i.$on("$destroy",function(){e.unbind("click",G),t&&H.remove(),z.remove()});var H=a(z)(x);t?e.find("body").append(H):j.after(H)}}}]).directive("typeaheadPopup",function(){return{restrict:"EA",scope:{matches:"=",query:"=",active:"=",position:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("typeaheadMatch",["$templateRequest","$compile","$parse",function(a,b,c){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||"template/typeahead/typeahead-match.html";a(g).then(function(a){b(a.trim())(d,function(a){e.replaceWith(a)})})}}}]).filter("typeaheadHighlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c?(""+b).replace(new RegExp(a(c),"gi"),"$&"):b}}),!angular.$$csp()&&angular.element(document).find("head").prepend(''); \ No newline at end of file +angular.module("ui.bootstrap", ["ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.dateparser", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdown", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.transition", "ui.bootstrap.typeahead"]), angular.module("ui.bootstrap.collapse", []).directive("collapse", ["$animate", function (a) { + return { + link: function (b, c, d) { + function e() { + c.removeClass("collapse").addClass("collapsing"), a.addClass(c, "in", {to: {height: c[0].scrollHeight + "px"}}).then(f) + } + + function f() { + c.removeClass("collapsing"), c.css({height: "auto"}) + } + + function g() { + c.css({height: c[0].scrollHeight + "px"}).removeClass("collapse").addClass("collapsing"), a.removeClass(c, "in", {to: {height: "0"}}).then(h) + } + + function h() { + c.css({height: "0"}), c.removeClass("collapsing"), c.addClass("collapse") + } + + b.$watch(d.collapse, function (a) { + a ? g() : e() + }) + } + } +}]), angular.module("ui.bootstrap.accordion", ["ui.bootstrap.collapse"]).constant("accordionConfig", {closeOthers: !0}).controller("AccordionController", ["$scope", "$attrs", "accordionConfig", function (a, b, c) { + this.groups = [], this.closeOthers = function (d) { + var e = angular.isDefined(b.closeOthers) ? a.$eval(b.closeOthers) : c.closeOthers; + e && angular.forEach(this.groups, function (a) { + a !== d && (a.isOpen = !1) + }) + }, this.addGroup = function (a) { + var b = this; + this.groups.push(a), a.$on("$destroy", function () { + b.removeGroup(a) + }) + }, this.removeGroup = function (a) { + var b = this.groups.indexOf(a); + -1 !== b && this.groups.splice(b, 1) + } +}]).directive("accordion", function () { + return { + restrict: "EA", + controller: "AccordionController", + transclude: !0, + replace: !1, + templateUrl: "template/accordion/accordion.html" + } +}).directive("accordionGroup", function () { + return { + require: "^accordion", + restrict: "EA", + transclude: !0, + replace: !0, + templateUrl: "template/accordion/accordion-group.html", + scope: {heading: "@", isOpen: "=?", isDisabled: "=?"}, + controller: function () { + this.setHeading = function (a) { + this.heading = a + } + }, + link: function (a, b, c, d) { + d.addGroup(a), a.$watch("isOpen", function (b) { + b && d.closeOthers(a) + }), a.toggleOpen = function () { + a.isDisabled || (a.isOpen = !a.isOpen) + } + } + } +}).directive("accordionHeading", function () { + return { + restrict: "EA", + transclude: !0, + template: "", + replace: !0, + require: "^accordionGroup", + link: function (a, b, c, d, e) { + d.setHeading(e(a, angular.noop)) + } + } +}).directive("accordionTransclude", function () { + return { + require: "^accordionGroup", link: function (a, b, c, d) { + a.$watch(function () { + return d[c.accordionTransclude] + }, function (a) { + a && (b.html(""), b.append(a)) + }) + } + } +}), angular.module("ui.bootstrap.alert", []).controller("AlertController", ["$scope", "$attrs", function (a, b) { + a.closeable = "close" in b, this.close = a.close +}]).directive("alert", function () { + return { + restrict: "EA", + controller: "AlertController", + templateUrl: "template/alert/alert.html", + transclude: !0, + replace: !0, + scope: {type: "@", close: "&"} + } +}).directive("dismissOnTimeout", ["$timeout", function (a) { + return { + require: "alert", link: function (b, c, d, e) { + a(function () { + e.close() + }, parseInt(d.dismissOnTimeout, 10)) + } + } +}]), angular.module("ui.bootstrap.bindHtml", []).directive("bindHtmlUnsafe", function () { + return function (a, b, c) { + b.addClass("ng-binding").data("$binding", c.bindHtmlUnsafe), a.$watch(c.bindHtmlUnsafe, function (a) { + b.html(a || "") + }) + } +}), angular.module("ui.bootstrap.buttons", []).constant("buttonConfig", { + activeClass: "active", + toggleEvent: "click" +}).controller("ButtonsController", ["buttonConfig", function (a) { + this.activeClass = a.activeClass || "active", this.toggleEvent = a.toggleEvent || "click" +}]).directive("btnRadio", function () { + return { + require: ["btnRadio", "ngModel"], controller: "ButtonsController", link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f.$render = function () { + b.toggleClass(e.activeClass, angular.equals(f.$modelValue, a.$eval(c.btnRadio))) + }, b.bind(e.toggleEvent, function () { + var d = b.hasClass(e.activeClass); + (!d || angular.isDefined(c.uncheckable)) && a.$apply(function () { + f.$setViewValue(d ? null : a.$eval(c.btnRadio)), f.$render() + }) + }) + } + } +}).directive("btnCheckbox", function () { + return { + require: ["btnCheckbox", "ngModel"], controller: "ButtonsController", link: function (a, b, c, d) { + function e() { + return g(c.btnCheckboxTrue, !0) + } + + function f() { + return g(c.btnCheckboxFalse, !1) + } + + function g(b, c) { + var d = a.$eval(b); + return angular.isDefined(d) ? d : c + } + + var h = d[0], i = d[1]; + i.$render = function () { + b.toggleClass(h.activeClass, angular.equals(i.$modelValue, e())) + }, b.bind(h.toggleEvent, function () { + a.$apply(function () { + i.$setViewValue(b.hasClass(h.activeClass) ? f() : e()), i.$render() + }) + }) + } + } +}), angular.module("ui.bootstrap.carousel", []).controller("CarouselController", ["$scope", "$interval", "$animate", function (a, b, c) { + function d(a) { + if (angular.isUndefined(k[a].index))return k[a]; + { + var b; + k.length + } + for (b = 0; b < k.length; ++b)if (k[b].index == a)return k[b] + } + + function e() { + f(); + var c = +a.interval; + !isNaN(c) && c > 0 && (h = b(g, c)) + } + + function f() { + h && (b.cancel(h), h = null) + } + + function g() { + var b = +a.interval; + i && !isNaN(b) && b > 0 ? a.next() : a.pause() + } + + var h, i, j = this, k = j.slides = a.slides = [], l = -1; + j.currentSlide = null; + var m = !1; + j.select = a.select = function (b, d) { + function f() { + m || (angular.extend(b, {direction: d, active: !0}), angular.extend(j.currentSlide || {}, { + direction: d, + active: !1 + }), c.enabled() && !a.noTransition && b.$element && (a.$currentTransition = !0, b.$element.one("$animate:close", function () { + a.$currentTransition = null + })), j.currentSlide = b, l = g, e()) + } + + var g = j.indexOfSlide(b); + void 0 === d && (d = g > j.getCurrentIndex() ? "next" : "prev"), b && b !== j.currentSlide && f() + }, a.$on("$destroy", function () { + m = !0 + }), j.getCurrentIndex = function () { + return j.currentSlide && angular.isDefined(j.currentSlide.index) ? +j.currentSlide.index : l + }, j.indexOfSlide = function (a) { + return angular.isDefined(a.index) ? +a.index : k.indexOf(a) + }, a.next = function () { + var b = (j.getCurrentIndex() + 1) % k.length; + return a.$currentTransition ? void 0 : j.select(d(b), "next") + }, a.prev = function () { + var b = j.getCurrentIndex() - 1 < 0 ? k.length - 1 : j.getCurrentIndex() - 1; + return a.$currentTransition ? void 0 : j.select(d(b), "prev") + }, a.isActive = function (a) { + return j.currentSlide === a + }, a.$watch("interval", e), a.$on("$destroy", f), a.play = function () { + i || (i = !0, e()) + }, a.pause = function () { + a.noPause || (i = !1, f()) + }, j.addSlide = function (b, c) { + b.$element = c, k.push(b), 1 === k.length || b.active ? (j.select(k[k.length - 1]), 1 == k.length && a.play()) : b.active = !1 + }, j.removeSlide = function (a) { + angular.isDefined(a.index) && k.sort(function (a, b) { + return +a.index > +b.index + }); + var b = k.indexOf(a); + k.splice(b, 1), k.length > 0 && a.active ? j.select(b >= k.length ? k[b - 1] : k[b]) : l > b && l-- + } +}]).directive("carousel", [function () { + return { + restrict: "EA", + transclude: !0, + replace: !0, + controller: "CarouselController", + require: "carousel", + templateUrl: "template/carousel/carousel.html", + scope: {interval: "=", noTransition: "=", noPause: "="} + } +}]).directive("slide", function () { + return { + require: "^carousel", + restrict: "EA", + transclude: !0, + replace: !0, + templateUrl: "template/carousel/slide.html", + scope: {active: "=?", index: "=?"}, + link: function (a, b, c, d) { + d.addSlide(a, b), a.$on("$destroy", function () { + d.removeSlide(a) + }), a.$watch("active", function (b) { + b && d.select(a) + }) + } + } +}).animation(".item", ["$animate", function (a) { + return { + beforeAddClass: function (b, c, d) { + if ("active" == c && b.parent() && !b.parent().scope().noTransition) { + var e = !1, f = b.isolateScope().direction, g = "next" == f ? "left" : "right"; + return b.addClass(f), a.addClass(b, g).then(function () { + e || b.removeClass(g + " " + f), d() + }), function () { + e = !0 + } + } + d() + }, beforeRemoveClass: function (b, c, d) { + if ("active" == c && b.parent() && !b.parent().scope().noTransition) { + var e = !1, f = b.isolateScope().direction, g = "next" == f ? "left" : "right"; + return a.addClass(b, g).then(function () { + e || b.removeClass(g), d() + }), function () { + e = !0 + } + } + d() + } + } +}]), angular.module("ui.bootstrap.dateparser", []).service("dateParser", ["$locale", "orderByFilter", function (a, b) { + function c(a) { + var c = [], d = a.split(""); + return angular.forEach(f, function (b, e) { + var f = a.indexOf(e); + if (f > -1) { + a = a.split(""), d[f] = "(" + b.regex + ")", a[f] = "$"; + for (var g = f + 1, h = f + e.length; h > g; g++)d[g] = "", a[g] = "$"; + a = a.join(""), c.push({index: f, apply: b.apply}) + } + }), {regex: new RegExp("^" + d.join("") + "$"), map: b(c, "index")} + } + + function d(a, b, c) { + return 1 > c ? !1 : 1 === b && c > 28 ? 29 === c && (a % 4 === 0 && a % 100 !== 0 || a % 400 === 0) : 3 === b || 5 === b || 8 === b || 10 === b ? 31 > c : !0 + } + + var e = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + this.parsers = {}; + var f = { + yyyy: { + regex: "\\d{4}", apply: function (a) { + this.year = +a + } + }, + yy: { + regex: "\\d{2}", apply: function (a) { + this.year = +a + 2e3 + } + }, + y: { + regex: "\\d{1,4}", apply: function (a) { + this.year = +a + } + }, + MMMM: { + regex: a.DATETIME_FORMATS.MONTH.join("|"), apply: function (b) { + this.month = a.DATETIME_FORMATS.MONTH.indexOf(b) + } + }, + MMM: { + regex: a.DATETIME_FORMATS.SHORTMONTH.join("|"), apply: function (b) { + this.month = a.DATETIME_FORMATS.SHORTMONTH.indexOf(b) + } + }, + MM: { + regex: "0[1-9]|1[0-2]", apply: function (a) { + this.month = a - 1 + } + }, + M: { + regex: "[1-9]|1[0-2]", apply: function (a) { + this.month = a - 1 + } + }, + dd: { + regex: "[0-2][0-9]{1}|3[0-1]{1}", apply: function (a) { + this.date = +a + } + }, + d: { + regex: "[1-2]?[0-9]{1}|3[0-1]{1}", apply: function (a) { + this.date = +a + } + }, + EEEE: {regex: a.DATETIME_FORMATS.DAY.join("|")}, + EEE: {regex: a.DATETIME_FORMATS.SHORTDAY.join("|")}, + HH: { + regex: "(?:0|1)[0-9]|2[0-3]", apply: function (a) { + this.hours = +a + } + }, + H: { + regex: "1?[0-9]|2[0-3]", apply: function (a) { + this.hours = +a + } + }, + mm: { + regex: "[0-5][0-9]", apply: function (a) { + this.minutes = +a + } + }, + m: { + regex: "[0-9]|[1-5][0-9]", apply: function (a) { + this.minutes = +a + } + }, + sss: { + regex: "[0-9][0-9][0-9]", apply: function (a) { + this.milliseconds = +a + } + }, + ss: { + regex: "[0-5][0-9]", apply: function (a) { + this.seconds = +a + } + }, + s: { + regex: "[0-9]|[1-5][0-9]", apply: function (a) { + this.seconds = +a + } + } + }; + this.parse = function (b, f, g) { + if (!angular.isString(b) || !f)return b; + f = a.DATETIME_FORMATS[f] || f, f = f.replace(e, "\\$&"), this.parsers[f] || (this.parsers[f] = c(f)); + var h = this.parsers[f], i = h.regex, j = h.map, k = b.match(i); + if (k && k.length) { + var l, m; + l = g ? { + year: g.getFullYear(), + month: g.getMonth(), + date: g.getDate(), + hours: g.getHours(), + minutes: g.getMinutes(), + seconds: g.getSeconds(), + milliseconds: g.getMilliseconds() + } : {year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0}; + for (var n = 1, o = k.length; o > n; n++) { + var p = j[n - 1]; + p.apply && p.apply.call(l, k[n]) + } + return d(l.year, l.month, l.date) && (m = new Date(l.year, l.month, l.date, l.hours, l.minutes, l.seconds, l.milliseconds || 0)), m + } + } +}]), angular.module("ui.bootstrap.position", []).factory("$position", ["$document", "$window", function (a, b) { + function c(a, c) { + return a.currentStyle ? a.currentStyle[c] : b.getComputedStyle ? b.getComputedStyle(a)[c] : a.style[c] + } + + function d(a) { + return "static" === (c(a, "position") || "static") + } + + var e = function (b) { + for (var c = a[0], e = b.offsetParent || c; e && e !== c && d(e);)e = e.offsetParent; + return e || c + }; + return { + position: function (b) { + var c = this.offset(b), d = {top: 0, left: 0}, f = e(b[0]); + f != a[0] && (d = this.offset(angular.element(f)), d.top += f.clientTop - f.scrollTop, d.left += f.clientLeft - f.scrollLeft); + var g = b[0].getBoundingClientRect(); + return { + width: g.width || b.prop("offsetWidth"), + height: g.height || b.prop("offsetHeight"), + top: c.top - d.top, + left: c.left - d.left + } + }, offset: function (c) { + var d = c[0].getBoundingClientRect(); + return { + width: d.width || c.prop("offsetWidth"), + height: d.height || c.prop("offsetHeight"), + top: d.top + (b.pageYOffset || a[0].documentElement.scrollTop), + left: d.left + (b.pageXOffset || a[0].documentElement.scrollLeft) + } + }, positionElements: function (a, b, c, d) { + var e, f, g, h, i = c.split("-"), j = i[0], k = i[1] || "center"; + e = d ? this.offset(a) : this.position(a), f = b.prop("offsetWidth"), g = b.prop("offsetHeight"); + var l = { + center: function () { + return e.left + e.width / 2 - f / 2 + }, left: function () { + return e.left + }, right: function () { + return e.left + e.width + } + }, m = { + center: function () { + return e.top + e.height / 2 - g / 2 + }, top: function () { + return e.top + }, bottom: function () { + return e.top + e.height + } + }; + switch (j) { + case"right": + h = {top: m[k](), left: l[j]()}; + break; + case"left": + h = {top: m[k](), left: e.left - f}; + break; + case"bottom": + h = {top: m[j](), left: l[k]()}; + break; + default: + h = {top: e.top - g, left: l[k]()} + } + return h + } + } +}]), angular.module("ui.bootstrap.datepicker", ["ui.bootstrap.dateparser", "ui.bootstrap.position"]).constant("datepickerConfig", { + formatDay: "dd", + formatMonth: "MMMM", + formatYear: "yyyy", + formatDayHeader: "EEE", + formatDayTitle: "MMMM yyyy", + formatMonthTitle: "yyyy", + datepickerMode: "day", + minMode: "day", + maxMode: "year", + showWeeks: !0, + startingDay: 0, + yearRange: 20, + minDate: null, + maxDate: null, + shortcutPropagation: !1 +}).controller("DatepickerController", ["$scope", "$attrs", "$parse", "$interpolate", "$timeout", "$log", "dateFilter", "datepickerConfig", function (a, b, c, d, e, f, g, h) { + var i = this, j = {$setViewValue: angular.noop}; + this.modes = ["day", "month", "year"], angular.forEach(["formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "minMode", "maxMode", "showWeeks", "startingDay", "yearRange", "shortcutPropagation"], function (c, e) { + i[c] = angular.isDefined(b[c]) ? 8 > e ? d(b[c])(a.$parent) : a.$parent.$eval(b[c]) : h[c] + }), angular.forEach(["minDate", "maxDate"], function (d) { + b[d] ? a.$parent.$watch(c(b[d]), function (a) { + i[d] = a ? new Date(a) : null, i.refreshView() + }) : i[d] = h[d] ? new Date(h[d]) : null + }), a.datepickerMode = a.datepickerMode || h.datepickerMode, a.maxMode = i.maxMode, a.uniqueId = "datepicker-" + a.$id + "-" + Math.floor(1e4 * Math.random()), angular.isDefined(b.initDate) ? (this.activeDate = a.$parent.$eval(b.initDate) || new Date, a.$parent.$watch(b.initDate, function (a) { + a && (j.$isEmpty(j.$modelValue) || j.$invalid) && (i.activeDate = a, i.refreshView()) + })) : this.activeDate = new Date, a.isActive = function (b) { + return 0 === i.compare(b.date, i.activeDate) ? (a.activeDateId = b.uid, !0) : !1 + }, this.init = function (a) { + j = a, j.$render = function () { + i.render() + } + }, this.render = function () { + if (j.$viewValue) { + var a = new Date(j.$viewValue), b = !isNaN(a); + b ? this.activeDate = a : f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'), j.$setValidity("date", b) + } + this.refreshView() + }, this.refreshView = function () { + if (this.element) { + this._refreshView(); + var a = j.$viewValue ? new Date(j.$viewValue) : null; + j.$setValidity("date-disabled", !a || this.element && !this.isDisabled(a)) + } + }, this.createDateObject = function (a, b) { + var c = j.$viewValue ? new Date(j.$viewValue) : null; + return { + date: a, + label: g(a, b), + selected: c && 0 === this.compare(a, c), + disabled: this.isDisabled(a), + current: 0 === this.compare(a, new Date), + customClass: this.customClass(a) + } + }, this.isDisabled = function (c) { + return this.minDate && this.compare(c, this.minDate) < 0 || this.maxDate && this.compare(c, this.maxDate) > 0 || b.dateDisabled && a.dateDisabled({ + date: c, + mode: a.datepickerMode + }) + }, this.customClass = function (b) { + return a.customClass({date: b, mode: a.datepickerMode}) + }, this.split = function (a, b) { + for (var c = []; a.length > 0;)c.push(a.splice(0, b)); + return c + }, a.select = function (b) { + if (a.datepickerMode === i.minMode) { + var c = j.$viewValue ? new Date(j.$viewValue) : new Date(0, 0, 0, 0, 0, 0, 0); + c.setFullYear(b.getFullYear(), b.getMonth(), b.getDate()), j.$setViewValue(c), j.$render() + } else i.activeDate = b, a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) - 1] + }, a.move = function (a) { + var b = i.activeDate.getFullYear() + a * (i.step.years || 0), c = i.activeDate.getMonth() + a * (i.step.months || 0); + i.activeDate.setFullYear(b, c, 1), i.refreshView() + }, a.toggleMode = function (b) { + b = b || 1, a.datepickerMode === i.maxMode && 1 === b || a.datepickerMode === i.minMode && -1 === b || (a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) + b]) + }, a.keys = { + 13: "enter", + 32: "space", + 33: "pageup", + 34: "pagedown", + 35: "end", + 36: "home", + 37: "left", + 38: "up", + 39: "right", + 40: "down" + }; + var k = function () { + e(function () { + i.element[0].focus() + }, 0, !1) + }; + a.$on("datepicker.focus", k), a.keydown = function (b) { + var c = a.keys[b.which]; + if (c && !b.shiftKey && !b.altKey)if (b.preventDefault(), i.shortcutPropagation || b.stopPropagation(), "enter" === c || "space" === c) { + if (i.isDisabled(i.activeDate))return; + a.select(i.activeDate), k() + } else!b.ctrlKey || "up" !== c && "down" !== c ? (i.handleKeyDown(c, b), i.refreshView()) : (a.toggleMode("up" === c ? 1 : -1), k()) + } +}]).directive("datepicker", function () { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/datepicker.html", + scope: {datepickerMode: "=?", dateDisabled: "&", customClass: "&", shortcutPropagation: "&?"}, + require: ["datepicker", "?^ngModel"], + controller: "DatepickerController", + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f && e.init(f) + } + } +}).directive("daypicker", ["dateFilter", function (a) { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/day.html", + require: "^datepicker", + link: function (b, c, d, e) { + function f(a, b) { + return 1 !== b || a % 4 !== 0 || a % 100 === 0 && a % 400 !== 0 ? i[b] : 29 + } + + function g(a, b) { + var c = new Array(b), d = new Date(a), e = 0; + for (d.setHours(12); b > e;)c[e++] = new Date(d), d.setDate(d.getDate() + 1); + return c + } + + function h(a) { + var b = new Date(a); + b.setDate(b.getDate() + 4 - (b.getDay() || 7)); + var c = b.getTime(); + return b.setMonth(0), b.setDate(1), Math.floor(Math.round((c - b) / 864e5) / 7) + 1 + } + + b.showWeeks = e.showWeeks, e.step = {months: 1}, e.element = c; + var i = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + e._refreshView = function () { + var c = e.activeDate.getFullYear(), d = e.activeDate.getMonth(), f = new Date(c, d, 1), i = e.startingDay - f.getDay(), j = i > 0 ? 7 - i : -i, k = new Date(f); + j > 0 && k.setDate(-j + 1); + for (var l = g(k, 42), m = 0; 42 > m; m++)l[m] = angular.extend(e.createDateObject(l[m], e.formatDay), { + secondary: l[m].getMonth() !== d, + uid: b.uniqueId + "-" + m + }); + b.labels = new Array(7); + for (var n = 0; 7 > n; n++)b.labels[n] = { + abbr: a(l[n].date, e.formatDayHeader), + full: a(l[n].date, "EEEE") + }; + if (b.title = a(e.activeDate, e.formatDayTitle), b.rows = e.split(l, 7), b.showWeeks) { + b.weekNumbers = []; + for (var o = (11 - e.startingDay) % 7, p = b.rows.length, q = 0; p > q; q++)b.weekNumbers.push(h(b.rows[q][o].date)) + } + }, e.compare = function (a, b) { + return new Date(a.getFullYear(), a.getMonth(), a.getDate()) - new Date(b.getFullYear(), b.getMonth(), b.getDate()) + }, e.handleKeyDown = function (a) { + var b = e.activeDate.getDate(); + if ("left" === a)b -= 1; else if ("up" === a)b -= 7; else if ("right" === a)b += 1; else if ("down" === a)b += 7; else if ("pageup" === a || "pagedown" === a) { + var c = e.activeDate.getMonth() + ("pageup" === a ? -1 : 1); + e.activeDate.setMonth(c, 1), b = Math.min(f(e.activeDate.getFullYear(), e.activeDate.getMonth()), b) + } else"home" === a ? b = 1 : "end" === a && (b = f(e.activeDate.getFullYear(), e.activeDate.getMonth())); + e.activeDate.setDate(b) + }, e.refreshView() + } + } +}]).directive("monthpicker", ["dateFilter", function (a) { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/month.html", + require: "^datepicker", + link: function (b, c, d, e) { + e.step = {years: 1}, e.element = c, e._refreshView = function () { + for (var c = new Array(12), d = e.activeDate.getFullYear(), f = 0; 12 > f; f++)c[f] = angular.extend(e.createDateObject(new Date(d, f, 1), e.formatMonth), {uid: b.uniqueId + "-" + f}); + b.title = a(e.activeDate, e.formatMonthTitle), b.rows = e.split(c, 3) + }, e.compare = function (a, b) { + return new Date(a.getFullYear(), a.getMonth()) - new Date(b.getFullYear(), b.getMonth()) + }, e.handleKeyDown = function (a) { + var b = e.activeDate.getMonth(); + if ("left" === a)b -= 1; else if ("up" === a)b -= 3; else if ("right" === a)b += 1; else if ("down" === a)b += 3; else if ("pageup" === a || "pagedown" === a) { + var c = e.activeDate.getFullYear() + ("pageup" === a ? -1 : 1); + e.activeDate.setFullYear(c) + } else"home" === a ? b = 0 : "end" === a && (b = 11); + e.activeDate.setMonth(b) + }, e.refreshView() + } + } +}]).directive("yearpicker", ["dateFilter", function () { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/year.html", + require: "^datepicker", + link: function (a, b, c, d) { + function e(a) { + return parseInt((a - 1) / f, 10) * f + 1 + } + + var f = d.yearRange; + d.step = {years: f}, d.element = b, d._refreshView = function () { + for (var b = new Array(f), c = 0, g = e(d.activeDate.getFullYear()); f > c; c++)b[c] = angular.extend(d.createDateObject(new Date(g + c, 0, 1), d.formatYear), {uid: a.uniqueId + "-" + c}); + a.title = [b[0].label, b[f - 1].label].join(" - "), a.rows = d.split(b, 5) + }, d.compare = function (a, b) { + return a.getFullYear() - b.getFullYear() + }, d.handleKeyDown = function (a) { + var b = d.activeDate.getFullYear(); + "left" === a ? b -= 1 : "up" === a ? b -= 5 : "right" === a ? b += 1 : "down" === a ? b += 5 : "pageup" === a || "pagedown" === a ? b += ("pageup" === a ? -1 : 1) * d.step.years : "home" === a ? b = e(d.activeDate.getFullYear()) : "end" === a && (b = e(d.activeDate.getFullYear()) + f - 1), d.activeDate.setFullYear(b) + }, d.refreshView() + } + } +}]).constant("datepickerPopupConfig", { + datepickerPopup: "yyyy-MM-dd", + html5Types: {date: "yyyy-MM-dd", "datetime-local": "yyyy-MM-ddTHH:mm:ss.sss", month: "yyyy-MM"}, + currentText: "Today", + clearText: "Clear", + closeText: "Done", + closeOnDateSelection: !0, + appendToBody: !1, + showButtonBar: !0 +}).directive("datepickerPopup", ["$compile", "$parse", "$document", "$position", "dateFilter", "dateParser", "datepickerPopupConfig", function (a, b, c, d, e, f, g) { + return { + restrict: "EA", + require: "ngModel", + scope: {isOpen: "=?", currentText: "@", clearText: "@", closeText: "@", dateDisabled: "&", customClass: "&"}, + link: function (h, i, j, k) { + function l(a) { + return a.replace(/([A-Z])/g, function (a) { + return "-" + a.toLowerCase() + }) + } + + function m(a) { + if (angular.isNumber(a) && (a = new Date(a)), a) { + if (angular.isDate(a) && !isNaN(a))return a; + if (angular.isString(a)) { + var b = f.parse(a, o, h.date) || new Date(a); + return isNaN(b) ? void 0 : b + } + return void 0 + } + return null + } + + function n(a, b) { + var c = a || b; + if (angular.isNumber(c) && (c = new Date(c)), c) { + if (angular.isDate(c) && !isNaN(c))return !0; + if (angular.isString(c)) { + var d = f.parse(c, o) || new Date(c); + return !isNaN(d) + } + return !1 + } + return !0 + } + + var o, p = angular.isDefined(j.closeOnDateSelection) ? h.$parent.$eval(j.closeOnDateSelection) : g.closeOnDateSelection, q = angular.isDefined(j.datepickerAppendToBody) ? h.$parent.$eval(j.datepickerAppendToBody) : g.appendToBody; + h.showButtonBar = angular.isDefined(j.showButtonBar) ? h.$parent.$eval(j.showButtonBar) : g.showButtonBar, h.getText = function (a) { + return h[a + "Text"] || g[a + "Text"] + }; + var r = !1; + if (g.html5Types[j.type] ? (o = g.html5Types[j.type], r = !0) : (o = j.datepickerPopup || g.datepickerPopup, j.$observe("datepickerPopup", function (a) { + var b = a || g.datepickerPopup; + if (b !== o && (o = b, k.$modelValue = null, !o))throw new Error("datepickerPopup must have a date format specified.") + })), !o)throw new Error("datepickerPopup must have a date format specified."); + if (r && j.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats."); + var s = angular.element("
    "); + s.attr({"ng-model": "date", "ng-change": "dateSelection()"}); + var t = angular.element(s.children()[0]); + if (r && "month" == j.type && (t.attr("datepicker-mode", '"month"'), t.attr("min-mode", "month")), j.datepickerOptions) { + var u = h.$parent.$eval(j.datepickerOptions); + u.initDate && (h.initDate = u.initDate, t.attr("init-date", "initDate"), delete u.initDate), angular.forEach(u, function (a, b) { + t.attr(l(b), a) + }) + } + h.watchData = {}, angular.forEach(["minDate", "maxDate", "datepickerMode", "initDate", "shortcutPropagation"], function (a) { + if (j[a]) { + var c = b(j[a]); + if (h.$parent.$watch(c, function (b) { + h.watchData[a] = b + }), t.attr(l(a), "watchData." + a), "datepickerMode" === a) { + var d = c.assign; + h.$watch("watchData." + a, function (a, b) { + a !== b && d(h.$parent, a) + }) + } + } + }), j.dateDisabled && t.attr("date-disabled", "dateDisabled({ date: date, mode: mode })"), j.showWeeks && t.attr("show-weeks", j.showWeeks), j.customClass && t.attr("custom-class", "customClass({ date: date, mode: mode })"), r ? k.$formatters.push(function (a) { + return h.date = a, a + }) : (k.$$parserName = "date", k.$validators.date = n, k.$parsers.unshift(m), k.$formatters.push(function (a) { + return h.date = a, k.$isEmpty(a) ? a : e(a, o) + })), h.dateSelection = function (a) { + angular.isDefined(a) && (h.date = a); + var b = h.date ? e(h.date, o) : ""; + i.val(b), k.$setViewValue(b), p && (h.isOpen = !1, i[0].focus()) + }, k.$viewChangeListeners.push(function () { + h.date = f.parse(k.$viewValue, o, h.date) || new Date(k.$viewValue) + }); + var v = function (a) { + h.isOpen && a.target !== i[0] && h.$apply(function () { + h.isOpen = !1 + }) + }, w = function (a) { + h.keydown(a) + }; + i.bind("keydown", w), h.keydown = function (a) { + 27 === a.which ? (a.preventDefault(), h.isOpen && a.stopPropagation(), h.close()) : 40 !== a.which || h.isOpen || (h.isOpen = !0) + }, h.$watch("isOpen", function (a) { + a ? (h.$broadcast("datepicker.focus"), h.position = q ? d.offset(i) : d.position(i), h.position.top = h.position.top + i.prop("offsetHeight"), c.bind("click", v)) : c.unbind("click", v) + }), h.select = function (a) { + if ("today" === a) { + var b = new Date; + angular.isDate(h.date) ? (a = new Date(h.date), a.setFullYear(b.getFullYear(), b.getMonth(), b.getDate())) : a = new Date(b.setHours(0, 0, 0, 0)) + } + h.dateSelection(a) + }, h.close = function () { + h.isOpen = !1, i[0].focus() + }; + var x = a(s)(h); + s.remove(), q ? c.find("body").append(x) : i.after(x), h.$on("$destroy", function () { + x.remove(), i.unbind("keydown", w), c.unbind("click", v) + }) + } + } +}]).directive("datepickerPopupWrap", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + templateUrl: "template/datepicker/popup.html", + link: function (a, b) { + b.bind("click", function (a) { + a.preventDefault(), a.stopPropagation() + }) + } + } +}), angular.module("ui.bootstrap.dropdown", ["ui.bootstrap.position"]).constant("dropdownConfig", {openClass: "open"}).service("dropdownService", ["$document", "$rootScope", function (a, b) { + var c = null; + this.open = function (b) { + c || (a.bind("click", d), a.bind("keydown", e)), c && c !== b && (c.isOpen = !1), c = b + }, this.close = function (b) { + c === b && (c = null, a.unbind("click", d), a.unbind("keydown", e)) + }; + var d = function (a) { + if (c && (!a || "disabled" !== c.getAutoClose())) { + var d = c.getToggleElement(); + if (!(a && d && d[0].contains(a.target))) { + var e = c.getElement(); + a && "outsideClick" === c.getAutoClose() && e && e[0].contains(a.target) || (c.isOpen = !1, b.$$phase || c.$apply()) + } + } + }, e = function (a) { + 27 === a.which && (c.focusToggleElement(), d()) + } +}]).controller("DropdownController", ["$scope", "$attrs", "$parse", "dropdownConfig", "dropdownService", "$animate", "$position", "$document", function (a, b, c, d, e, f, g, h) { + var i, j = this, k = a.$new(), l = d.openClass, m = angular.noop, n = b.onToggle ? c(b.onToggle) : angular.noop, o = !1; + this.init = function (d) { + j.$element = d, b.isOpen && (i = c(b.isOpen), m = i.assign, a.$watch(i, function (a) { + k.isOpen = !!a + })), o = angular.isDefined(b.dropdownAppendToBody), o && j.dropdownMenu && (h.find("body").append(j.dropdownMenu), d.on("$destroy", function () { + j.dropdownMenu.remove() + })) + }, this.toggle = function (a) { + return k.isOpen = arguments.length ? !!a : !k.isOpen + }, this.isOpen = function () { + return k.isOpen + }, k.getToggleElement = function () { + return j.toggleElement + }, k.getAutoClose = function () { + return b.autoClose || "always" + }, k.getElement = function () { + return j.$element + }, k.focusToggleElement = function () { + j.toggleElement && j.toggleElement[0].focus() + }, k.$watch("isOpen", function (b, c) { + if (o && j.dropdownMenu) { + var d = g.positionElements(j.$element, j.dropdownMenu, "bottom-left", !0); + j.dropdownMenu.css({top: d.top + "px", left: d.left + "px", display: b ? "block" : "none"}) + } + f[b ? "addClass" : "removeClass"](j.$element, l), b ? (k.focusToggleElement(), e.open(k)) : e.close(k), m(a, b), angular.isDefined(b) && b !== c && n(a, {open: !!b}) + }), a.$on("$locationChangeSuccess", function () { + k.isOpen = !1 + }), a.$on("$destroy", function () { + k.$destroy() + }) +}]).directive("dropdown", function () { + return { + controller: "DropdownController", link: function (a, b, c, d) { + d.init(b) + } + } +}).directive("dropdownMenu", function () { + return { + restrict: "AC", require: "?^dropdown", link: function (a, b, c, d) { + d && (d.dropdownMenu = b) + } + } +}).directive("dropdownToggle", function () { + return { + require: "?^dropdown", link: function (a, b, c, d) { + if (d) { + d.toggleElement = b; + var e = function (e) { + e.preventDefault(), b.hasClass("disabled") || c.disabled || a.$apply(function () { + d.toggle() + }) + }; + b.bind("click", e), b.attr({ + "aria-haspopup": !0, + "aria-expanded": !1 + }), a.$watch(d.isOpen, function (a) { + b.attr("aria-expanded", !!a) + }), a.$on("$destroy", function () { + b.unbind("click", e) + }) + } + } + } +}), angular.module("ui.bootstrap.modal", []).factory("$$stackedMap", function () { + return { + createNew: function () { + var a = []; + return { + add: function (b, c) { + a.push({key: b, value: c}) + }, get: function (b) { + for (var c = 0; c < a.length; c++)if (b == a[c].key)return a[c] + }, keys: function () { + for (var b = [], c = 0; c < a.length; c++)b.push(a[c].key); + return b + }, top: function () { + return a[a.length - 1] + }, remove: function (b) { + for (var c = -1, d = 0; d < a.length; d++)if (b == a[d].key) { + c = d; + break + } + return a.splice(c, 1)[0] + }, removeTop: function () { + return a.splice(a.length - 1, 1)[0] + }, length: function () { + return a.length + } + } + } + } +}).directive("modalBackdrop", ["$timeout", function (a) { + function b(b) { + b.animate = !1, a(function () { + b.animate = !0 + }) + } + + return { + restrict: "EA", replace: !0, templateUrl: "template/modal/backdrop.html", compile: function (a, c) { + return a.addClass(c.backdropClass), b + } + } +}]).directive("modalWindow", ["$modalStack", "$q", function (a, b) { + return { + restrict: "EA", + scope: {index: "@", animate: "="}, + replace: !0, + transclude: !0, + templateUrl: function (a, b) { + return b.templateUrl || "template/modal/window.html" + }, + link: function (c, d, e) { + d.addClass(e.windowClass || ""), c.size = e.size, c.close = function (b) { + var c = a.getTop(); + c && c.value.backdrop && "static" != c.value.backdrop && b.target === b.currentTarget && (b.preventDefault(), b.stopPropagation(), a.dismiss(c.key, "backdrop click")) + }, c.$isRendered = !0; + var f = b.defer(); + e.$observe("modalRender", function (a) { + "true" == a && f.resolve() + }), f.promise.then(function () { + c.animate = !0; + var b = d[0].querySelectorAll("[autofocus]"); + b.length ? b[0].focus() : d[0].focus(); + var e = a.getTop(); + e && a.modalRendered(e.key) + }) + } + } +}]).directive("modalAnimationClass", [function () { + return { + compile: function (a, b) { + b.modalAnimation && a.addClass(b.modalAnimationClass) + } + } +}]).directive("modalTransclude", function () { + return { + link: function (a, b, c, d, e) { + e(a.$parent, function (a) { + b.empty(), b.append(a) + }) + } + } +}).factory("$modalStack", ["$animate", "$timeout", "$document", "$compile", "$rootScope", "$$stackedMap", function (a, b, c, d, e, f) { + function g() { + for (var a = -1, b = o.keys(), c = 0; c < b.length; c++)o.get(b[c]).value.backdrop && (a = c); + return a + } + + function h(a) { + var b = c.find("body").eq(0), d = o.get(a).value; + o.remove(a), j(d.modalDomEl, d.modalScope, function () { + b.toggleClass(n, o.length() > 0), i() + }) + } + + function i() { + if (l && -1 == g()) { + var a = m; + j(l, m, function () { + a = null + }), l = void 0, m = void 0 + } + } + + function j(c, d, f) { + function g() { + g.done || (g.done = !0, c.remove(), d.$destroy(), f && f()) + } + + d.animate = !1, c.attr("modal-animation") && a.enabled() ? c.one("$animate:close", function () { + e.$evalAsync(g) + }) : b(g) + } + + function k(a, b, c) { + return !a.value.modalScope.$broadcast("modal.closing", b, c).defaultPrevented + } + + var l, m, n = "modal-open", o = f.createNew(), p = {}; + return e.$watch(g, function (a) { + m && (m.index = a) + }), c.bind("keydown", function (a) { + var b; + 27 === a.which && (b = o.top(), b && b.value.keyboard && (a.preventDefault(), e.$apply(function () { + p.dismiss(b.key, "escape key press") + }))) + }), p.open = function (a, b) { + var f = c[0].activeElement; + o.add(a, { + deferred: b.deferred, + renderDeferred: b.renderDeferred, + modalScope: b.scope, + backdrop: b.backdrop, + keyboard: b.keyboard + }); + var h = c.find("body").eq(0), i = g(); + if (i >= 0 && !l) { + m = e.$new(!0), m.index = i; + var j = angular.element('
    '); + j.attr("backdrop-class", b.backdropClass), b.animation && j.attr("modal-animation", "true"), l = d(j)(m), h.append(l) + } + var k = angular.element('
    '); + k.attr({ + "template-url": b.windowTemplateUrl, + "window-class": b.windowClass, + size: b.size, + index: o.length() - 1, + animate: "animate" + }).html(b.content), b.animation && k.attr("modal-animation", "true"); + var p = d(k)(b.scope); + o.top().value.modalDomEl = p, o.top().value.modalOpener = f, h.append(p), h.addClass(n) + }, p.close = function (a, b) { + var c = o.get(a); + return c && k(c, b, !0) ? (c.value.deferred.resolve(b), h(a), c.value.modalOpener.focus(), !0) : !c + }, p.dismiss = function (a, b) { + var c = o.get(a); + return c && k(c, b, !1) ? (c.value.deferred.reject(b), h(a), c.value.modalOpener.focus(), !0) : !c + }, p.dismissAll = function (a) { + for (var b = this.getTop(); b && this.dismiss(b.key, a);)b = this.getTop() + }, p.getTop = function () { + return o.top() + }, p.modalRendered = function (a) { + var b = o.get(a); + b && b.value.renderDeferred.resolve() + }, p +}]).provider("$modal", function () { + var a = { + options: {animation: !0, backdrop: !0, keyboard: !0}, + $get: ["$injector", "$rootScope", "$q", "$templateRequest", "$controller", "$modalStack", function (b, c, d, e, f, g) { + function h(a) { + return a.template ? d.when(a.template) : e(angular.isFunction(a.templateUrl) ? a.templateUrl() : a.templateUrl) + } + + function i(a) { + var c = []; + return angular.forEach(a, function (a) { + (angular.isFunction(a) || angular.isArray(a)) && c.push(d.when(b.invoke(a))) + }), c + } + + var j = {}; + return j.open = function (b) { + var e = d.defer(), j = d.defer(), k = d.defer(), l = { + result: e.promise, + opened: j.promise, + rendered: k.promise, + close: function (a) { + return g.close(l, a) + }, + dismiss: function (a) { + return g.dismiss(l, a) + } + }; + if (b = angular.extend({}, a.options, b), b.resolve = b.resolve || {}, !b.template && !b.templateUrl)throw new Error("One of template or templateUrl options is required."); + var m = d.all([h(b)].concat(i(b.resolve))); + return m.then(function (a) { + var d = (b.scope || c).$new(); + d.$close = l.close, d.$dismiss = l.dismiss; + var h, i = {}, j = 1; + b.controller && (i.$scope = d, i.$modalInstance = l, angular.forEach(b.resolve, function (b, c) { + i[c] = a[j++] + }), h = f(b.controller, i), b.controllerAs && (d[b.controllerAs] = h)), g.open(l, { + scope: d, + deferred: e, + renderDeferred: k, + content: a[0], + animation: b.animation, + backdrop: b.backdrop, + keyboard: b.keyboard, + backdropClass: b.backdropClass, + windowClass: b.windowClass, + windowTemplateUrl: b.windowTemplateUrl, + size: b.size + }) + }, function (a) { + e.reject(a) + }), m.then(function () { + j.resolve(!0) + }, function (a) { + j.reject(a) + }), l + }, j + }] + }; + return a +}), angular.module("ui.bootstrap.pagination", []).controller("PaginationController", ["$scope", "$attrs", "$parse", function (a, b, c) { + var d = this, e = {$setViewValue: angular.noop}, f = b.numPages ? c(b.numPages).assign : angular.noop; + this.init = function (g, h) { + e = g, this.config = h, e.$render = function () { + d.render() + }, b.itemsPerPage ? a.$parent.$watch(c(b.itemsPerPage), function (b) { + d.itemsPerPage = parseInt(b, 10), a.totalPages = d.calculateTotalPages() + }) : this.itemsPerPage = h.itemsPerPage, a.$watch("totalItems", function () { + a.totalPages = d.calculateTotalPages() + }), a.$watch("totalPages", function (b) { + f(a.$parent, b), a.page > b ? a.selectPage(b) : e.$render() + }) + }, this.calculateTotalPages = function () { + var b = this.itemsPerPage < 1 ? 1 : Math.ceil(a.totalItems / this.itemsPerPage); + return Math.max(b || 0, 1) + }, this.render = function () { + a.page = parseInt(e.$viewValue, 10) || 1 + }, a.selectPage = function (b, c) { + a.page !== b && b > 0 && b <= a.totalPages && (c && c.target && c.target.blur(), e.$setViewValue(b), e.$render()) + }, a.getText = function (b) { + return a[b + "Text"] || d.config[b + "Text"] + }, a.noPrevious = function () { + return 1 === a.page + }, a.noNext = function () { + return a.page === a.totalPages + } +}]).constant("paginationConfig", { + itemsPerPage: 10, + boundaryLinks: !1, + directionLinks: !0, + firstText: "First", + previousText: "Previous", + nextText: "Next", + lastText: "Last", + rotate: !0 +}).directive("pagination", ["$parse", "paginationConfig", function (a, b) { + return { + restrict: "EA", + scope: {totalItems: "=", firstText: "@", previousText: "@", nextText: "@", lastText: "@"}, + require: ["pagination", "?ngModel"], + controller: "PaginationController", + templateUrl: "template/pagination/pagination.html", + replace: !0, + link: function (c, d, e, f) { + function g(a, b, c) { + return {number: a, text: b, active: c} + } + + function h(a, b) { + var c = [], d = 1, e = b, f = angular.isDefined(k) && b > k; + f && (l ? (d = Math.max(a - Math.floor(k / 2), 1), e = d + k - 1, e > b && (e = b, d = e - k + 1)) : (d = (Math.ceil(a / k) - 1) * k + 1, e = Math.min(d + k - 1, b))); + for (var h = d; e >= h; h++) { + var i = g(h, h, h === a); + c.push(i) + } + if (f && !l) { + if (d > 1) { + var j = g(d - 1, "...", !1); + c.unshift(j) + } + if (b > e) { + var m = g(e + 1, "...", !1); + c.push(m) + } + } + return c + } + + var i = f[0], j = f[1]; + if (j) { + var k = angular.isDefined(e.maxSize) ? c.$parent.$eval(e.maxSize) : b.maxSize, l = angular.isDefined(e.rotate) ? c.$parent.$eval(e.rotate) : b.rotate; + c.boundaryLinks = angular.isDefined(e.boundaryLinks) ? c.$parent.$eval(e.boundaryLinks) : b.boundaryLinks, c.directionLinks = angular.isDefined(e.directionLinks) ? c.$parent.$eval(e.directionLinks) : b.directionLinks, i.init(j, b), e.maxSize && c.$parent.$watch(a(e.maxSize), function (a) { + k = parseInt(a, 10), i.render() + }); + var m = i.render; + i.render = function () { + m(), c.page > 0 && c.page <= c.totalPages && (c.pages = h(c.page, c.totalPages)) + } + } + } + } +}]).constant("pagerConfig", { + itemsPerPage: 10, + previousText: "« Previous", + nextText: "Next »", + align: !0 +}).directive("pager", ["pagerConfig", function (a) { + return { + restrict: "EA", + scope: {totalItems: "=", previousText: "@", nextText: "@"}, + require: ["pager", "?ngModel"], + controller: "PaginationController", + templateUrl: "template/pagination/pager.html", + replace: !0, + link: function (b, c, d, e) { + var f = e[0], g = e[1]; + g && (b.align = angular.isDefined(d.align) ? b.$parent.$eval(d.align) : a.align, f.init(g, a)) + } + } +}]), angular.module("ui.bootstrap.tooltip", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).provider("$tooltip", function () { + function a(a) { + var b = /[A-Z]/g, c = "-"; + return a.replace(b, function (a, b) { + return (b ? c : "") + a.toLowerCase() + }) + } + + var b = {placement: "top", animation: !0, popupDelay: 0, useContentExp: !1}, c = { + mouseenter: "mouseleave", + click: "click", + focus: "blur" + }, d = {}; + this.options = function (a) { + angular.extend(d, a) + }, this.setTriggers = function (a) { + angular.extend(c, a) + }, this.$get = ["$window", "$compile", "$timeout", "$document", "$position", "$interpolate", function (e, f, g, h, i, j) { + return function (e, k, l, m) { + function n(a) { + var b = a || m.trigger || l, d = c[b] || b; + return {show: b, hide: d} + } + + m = angular.extend({}, b, d, m); + var o = a(e), p = j.startSymbol(), q = j.endSymbol(), r = "
    '; + return { + restrict: "EA", compile: function () { + var a = f(r); + return function (b, c, d) { + function f() { + E.isOpen ? l() : j() + } + + function j() { + (!D || b.$eval(d[k + "Enable"])) && (s(), E.popupDelay ? A || (A = g(o, E.popupDelay, !1), A.then(function (a) { + a() + })) : o()()) + } + + function l() { + b.$apply(function () { + p() + }) + } + + function o() { + return A = null, z && (g.cancel(z), z = null), (m.useContentExp ? E.contentExp() : E.content) ? (q(), x.css({ + top: 0, + left: 0, + display: "block" + }), E.$digest(), F(), E.isOpen = !0, E.$apply(), F) : angular.noop + } + + function p() { + E.isOpen = !1, g.cancel(A), A = null, E.animation ? z || (z = g(r, 500)) : r() + } + + function q() { + x && r(), y = E.$new(), x = a(y, function (a) { + B ? h.find("body").append(a) : c.after(a) + }), y.$watch(function () { + g(F, 0, !1) + }), m.useContentExp && y.$watch("contentExp()", function (a) { + !a && E.isOpen && p() + }) + } + + function r() { + z = null, x && (x.remove(), x = null), y && (y.$destroy(), y = null) + } + + function s() { + t(), u(), v() + } + + function t() { + E.popupClass = d[k + "Class"] + } + + function u() { + var a = d[k + "Placement"]; + E.placement = angular.isDefined(a) ? a : m.placement + } + + function v() { + var a = d[k + "PopupDelay"], b = parseInt(a, 10); + E.popupDelay = isNaN(b) ? m.popupDelay : b + } + + function w() { + var a = d[k + "Trigger"]; + G(), C = n(a), C.show === C.hide ? c.bind(C.show, f) : (c.bind(C.show, j), c.bind(C.hide, l)) + } + + var x, y, z, A, B = angular.isDefined(m.appendToBody) ? m.appendToBody : !1, C = n(void 0), D = angular.isDefined(d[k + "Enable"]), E = b.$new(!0), F = function () { + if (x) { + var a = i.positionElements(c, x, E.placement, B); + a.top += "px", a.left += "px", x.css(a) + } + }; + E.origScope = b, E.isOpen = !1, E.contentExp = function () { + return b.$eval(d[e]) + }, m.useContentExp || d.$observe(e, function (a) { + E.content = a, !a && E.isOpen && p() + }), d.$observe("disabled", function (a) { + a && E.isOpen && p() + }), d.$observe(k + "Title", function (a) { + E.title = a + }); + var G = function () { + c.unbind(C.show, j), c.unbind(C.hide, l) + }; + w(); + var H = b.$eval(d[k + "Animation"]); + E.animation = angular.isDefined(H) ? !!H : m.animation; + var I = b.$eval(d[k + "AppendToBody"]); + B = angular.isDefined(I) ? I : B, B && b.$on("$locationChangeSuccess", function () { + E.isOpen && p() + }), b.$on("$destroy", function () { + g.cancel(z), g.cancel(A), G(), r(), E = null + }) + } + } + } + } + }] +}).directive("tooltipTemplateTransclude", ["$animate", "$sce", "$compile", "$templateRequest", function (a, b, c, d) { + return { + link: function (e, f, g) { + var h, i, j, k = e.$eval(g.tooltipTemplateTranscludeScope), l = 0, m = function () { + i && (i.remove(), i = null), h && (h.$destroy(), h = null), j && (a.leave(j).then(function () { + i = null + }), i = j, j = null) + }; + e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude), function (b) { + var g = ++l; + b ? (d(b, !0).then(function (d) { + if (g === l) { + var e = k.$new(), i = d, n = c(i)(e, function (b) { + m(), a.enter(b, f) + }); + h = e, j = n, h.$emit("$includeContentLoaded", b) + } + }, function () { + g === l && (m(), e.$emit("$includeContentError", b)) + }), e.$emit("$includeContentRequested", b)) : m() + }), e.$on("$destroy", m) + } + } +}]).directive("tooltipClasses", function () { + return { + restrict: "A", link: function (a, b, c) { + a.placement && b.addClass(a.placement), a.popupClass && b.addClass(a.popupClass), a.animation() && b.addClass(c.tooltipAnimationClass) + } + } +}).directive("tooltipPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-popup.html" + } +}).directive("tooltip", ["$tooltip", function (a) { + return a("tooltip", "tooltip", "mouseenter") +}]).directive("tooltipTemplatePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {contentExp: "&", placement: "@", popupClass: "@", animation: "&", isOpen: "&", originScope: "&"}, + templateUrl: "template/tooltip/tooltip-template-popup.html" + } +}).directive("tooltipTemplate", ["$tooltip", function (a) { + return a("tooltipTemplate", "tooltip", "mouseenter", {useContentExp: !0}) +}]).directive("tooltipHtmlPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {contentExp: "&", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-html-popup.html" + } +}).directive("tooltipHtml", ["$tooltip", function (a) { + return a("tooltipHtml", "tooltip", "mouseenter", {useContentExp: !0}) +}]).directive("tooltipHtmlUnsafePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-html-unsafe-popup.html" + } +}).value("tooltipHtmlUnsafeSuppressDeprecated", !1).directive("tooltipHtmlUnsafe", ["$tooltip", "tooltipHtmlUnsafeSuppressDeprecated", "$log", function (a, b, c) { + return b || c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."), a("tooltipHtmlUnsafe", "tooltip", "mouseenter") +}]), angular.module("ui.bootstrap.popover", ["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: { + title: "@", + contentExp: "&", + placement: "@", + popupClass: "@", + animation: "&", + isOpen: "&", + originScope: "&" + }, + templateUrl: "template/popover/popover-template.html" + } +}).directive("popoverTemplate", ["$tooltip", function (a) { + return a("popoverTemplate", "popover", "click", {useContentExp: !0}) +}]).directive("popoverPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {title: "@", content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/popover/popover.html" + } +}).directive("popover", ["$tooltip", function (a) { + return a("popover", "popover", "click") +}]), angular.module("ui.bootstrap.progressbar", []).constant("progressConfig", { + animate: !0, + max: 100 +}).controller("ProgressController", ["$scope", "$attrs", "progressConfig", function (a, b, c) { + var d = this, e = angular.isDefined(b.animate) ? a.$parent.$eval(b.animate) : c.animate; + this.bars = [], a.max = angular.isDefined(a.max) ? a.max : c.max, this.addBar = function (b, c) { + e || c.css({transition: "none"}), this.bars.push(b), b.$watch("value", function (c) { + b.percent = +(100 * c / a.max).toFixed(2) + }), b.$on("$destroy", function () { + c = null, d.removeBar(b) + }) + }, this.removeBar = function (a) { + this.bars.splice(this.bars.indexOf(a), 1) + } +}]).directive("progress", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + controller: "ProgressController", + require: "progress", + scope: {}, + templateUrl: "template/progressbar/progress.html" + } +}).directive("bar", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + require: "^progress", + scope: {value: "=", max: "=?", type: "@"}, + templateUrl: "template/progressbar/bar.html", + link: function (a, b, c, d) { + d.addBar(a, b) + } + } +}).directive("progressbar", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + controller: "ProgressController", + scope: {value: "=", max: "=?", type: "@"}, + templateUrl: "template/progressbar/progressbar.html", + link: function (a, b, c, d) { + d.addBar(a, angular.element(b.children()[0])) + } + } +}), angular.module("ui.bootstrap.rating", []).constant("ratingConfig", { + max: 5, + stateOn: null, + stateOff: null +}).controller("RatingController", ["$scope", "$attrs", "ratingConfig", function (a, b, c) { + var d = {$setViewValue: angular.noop}; + this.init = function (e) { + d = e, d.$render = this.render, d.$formatters.push(function (a) { + return angular.isNumber(a) && a << 0 !== a && (a = Math.round(a)), a + }), this.stateOn = angular.isDefined(b.stateOn) ? a.$parent.$eval(b.stateOn) : c.stateOn, this.stateOff = angular.isDefined(b.stateOff) ? a.$parent.$eval(b.stateOff) : c.stateOff; + var f = angular.isDefined(b.ratingStates) ? a.$parent.$eval(b.ratingStates) : new Array(angular.isDefined(b.max) ? a.$parent.$eval(b.max) : c.max); + a.range = this.buildTemplateObjects(f) + }, this.buildTemplateObjects = function (a) { + for (var b = 0, c = a.length; c > b; b++)a[b] = angular.extend({index: b}, { + stateOn: this.stateOn, + stateOff: this.stateOff + }, a[b]); + return a + }, a.rate = function (b) { + !a.readonly && b >= 0 && b <= a.range.length && (d.$setViewValue(b), d.$render()) + }, a.enter = function (b) { + a.readonly || (a.value = b), a.onHover({value: b}) + }, a.reset = function () { + a.value = d.$viewValue, a.onLeave() + }, a.onKeydown = function (b) { + /(37|38|39|40)/.test(b.which) && (b.preventDefault(), b.stopPropagation(), a.rate(a.value + (38 === b.which || 39 === b.which ? 1 : -1))) + }, this.render = function () { + a.value = d.$viewValue + } +}]).directive("rating", function () { + return { + restrict: "EA", + require: ["rating", "ngModel"], + scope: {readonly: "=?", onHover: "&", onLeave: "&"}, + controller: "RatingController", + templateUrl: "template/rating/rating.html", + replace: !0, + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + e.init(f) + } + } +}), angular.module("ui.bootstrap.tabs", []).controller("TabsetController", ["$scope", function (a) { + var b = this, c = b.tabs = a.tabs = []; + b.select = function (a) { + angular.forEach(c, function (b) { + b.active && b !== a && (b.active = !1, b.onDeselect()) + }), a.active = !0, a.onSelect() + }, b.addTab = function (a) { + c.push(a), 1 === c.length && a.active !== !1 ? a.active = !0 : a.active ? b.select(a) : a.active = !1 + }, b.removeTab = function (a) { + var e = c.indexOf(a); + if (a.active && c.length > 1 && !d) { + var f = e == c.length - 1 ? e - 1 : e + 1; + b.select(c[f]) + } + c.splice(e, 1) + }; + var d; + a.$on("$destroy", function () { + d = !0 + }) +}]).directive("tabset", function () { + return { + restrict: "EA", + transclude: !0, + replace: !0, + scope: {type: "@"}, + controller: "TabsetController", + templateUrl: "template/tabs/tabset.html", + link: function (a, b, c) { + a.vertical = angular.isDefined(c.vertical) ? a.$parent.$eval(c.vertical) : !1, a.justified = angular.isDefined(c.justified) ? a.$parent.$eval(c.justified) : !1 + } + } +}).directive("tab", ["$parse", "$log", function (a, b) { + return { + require: "^tabset", + restrict: "EA", + replace: !0, + templateUrl: "template/tabs/tab.html", + transclude: !0, + scope: {active: "=?", heading: "@", onSelect: "&select", onDeselect: "&deselect"}, + controller: function () { + }, + compile: function (c, d, e) { + return function (c, d, f, g) { + c.$watch("active", function (a) { + a && g.select(c) + }), c.disabled = !1, f.disable && c.$parent.$watch(a(f.disable), function (a) { + c.disabled = !!a + }), f.disabled && (b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'), c.$parent.$watch(a(f.disabled), function (a) { + c.disabled = !!a + })), c.select = function () { + c.disabled || (c.active = !0) + }, g.addTab(c), c.$on("$destroy", function () { + g.removeTab(c) + }), c.$transcludeFn = e + } + } + } +}]).directive("tabHeadingTransclude", [function () { + return { + restrict: "A", require: "^tab", link: function (a, b) { + a.$watch("headingElement", function (a) { + a && (b.html(""), b.append(a)) + }) + } + } +}]).directive("tabContentTransclude", function () { + function a(a) { + return a.tagName && (a.hasAttribute("tab-heading") || a.hasAttribute("data-tab-heading") || "tab-heading" === a.tagName.toLowerCase() || "data-tab-heading" === a.tagName.toLowerCase()) + } + + return { + restrict: "A", require: "^tabset", link: function (b, c, d) { + var e = b.$eval(d.tabContentTransclude); + e.$transcludeFn(e.$parent, function (b) { + angular.forEach(b, function (b) { + a(b) ? e.headingElement = b : c.append(b) + }) + }) + } + } +}), angular.module("ui.bootstrap.timepicker", []).constant("timepickerConfig", { + hourStep: 1, + minuteStep: 1, + showMeridian: !0, + meridians: null, + readonlyInput: !1, + mousewheel: !0, + arrowkeys: !0 +}).controller("TimepickerController", ["$scope", "$attrs", "$parse", "$log", "$locale", "timepickerConfig", function (a, b, c, d, e, f) { + function g() { + var b = parseInt(a.hours, 10), c = a.showMeridian ? b > 0 && 13 > b : b >= 0 && 24 > b; + return c ? (a.showMeridian && (12 === b && (b = 0), a.meridian === p[1] && (b += 12)), b) : void 0 + } + + function h() { + var b = parseInt(a.minutes, 10); + return b >= 0 && 60 > b ? b : void 0 + } + + function i(a) { + return angular.isDefined(a) && a.toString().length < 2 ? "0" + a : a.toString() + } + + function j(a) { + k(), o.$setViewValue(new Date(n)), l(a) + } + + function k() { + o.$setValidity("time", !0), a.invalidHours = !1, a.invalidMinutes = !1 + } + + function l(b) { + var c = n.getHours(), d = n.getMinutes(); + a.showMeridian && (c = 0 === c || 12 === c ? 12 : c % 12), a.hours = "h" === b ? c : i(c), "m" !== b && (a.minutes = i(d)), a.meridian = n.getHours() < 12 ? p[0] : p[1] + } + + function m(a) { + var b = new Date(n.getTime() + 6e4 * a); + n.setHours(b.getHours(), b.getMinutes()), j() + } + + var n = new Date, o = {$setViewValue: angular.noop}, p = angular.isDefined(b.meridians) ? a.$parent.$eval(b.meridians) : f.meridians || e.DATETIME_FORMATS.AMPMS; + this.init = function (c, d) { + o = c, o.$render = this.render, o.$formatters.unshift(function (a) { + return a ? new Date(a) : null + }); + var e = d.eq(0), g = d.eq(1), h = angular.isDefined(b.mousewheel) ? a.$parent.$eval(b.mousewheel) : f.mousewheel; + h && this.setupMousewheelEvents(e, g); + var i = angular.isDefined(b.arrowkeys) ? a.$parent.$eval(b.arrowkeys) : f.arrowkeys; + i && this.setupArrowkeyEvents(e, g), a.readonlyInput = angular.isDefined(b.readonlyInput) ? a.$parent.$eval(b.readonlyInput) : f.readonlyInput, this.setupInputEvents(e, g) + }; + var q = f.hourStep; + b.hourStep && a.$parent.$watch(c(b.hourStep), function (a) { + q = parseInt(a, 10) + }); + var r = f.minuteStep; + b.minuteStep && a.$parent.$watch(c(b.minuteStep), function (a) { + r = parseInt(a, 10) + }), a.showMeridian = f.showMeridian, b.showMeridian && a.$parent.$watch(c(b.showMeridian), function (b) { + if (a.showMeridian = !!b, o.$error.time) { + var c = g(), d = h(); + angular.isDefined(c) && angular.isDefined(d) && (n.setHours(c), j()) + } else l() + }), this.setupMousewheelEvents = function (b, c) { + var d = function (a) { + a.originalEvent && (a = a.originalEvent); + var b = a.wheelDelta ? a.wheelDelta : -a.deltaY; + return a.detail || b > 0 + }; + b.bind("mousewheel wheel", function (b) { + a.$apply(d(b) ? a.incrementHours() : a.decrementHours()), b.preventDefault() + }), c.bind("mousewheel wheel", function (b) { + a.$apply(d(b) ? a.incrementMinutes() : a.decrementMinutes()), b.preventDefault() + }) + }, this.setupArrowkeyEvents = function (b, c) { + b.bind("keydown", function (b) { + 38 === b.which ? (b.preventDefault(), a.incrementHours(), a.$apply()) : 40 === b.which && (b.preventDefault(), a.decrementHours(), a.$apply()) + }), c.bind("keydown", function (b) { + 38 === b.which ? (b.preventDefault(), a.incrementMinutes(), a.$apply()) : 40 === b.which && (b.preventDefault(), a.decrementMinutes(), a.$apply()) + }) + }, this.setupInputEvents = function (b, c) { + if (a.readonlyInput)return a.updateHours = angular.noop, void(a.updateMinutes = angular.noop); + var d = function (b, c) { + o.$setViewValue(null), o.$setValidity("time", !1), angular.isDefined(b) && (a.invalidHours = b), angular.isDefined(c) && (a.invalidMinutes = c) + }; + a.updateHours = function () { + var a = g(); + angular.isDefined(a) ? (n.setHours(a), j("h")) : d(!0) + }, b.bind("blur", function () { + !a.invalidHours && a.hours < 10 && a.$apply(function () { + a.hours = i(a.hours) + }) + }), a.updateMinutes = function () { + var a = h(); + angular.isDefined(a) ? (n.setMinutes(a), j("m")) : d(void 0, !0) + }, c.bind("blur", function () { + !a.invalidMinutes && a.minutes < 10 && a.$apply(function () { + a.minutes = i(a.minutes) + }) + }) + }, this.render = function () { + var a = o.$viewValue; + isNaN(a) ? (o.$setValidity("time", !1), d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : (a && (n = a), k(), l()) + }, a.incrementHours = function () { + m(60 * q) + }, a.decrementHours = function () { + m(60 * -q) + }, a.incrementMinutes = function () { + m(r) + }, a.decrementMinutes = function () { + m(-r) + }, a.toggleMeridian = function () { + m(720 * (n.getHours() < 12 ? 1 : -1)) + } +}]).directive("timepicker", function () { + return { + restrict: "EA", + require: ["timepicker", "?^ngModel"], + controller: "TimepickerController", + replace: !0, + scope: {}, + templateUrl: "template/timepicker/timepicker.html", + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f && e.init(f, b.find("input")) + } + } +}), angular.module("ui.bootstrap.transition", []).value("$transitionSuppressDeprecated", !1).factory("$transition", ["$q", "$timeout", "$rootScope", "$log", "$transitionSuppressDeprecated", function (a, b, c, d, e) { + function f(a) { + for (var b in a)if (void 0 !== h.style[b])return a[b] + } + + e || d.warn("$transition is now deprecated. Use $animate from ngAnimate instead."); + var g = function (d, e, f) { + f = f || {}; + var h = a.defer(), i = g[f.animation ? "animationEndEventName" : "transitionEndEventName"], j = function () { + c.$apply(function () { + d.unbind(i, j), h.resolve(d) + }) + }; + return i && d.bind(i, j), b(function () { + angular.isString(e) ? d.addClass(e) : angular.isFunction(e) ? e(d) : angular.isObject(e) && d.css(e), i || h.resolve(d) + }), h.promise.cancel = function () { + i && d.unbind(i, j), h.reject("Transition cancelled") + }, h.promise + }, h = document.createElement("trans"), i = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd", + transition: "transitionend" + }, j = { + WebkitTransition: "webkitAnimationEnd", + MozTransition: "animationend", + OTransition: "oAnimationEnd", + transition: "animationend" + }; + return g.transitionEndEventName = f(i), g.animationEndEventName = f(j), g +}]), angular.module("ui.bootstrap.typeahead", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).factory("typeaheadParser", ["$parse", function (a) { + var b = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/; + return { + parse: function (c) { + var d = c.match(b); + if (!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "' + c + '".'); + return {itemName: d[3], source: a(d[4]), viewMapper: a(d[2] || d[1]), modelMapper: a(d[1])} + } + } +}]).directive("typeahead", ["$compile", "$parse", "$q", "$timeout", "$document", "$position", "typeaheadParser", function (a, b, c, d, e, f, g) { + var h = [9, 13, 27, 38, 40]; + return { + require: "ngModel", link: function (i, j, k, l) { + var m, n = i.$eval(k.typeaheadMinLength) || 1, o = i.$eval(k.typeaheadWaitMs) || 0, p = i.$eval(k.typeaheadEditable) !== !1, q = b(k.typeaheadLoading).assign || angular.noop, r = b(k.typeaheadOnSelect), s = k.typeaheadInputFormatter ? b(k.typeaheadInputFormatter) : void 0, t = k.typeaheadAppendToBody ? i.$eval(k.typeaheadAppendToBody) : !1, u = i.$eval(k.typeaheadFocusFirst) !== !1, v = b(k.ngModel).assign, w = g.parse(k.typeahead), x = i.$new(); + i.$on("$destroy", function () { + x.$destroy() + }); + var y = "typeahead-" + x.$id + "-" + Math.floor(1e4 * Math.random()); + j.attr({"aria-autocomplete": "list", "aria-expanded": !1, "aria-owns": y}); + var z = angular.element("
    "); + z.attr({ + id: y, + matches: "matches", + active: "activeIdx", + select: "select(activeIdx)", + query: "query", + position: "position" + }), angular.isDefined(k.typeaheadTemplateUrl) && z.attr("template-url", k.typeaheadTemplateUrl); + var A = function () { + x.matches = [], x.activeIdx = -1, j.attr("aria-expanded", !1) + }, B = function (a) { + return y + "-option-" + a + }; + x.$watch("activeIdx", function (a) { + 0 > a ? j.removeAttr("aria-activedescendant") : j.attr("aria-activedescendant", B(a)) + }); + var C = function (a) { + var b = {$viewValue: a}; + q(i, !0), c.when(w.source(i, b)).then(function (c) { + var d = a === l.$viewValue; + if (d && m)if (c && c.length > 0) { + x.activeIdx = u ? 0 : -1, x.matches.length = 0; + for (var e = 0; e < c.length; e++)b[w.itemName] = c[e], x.matches.push({ + id: B(e), + label: w.viewMapper(x, b), + model: c[e] + }); + x.query = a, x.position = t ? f.offset(j) : f.position(j), x.position.top = x.position.top + j.prop("offsetHeight"), j.attr("aria-expanded", !0) + } else A(); + d && q(i, !1) + }, function () { + A(), q(i, !1) + }) + }; + A(), x.query = void 0; + var D, E = function (a) { + D = d(function () { + C(a) + }, o) + }, F = function () { + D && d.cancel(D) + }; + l.$parsers.unshift(function (a) { + return m = !0, a && a.length >= n ? o > 0 ? (F(), E(a)) : C(a) : (q(i, !1), F(), A()), p ? a : a ? void l.$setValidity("editable", !1) : (l.$setValidity("editable", !0), a) + }), l.$formatters.push(function (a) { + var b, c, d = {}; + return p || l.$setValidity("editable", !0), s ? (d.$model = a, s(i, d)) : (d[w.itemName] = a, b = w.viewMapper(i, d), d[w.itemName] = void 0, c = w.viewMapper(i, d), b !== c ? b : a) + }), x.select = function (a) { + var b, c, e = {}; + e[w.itemName] = c = x.matches[a].model, b = w.modelMapper(i, e), v(i, b), l.$setValidity("editable", !0), l.$setValidity("parse", !0), r(i, { + $item: c, + $model: b, + $label: w.viewMapper(i, e) + }), A(), d(function () { + j[0].focus() + }, 0, !1) + }, j.bind("keydown", function (a) { + 0 !== x.matches.length && -1 !== h.indexOf(a.which) && (-1 != x.activeIdx || 13 !== a.which && 9 !== a.which) && (a.preventDefault(), 40 === a.which ? (x.activeIdx = (x.activeIdx + 1) % x.matches.length, x.$digest()) : 38 === a.which ? (x.activeIdx = (x.activeIdx > 0 ? x.activeIdx : x.matches.length) - 1, x.$digest()) : 13 === a.which || 9 === a.which ? x.$apply(function () { + x.select(x.activeIdx) + }) : 27 === a.which && (a.stopPropagation(), A(), x.$digest())) + }), j.bind("blur", function () { + m = !1 + }); + var G = function (a) { + j[0] !== a.target && (A(), x.$digest()) + }; + e.bind("click", G), i.$on("$destroy", function () { + e.unbind("click", G), t && H.remove(), z.remove() + }); + var H = a(z)(x); + t ? e.find("body").append(H) : j.after(H) + } + } +}]).directive("typeaheadPopup", function () { + return { + restrict: "EA", + scope: {matches: "=", query: "=", active: "=", position: "=", select: "&"}, + replace: !0, + templateUrl: "template/typeahead/typeahead-popup.html", + link: function (a, b, c) { + a.templateUrl = c.templateUrl, a.isOpen = function () { + return a.matches.length > 0 + }, a.isActive = function (b) { + return a.active == b + }, a.selectActive = function (b) { + a.active = b + }, a.selectMatch = function (b) { + a.select({activeIdx: b}) + } + } + } +}).directive("typeaheadMatch", ["$templateRequest", "$compile", "$parse", function (a, b, c) { + return { + restrict: "EA", scope: {index: "=", match: "=", query: "="}, link: function (d, e, f) { + var g = c(f.templateUrl)(d.$parent) || "template/typeahead/typeahead-match.html"; + a(g).then(function (a) { + b(a.trim())(d, function (a) { + e.replaceWith(a) + }) + }) + } + } +}]).filter("typeaheadHighlight", function () { + function a(a) { + return a.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1") + } + + return function (b, c) { + return c ? ("" + b).replace(new RegExp(a(c), "gi"), "$&") : b + } +}), !angular.$$csp() && angular.element(document).find("head").prepend(''); diff --git a/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-tpls-0.13.0.min.js b/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-tpls-0.13.0.min.js index 6d2486283..60d329bd3 100644 --- a/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-tpls-0.13.0.min.js +++ b/apollo-demo/src/main/webapp/s/scripts/ui-bootstrap-tpls-0.13.0.min.js @@ -5,6 +5,1949 @@ * Version: 0.13.0 - 2015-05-02 * License: MIT */ -angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.transition","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-popup.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/tooltip/tooltip-template-popup.html","template/popover/popover-template.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.collapse",[]).directive("collapse",["$animate",function(a){return{link:function(b,c,d){function e(){c.removeClass("collapse").addClass("collapsing"),a.addClass(c,"in",{to:{height:c[0].scrollHeight+"px"}}).then(f)}function f(){c.removeClass("collapsing"),c.css({height:"auto"})}function g(){c.css({height:c[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing"),a.removeClass(c,"in",{to:{height:"0"}}).then(h)}function h(){c.css({height:"0"}),c.removeClass("collapsing"),c.addClass("collapse")}b.$watch(d.collapse,function(a){a?g():e()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",transclude:!0,replace:!1,templateUrl:"template/accordion/accordion.html"}}).directive("accordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/accordion/accordion-group.html",scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.$watch("isOpen",function(b){b&&d.closeOthers(a)}),a.toggleOpen=function(){a.isDisabled||(a.isOpen=!a.isOpen)}}}}).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,angular.noop))}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.accordionTransclude]},function(a){a&&(b.html(""),b.append(a))})}}}),angular.module("ui.bootstrap.alert",[]).controller("AlertController",["$scope","$attrs",function(a,b){a.closeable="close"in b,this.close=a.close}]).directive("alert",function(){return{restrict:"EA",controller:"AlertController",templateUrl:"template/alert/alert.html",transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}).directive("dismissOnTimeout",["$timeout",function(a){return{require:"alert",link:function(b,c,d,e){a(function(){e.close()},parseInt(d.dismissOnTimeout,10))}}}]),angular.module("ui.bootstrap.bindHtml",[]).directive("bindHtmlUnsafe",function(){return function(a,b,c){b.addClass("ng-binding").data("$binding",c.bindHtmlUnsafe),a.$watch(c.bindHtmlUnsafe,function(a){b.html(a||"")})}}),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).controller("ButtonsController",["buttonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("btnRadio",function(){return{require:["btnRadio","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){var e=d[0],f=d[1];f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.btnRadio)))},b.bind(e.toggleEvent,function(){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.btnRadio)),f.$render()})})}}}).directive("btnCheckbox",function(){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){var d=a.$eval(b);return angular.isDefined(d)?d:c}var h=d[0],i=d[1];i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.bind(h.toggleEvent,function(){a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",[]).controller("CarouselController",["$scope","$interval","$animate",function(a,b,c){function d(a){if(angular.isUndefined(k[a].index))return k[a];{var b;k.length}for(b=0;b0&&(h=b(g,c))}function f(){h&&(b.cancel(h),h=null)}function g(){var b=+a.interval;i&&!isNaN(b)&&b>0?a.next():a.pause()}var h,i,j=this,k=j.slides=a.slides=[],l=-1;j.currentSlide=null;var m=!1;j.select=a.select=function(b,d){function f(){m||(angular.extend(b,{direction:d,active:!0}),angular.extend(j.currentSlide||{},{direction:d,active:!1}),c.enabled()&&!a.noTransition&&b.$element&&(a.$currentTransition=!0,b.$element.one("$animate:close",function(){a.$currentTransition=null})),j.currentSlide=b,l=g,e())}var g=j.indexOfSlide(b);void 0===d&&(d=g>j.getCurrentIndex()?"next":"prev"),b&&b!==j.currentSlide&&f()},a.$on("$destroy",function(){m=!0}),j.getCurrentIndex=function(){return j.currentSlide&&angular.isDefined(j.currentSlide.index)?+j.currentSlide.index:l},j.indexOfSlide=function(a){return angular.isDefined(a.index)?+a.index:k.indexOf(a)},a.next=function(){var b=(j.getCurrentIndex()+1)%k.length;return a.$currentTransition?void 0:j.select(d(b),"next")},a.prev=function(){var b=j.getCurrentIndex()-1<0?k.length-1:j.getCurrentIndex()-1;return a.$currentTransition?void 0:j.select(d(b),"prev")},a.isActive=function(a){return j.currentSlide===a},a.$watch("interval",e),a.$on("$destroy",f),a.play=function(){i||(i=!0,e())},a.pause=function(){a.noPause||(i=!1,f())},j.addSlide=function(b,c){b.$element=c,k.push(b),1===k.length||b.active?(j.select(k[k.length-1]),1==k.length&&a.play()):b.active=!1},j.removeSlide=function(a){angular.isDefined(a.index)&&k.sort(function(a,b){return+a.index>+b.index});var b=k.indexOf(a);k.splice(b,1),k.length>0&&a.active?j.select(b>=k.length?k[b-1]:k[b]):l>b&&l--}}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",require:"carousel",templateUrl:"template/carousel/carousel.html",scope:{interval:"=",noTransition:"=",noPause:"="}}}]).directive("slide",function(){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/carousel/slide.html",scope:{active:"=?",index:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}).animation(".item",["$animate",function(a){return{beforeAddClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return b.addClass(f),a.addClass(b,g).then(function(){e||b.removeClass(g+" "+f),d()}),function(){e=!0}}d()},beforeRemoveClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return a.addClass(b,g).then(function(){e||b.removeClass(g),d()}),function(){e=!0}}d()}}}]),angular.module("ui.bootstrap.dateparser",[]).service("dateParser",["$locale","orderByFilter",function(a,b){function c(a){var c=[],d=a.split("");return angular.forEach(f,function(b,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+b.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),c.push({index:f,apply:b.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:b(c,"index")}}function d(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}var e=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.parsers={};var f={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:a.DATETIME_FORMATS.MONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.MONTH.indexOf(b)}},MMM:{regex:a.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.SHORTMONTH.indexOf(b)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:a.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:a.DATETIME_FORMATS.SHORTDAY.join("|")},HH:{regex:"(?:0|1)[0-9]|2[0-3]",apply:function(a){this.hours=+a}},H:{regex:"1?[0-9]|2[0-3]",apply:function(a){this.hours=+a}},mm:{regex:"[0-5][0-9]",apply:function(a){this.minutes=+a}},m:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.minutes=+a}},sss:{regex:"[0-9][0-9][0-9]",apply:function(a){this.milliseconds=+a}},ss:{regex:"[0-5][0-9]",apply:function(a){this.seconds=+a}},s:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.seconds=+a}}};this.parse=function(b,f,g){if(!angular.isString(b)||!f)return b;f=a.DATETIME_FORMATS[f]||f,f=f.replace(e,"\\$&"),this.parsers[f]||(this.parsers[f]=c(f));var h=this.parsers[f],i=h.regex,j=h.map,k=b.match(i);if(k&&k.length){var l,m;l=g?{year:g.getFullYear(),month:g.getMonth(),date:g.getDate(),hours:g.getHours(),minutes:g.getMinutes(),seconds:g.getSeconds(),milliseconds:g.getMilliseconds()}:{year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0};for(var n=1,o=k.length;o>n;n++){var p=j[n-1];p.apply&&p.apply.call(l,k[n])}return d(l.year,l.month,l.date)&&(m=new Date(l.year,l.month,l.date,l.hours,l.minutes,l.seconds,l.milliseconds||0)),m}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).constant("datepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$timeout","$log","dateFilter","datepickerConfig",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","minMode","maxMode","showWeeks","startingDay","yearRange","shortcutPropagation"],function(c,e){i[c]=angular.isDefined(b[c])?8>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):h[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=h[d]?new Date(h[d]):null}),a.datepickerMode=a.datepickerMode||h.datepickerMode,a.maxMode=i.maxMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(j.$isEmpty(j.$modelValue)||j.$invalid)&&(i.activeDate=a,i.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$viewValue){var a=new Date(j.$viewValue),b=!isNaN(a);b?this.activeDate=a:f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'),j.$setValidity("date",b)}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$viewValue?new Date(j.$viewValue):null;j.$setValidity("date-disabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$viewValue?new Date(j.$viewValue):null;return{date:a,label:g(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$viewValue?new Date(j.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){e(function(){i.element[0].focus()},0,!1)};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),i.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]).directive("datepicker",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/datepicker.html",scope:{datepickerMode:"=?",dateDisabled:"&",customClass:"&",shortcutPropagation:"&?"},require:["datepicker","?^ngModel"],controller:"DatepickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}).directive("daypicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/day.html",require:"^datepicker",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){var c=new Array(b),d=new Date(a),e=0;for(d.setHours(12);b>e;)c[e++]=new Date(d),d.setDate(d.getDate()+1);return c}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+"-"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,"EEEE")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=(11-e.startingDay)%7,p=b.rows.length,q=0;p>q;q++)b.weekNumbers.push(h(b.rows[q][o].date))}},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},e.handleKeyDown=function(a){var b=e.activeDate.getDate();if("left"===a)b-=1;else if("up"===a)b-=7;else if("right"===a)b+=1;else if("down"===a)b+=7;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getMonth()+("pageup"===a?-1:1);e.activeDate.setMonth(c,1),b=Math.min(f(e.activeDate.getFullYear(),e.activeDate.getMonth()),b)}else"home"===a?b=1:"end"===a&&(b=f(e.activeDate.getFullYear(),e.activeDate.getMonth()));e.activeDate.setDate(b)},e.refreshView()}}}]).directive("monthpicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/month.html",require:"^datepicker",link:function(b,c,d,e){e.step={years:1},e.element=c,e._refreshView=function(){for(var c=new Array(12),d=e.activeDate.getFullYear(),f=0;12>f;f++)c[f]=angular.extend(e.createDateObject(new Date(d,f,1),e.formatMonth),{uid:b.uniqueId+"-"+f});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(c,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if("left"===a)b-=1;else if("up"===a)b-=3;else if("right"===a)b+=1;else if("down"===a)b+=3;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getFullYear()+("pageup"===a?-1:1);e.activeDate.setFullYear(c)}else"home"===a?b=0:"end"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive("yearpicker",["dateFilter",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/year.html",require:"^datepicker",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b=new Array(f),c=0,g=e(d.activeDate.getFullYear());f>c;c++)b[c]=angular.extend(d.createDateObject(new Date(g+c,0,1),d.formatYear),{uid:a.uniqueId+"-"+c});a.title=[b[0].label,b[f-1].label].join(" - "),a.rows=d.split(b,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();"left"===a?b-=1:"up"===a?b-=5:"right"===a?b+=1:"down"===a?b+=5:"pageup"===a||"pagedown"===a?b+=("pageup"===a?-1:1)*d.step.years:"home"===a?b=e(d.activeDate.getFullYear()):"end"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant("datepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0}).directive("datepickerPopup",["$compile","$parse","$document","$position","dateFilter","dateParser","datepickerPopupConfig",function(a,b,c,d,e,f,g){return{restrict:"EA",require:"ngModel",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&",customClass:"&"},link:function(h,i,j,k){function l(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function m(a){if(angular.isNumber(a)&&(a=new Date(a)),a){if(angular.isDate(a)&&!isNaN(a))return a;if(angular.isString(a)){var b=f.parse(a,o,h.date)||new Date(a);return isNaN(b)?void 0:b}return void 0}return null}function n(a,b){var c=a||b;if(angular.isNumber(c)&&(c=new Date(c)),c){if(angular.isDate(c)&&!isNaN(c))return!0;if(angular.isString(c)){var d=f.parse(c,o)||new Date(c);return!isNaN(d)}return!1}return!0}var o,p=angular.isDefined(j.closeOnDateSelection)?h.$parent.$eval(j.closeOnDateSelection):g.closeOnDateSelection,q=angular.isDefined(j.datepickerAppendToBody)?h.$parent.$eval(j.datepickerAppendToBody):g.appendToBody;h.showButtonBar=angular.isDefined(j.showButtonBar)?h.$parent.$eval(j.showButtonBar):g.showButtonBar,h.getText=function(a){return h[a+"Text"]||g[a+"Text"]};var r=!1;if(g.html5Types[j.type]?(o=g.html5Types[j.type],r=!0):(o=j.datepickerPopup||g.datepickerPopup,j.$observe("datepickerPopup",function(a){var b=a||g.datepickerPopup;if(b!==o&&(o=b,k.$modelValue=null,!o))throw new Error("datepickerPopup must have a date format specified.")})),!o)throw new Error("datepickerPopup must have a date format specified.");if(r&&j.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");var s=angular.element("
    ");s.attr({"ng-model":"date","ng-change":"dateSelection()"});var t=angular.element(s.children()[0]);if(r&&"month"==j.type&&(t.attr("datepicker-mode",'"month"'),t.attr("min-mode","month")),j.datepickerOptions){var u=h.$parent.$eval(j.datepickerOptions);u.initDate&&(h.initDate=u.initDate,t.attr("init-date","initDate"),delete u.initDate),angular.forEach(u,function(a,b){t.attr(l(b),a)})}h.watchData={},angular.forEach(["minDate","maxDate","datepickerMode","initDate","shortcutPropagation"],function(a){if(j[a]){var c=b(j[a]);if(h.$parent.$watch(c,function(b){h.watchData[a]=b}),t.attr(l(a),"watchData."+a),"datepickerMode"===a){var d=c.assign;h.$watch("watchData."+a,function(a,b){a!==b&&d(h.$parent,a)})}}}),j.dateDisabled&&t.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),j.showWeeks&&t.attr("show-weeks",j.showWeeks),j.customClass&&t.attr("custom-class","customClass({ date: date, mode: mode })"),r?k.$formatters.push(function(a){return h.date=a,a}):(k.$$parserName="date",k.$validators.date=n,k.$parsers.unshift(m),k.$formatters.push(function(a){return h.date=a,k.$isEmpty(a)?a:e(a,o)})),h.dateSelection=function(a){angular.isDefined(a)&&(h.date=a);var b=h.date?e(h.date,o):"";i.val(b),k.$setViewValue(b),p&&(h.isOpen=!1,i[0].focus())},k.$viewChangeListeners.push(function(){h.date=f.parse(k.$viewValue,o,h.date)||new Date(k.$viewValue)});var v=function(a){h.isOpen&&a.target!==i[0]&&h.$apply(function(){h.isOpen=!1})},w=function(a){h.keydown(a)};i.bind("keydown",w),h.keydown=function(a){27===a.which?(a.preventDefault(),h.isOpen&&a.stopPropagation(),h.close()):40!==a.which||h.isOpen||(h.isOpen=!0)},h.$watch("isOpen",function(a){a?(h.$broadcast("datepicker.focus"),h.position=q?d.offset(i):d.position(i),h.position.top=h.position.top+i.prop("offsetHeight"),c.bind("click",v)):c.unbind("click",v)}),h.select=function(a){if("today"===a){var b=new Date;angular.isDate(h.date)?(a=new Date(h.date),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}h.dateSelection(a)},h.close=function(){h.isOpen=!1,i[0].focus()};var x=a(s)(h);s.remove(),q?c.find("body").append(x):i.after(x),h.$on("$destroy",function(){x.remove(),i.unbind("keydown",w),c.unbind("click",v)})}}}]).directive("datepickerPopupWrap",function(){return{restrict:"EA",replace:!0,transclude:!0,templateUrl:"template/datepicker/popup.html",link:function(a,b){b.bind("click",function(a){a.preventDefault(),a.stopPropagation()})}}}),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("dropdownConfig",{openClass:"open"}).service("dropdownService",["$document","$rootScope",function(a,b){var c=null;this.open=function(b){c||(a.bind("click",d),a.bind("keydown",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b){c===b&&(c=null,a.unbind("click",d),a.unbind("keydown",e))};var d=function(a){if(c&&(!a||"disabled"!==c.getAutoClose())){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getElement();a&&"outsideClick"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which&&(c.focusToggleElement(),d())}}]).controller("DropdownController",["$scope","$attrs","$parse","dropdownConfig","dropdownService","$animate","$position","$document",function(a,b,c,d,e,f,g,h){var i,j=this,k=a.$new(),l=d.openClass,m=angular.noop,n=b.onToggle?c(b.onToggle):angular.noop,o=!1;this.init=function(d){j.$element=d,b.isOpen&&(i=c(b.isOpen),m=i.assign,a.$watch(i,function(a){k.isOpen=!!a})),o=angular.isDefined(b.dropdownAppendToBody),o&&j.dropdownMenu&&(h.find("body").append(j.dropdownMenu),d.on("$destroy",function(){j.dropdownMenu.remove()}))},this.toggle=function(a){return k.isOpen=arguments.length?!!a:!k.isOpen},this.isOpen=function(){return k.isOpen},k.getToggleElement=function(){return j.toggleElement},k.getAutoClose=function(){return b.autoClose||"always"},k.getElement=function(){return j.$element},k.focusToggleElement=function(){j.toggleElement&&j.toggleElement[0].focus()},k.$watch("isOpen",function(b,c){if(o&&j.dropdownMenu){var d=g.positionElements(j.$element,j.dropdownMenu,"bottom-left",!0);j.dropdownMenu.css({top:d.top+"px",left:d.left+"px",display:b?"block":"none"})}f[b?"addClass":"removeClass"](j.$element,l),b?(k.focusToggleElement(),e.open(k)):e.close(k),m(a,b),angular.isDefined(b)&&b!==c&&n(a,{open:!!b})}),a.$on("$locationChangeSuccess",function(){k.isOpen=!1}),a.$on("$destroy",function(){k.$destroy()})}]).directive("dropdown",function(){return{controller:"DropdownController",link:function(a,b,c,d){d.init(b)}}}).directive("dropdownMenu",function(){return{restrict:"AC",require:"?^dropdown",link:function(a,b,c,d){d&&(d.dropdownMenu=b)}}}).directive("dropdownToggle",function(){return{require:"?^dropdown",link:function(a,b,c,d){if(d){d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.modal",[]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c0),i()})}function i(){if(l&&-1==g()){var a=m;j(l,m,function(){a=null}),l=void 0,m=void 0}}function j(c,d,f){function g(){g.done||(g.done=!0,c.remove(),d.$destroy(),f&&f())}d.animate=!1,c.attr("modal-animation")&&a.enabled()?c.one("$animate:close",function(){e.$evalAsync(g)}):b(g)}function k(a,b,c){return!a.value.modalScope.$broadcast("modal.closing",b,c).defaultPrevented}var l,m,n="modal-open",o=f.createNew(),p={};return e.$watch(g,function(a){m&&(m.index=a)}),c.bind("keydown",function(a){var b;27===a.which&&(b=o.top(),b&&b.value.keyboard&&(a.preventDefault(),e.$apply(function(){p.dismiss(b.key,"escape key press")})))}),p.open=function(a,b){var f=c[0].activeElement;o.add(a,{deferred:b.deferred,renderDeferred:b.renderDeferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard});var h=c.find("body").eq(0),i=g();if(i>=0&&!l){m=e.$new(!0),m.index=i;var j=angular.element('
    ');j.attr("backdrop-class",b.backdropClass),b.animation&&j.attr("modal-animation","true"),l=d(j)(m),h.append(l)}var k=angular.element('
    ');k.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,size:b.size,index:o.length()-1,animate:"animate"}).html(b.content),b.animation&&k.attr("modal-animation","true");var p=d(k)(b.scope);o.top().value.modalDomEl=p,o.top().value.modalOpener=f,h.append(p),h.addClass(n)},p.close=function(a,b){var c=o.get(a);return c&&k(c,b,!0)?(c.value.deferred.resolve(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismiss=function(a,b){var c=o.get(a);return c&&k(c,b,!1)?(c.value.deferred.reject(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},p.getTop=function(){return o.top()},p.modalRendered=function(a){var b=o.get(a);b&&b.value.renderDeferred.resolve()},p}]).provider("$modal",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$templateRequest","$controller","$modalStack",function(b,c,d,e,f,g){function h(a){return a.template?d.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}function i(a){var c=[];return angular.forEach(a,function(a){(angular.isFunction(a)||angular.isArray(a))&&c.push(d.when(b.invoke(a))) -}),c}var j={};return j.open=function(b){var e=d.defer(),j=d.defer(),k=d.defer(),l={result:e.promise,opened:j.promise,rendered:k.promise,close:function(a){return g.close(l,a)},dismiss:function(a){return g.dismiss(l,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var m=d.all([h(b)].concat(i(b.resolve)));return m.then(function(a){var d=(b.scope||c).$new();d.$close=l.close,d.$dismiss=l.dismiss;var h,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=l,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),h=f(b.controller,i),b.controllerAs&&(d[b.controllerAs]=h)),g.open(l,{scope:d,deferred:e,renderDeferred:k,content:a[0],animation:b.animation,backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size})},function(a){e.reject(a)}),m.then(function(){j.resolve(!0)},function(a){j.reject(a)}),l},j}]};return a}),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(g,h){e=g,this.config=h,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=h.itemsPerPage,a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b,c){a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).constant("paginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["$parse","paginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@"},require:["pagination","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pagination.html",replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("pagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@"},require:["pager","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).provider("$tooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",animation:!0,popupDelay:0,useContentExp:!1},c={mouseenter:"mouseleave",click:"click",focus:"blur"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$position","$interpolate",function(e,f,g,h,i,j){return function(e,k,l,m){function n(a){var b=a||m.trigger||l,d=c[b]||b;return{show:b,hide:d}}m=angular.extend({},b,d,m);var o=a(e),p=j.startSymbol(),q=j.endSymbol(),r="
    ';return{restrict:"EA",compile:function(){var a=f(r);return function(b,c,d){function f(){E.isOpen?l():j()}function j(){(!D||b.$eval(d[k+"Enable"]))&&(s(),E.popupDelay?A||(A=g(o,E.popupDelay,!1),A.then(function(a){a()})):o()())}function l(){b.$apply(function(){p()})}function o(){return A=null,z&&(g.cancel(z),z=null),(m.useContentExp?E.contentExp():E.content)?(q(),x.css({top:0,left:0,display:"block"}),E.$digest(),F(),E.isOpen=!0,E.$apply(),F):angular.noop}function p(){E.isOpen=!1,g.cancel(A),A=null,E.animation?z||(z=g(r,500)):r()}function q(){x&&r(),y=E.$new(),x=a(y,function(a){B?h.find("body").append(a):c.after(a)}),y.$watch(function(){g(F,0,!1)}),m.useContentExp&&y.$watch("contentExp()",function(a){!a&&E.isOpen&&p()})}function r(){z=null,x&&(x.remove(),x=null),y&&(y.$destroy(),y=null)}function s(){t(),u(),v()}function t(){E.popupClass=d[k+"Class"]}function u(){var a=d[k+"Placement"];E.placement=angular.isDefined(a)?a:m.placement}function v(){var a=d[k+"PopupDelay"],b=parseInt(a,10);E.popupDelay=isNaN(b)?m.popupDelay:b}function w(){var a=d[k+"Trigger"];G(),C=n(a),C.show===C.hide?c.bind(C.show,f):(c.bind(C.show,j),c.bind(C.hide,l))}var x,y,z,A,B=angular.isDefined(m.appendToBody)?m.appendToBody:!1,C=n(void 0),D=angular.isDefined(d[k+"Enable"]),E=b.$new(!0),F=function(){if(x){var a=i.positionElements(c,x,E.placement,B);a.top+="px",a.left+="px",x.css(a)}};E.origScope=b,E.isOpen=!1,E.contentExp=function(){return b.$eval(d[e])},m.useContentExp||d.$observe(e,function(a){E.content=a,!a&&E.isOpen&&p()}),d.$observe("disabled",function(a){a&&E.isOpen&&p()}),d.$observe(k+"Title",function(a){E.title=a});var G=function(){c.unbind(C.show,j),c.unbind(C.hide,l)};w();var H=b.$eval(d[k+"Animation"]);E.animation=angular.isDefined(H)?!!H:m.animation;var I=b.$eval(d[k+"AppendToBody"]);B=angular.isDefined(I)?I:B,B&&b.$on("$locationChangeSuccess",function(){E.isOpen&&p()}),b.$on("$destroy",function(){g.cancel(z),g.cancel(A),G(),r(),E=null})}}}}}]}).directive("tooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit("$includeContentLoaded",b)}},function(){g===l&&(m(),e.$emit("$includeContentError",b))}),e.$emit("$includeContentRequested",b)):m()}),e.$on("$destroy",m)}}}]).directive("tooltipClasses",function(){return{restrict:"A",link:function(a,b,c){a.placement&&b.addClass(a.placement),a.popupClass&&b.addClass(a.popupClass),a.animation()&&b.addClass(c.tooltipAnimationClass)}}}).directive("tooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/tooltip/tooltip-template-popup.html"}}).directive("tooltipTemplate",["$tooltip",function(a){return a("tooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlPopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-popup.html"}}).directive("tooltipHtml",["$tooltip",function(a){return a("tooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).value("tooltipHtmlUnsafeSuppressDeprecated",!1).directive("tooltipHtmlUnsafe",["$tooltip","tooltipHtmlUnsafeSuppressDeprecated","$log",function(a,b,c){return b||c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."),a("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/popover/popover-template.html"}}).directive("popoverTemplate",["$tooltip",function(a){return a("popoverTemplate","popover","click",{useContentExp:!0})}]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("progressConfig",{animate:!0,max:100}).controller("ProgressController",["$scope","$attrs","progressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c){e||c.css({transition:"none"}),this.bars.push(b),b.$watch("value",function(c){b.percent=+(100*c/a.max).toFixed(2)}),b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)}}]).directive("progress",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{},templateUrl:"template/progressbar/progress.html"}}).directive("bar",function(){return{restrict:"EA",replace:!0,transclude:!0,require:"^progress",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b)}}}).directive("progressbar",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5,stateOn:null,stateOff:null}).controller("RatingController",["$scope","$attrs","ratingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(f)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff},a[b]);return a},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("rating",function(){return{restrict:"EA",require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("TabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length&&a.active!==!1?a.active=!0:a.active?b.select(a):a.active=!1},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("tab",["$parse","$log",function(a,b){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},compile:function(c,d,e){return function(c,d,f,g){c.$watch("active",function(a){a&&g.select(c)}),c.disabled=!1,f.disable&&c.$parent.$watch(a(f.disable),function(a){c.disabled=!!a}),f.disabled&&(b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'),c.$parent.$watch(a(f.disabled),function(a){c.disabled=!!a})),c.select=function(){c.disabled||(c.active=!0)},g.addTab(c),c.$on("$destroy",function(){g.removeTab(c)}),c.$transcludeFn=e}}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}]).directive("tabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0}).controller("TimepickerController",["$scope","$attrs","$parse","$log","$locale","timepickerConfig",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===p[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a.toString()}function j(a){k(),o.$setViewValue(new Date(n)),l(a)}function k(){o.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=n.getHours(),d=n.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:i(c),"m"!==b&&(a.minutes=i(d)),a.meridian=n.getHours()<12?p[0]:p[1]}function m(a){var b=new Date(n.getTime()+6e4*a);n.setHours(b.getHours(),b.getMinutes()),j()}var n=new Date,o={$setViewValue:angular.noop},p=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){o=c,o.$render=this.render,o.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g);var i=angular.isDefined(b.arrowkeys)?a.$parent.$eval(b.arrowkeys):f.arrowkeys;i&&this.setupArrowkeyEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var q=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){q=parseInt(a,10)});var r=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){r=parseInt(a,10)}),a.showMeridian=f.showMeridian,b.showMeridian&&a.$parent.$watch(c(b.showMeridian),function(b){if(a.showMeridian=!!b,o.$error.time){var c=g(),d=h();angular.isDefined(c)&&angular.isDefined(d)&&(n.setHours(c),j())}else l()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c){b.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply())}),c.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply())})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){o.$setViewValue(null),o.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(n.setHours(a),j("h")):d(!0)},b.bind("blur",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(n.setMinutes(a),j("m")):d(void 0,!0)},c.bind("blur",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var a=o.$viewValue;isNaN(a)?(o.$setValidity("time",!1),d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(a&&(n=a),k(),l())},a.incrementHours=function(){m(60*q)},a.decrementHours=function(){m(60*-q)},a.incrementMinutes=function(){m(r)},a.decrementMinutes=function(){m(-r)},a.toggleMeridian=function(){m(720*(n.getHours()<12?1:-1))}}]).directive("timepicker",function(){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",replace:!0,scope:{},templateUrl:"template/timepicker/timepicker.html",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.transition",[]).value("$transitionSuppressDeprecated",!1).factory("$transition",["$q","$timeout","$rootScope","$log","$transitionSuppressDeprecated",function(a,b,c,d,e){function f(a){for(var b in a)if(void 0!==h.style[b])return a[b]}e||d.warn("$transition is now deprecated. Use $animate from ngAnimate instead.");var g=function(d,e,f){f=f||{};var h=a.defer(),i=g[f.animation?"animationEndEventName":"transitionEndEventName"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(e)?d.addClass(e):angular.isFunction(e)?e(d):angular.isObject(e)&&d.css(e),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject("Transition cancelled")},h.promise},h=document.createElement("trans"),i={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},j={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return g.transitionEndEventName=f(i),g.animationEndEventName=f(j),g}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).factory("typeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$position","typeaheadParser",function(a,b,c,d,e,f,g){var h=[9,13,27,38,40];return{require:"ngModel",link:function(i,j,k,l){var m,n=i.$eval(k.typeaheadMinLength)||1,o=i.$eval(k.typeaheadWaitMs)||0,p=i.$eval(k.typeaheadEditable)!==!1,q=b(k.typeaheadLoading).assign||angular.noop,r=b(k.typeaheadOnSelect),s=k.typeaheadInputFormatter?b(k.typeaheadInputFormatter):void 0,t=k.typeaheadAppendToBody?i.$eval(k.typeaheadAppendToBody):!1,u=i.$eval(k.typeaheadFocusFirst)!==!1,v=b(k.ngModel).assign,w=g.parse(k.typeahead),x=i.$new();i.$on("$destroy",function(){x.$destroy()});var y="typeahead-"+x.$id+"-"+Math.floor(1e4*Math.random());j.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":y});var z=angular.element("
    ");z.attr({id:y,matches:"matches",active:"activeIdx",select:"select(activeIdx)",query:"query",position:"position"}),angular.isDefined(k.typeaheadTemplateUrl)&&z.attr("template-url",k.typeaheadTemplateUrl);var A=function(){x.matches=[],x.activeIdx=-1,j.attr("aria-expanded",!1)},B=function(a){return y+"-option-"+a};x.$watch("activeIdx",function(a){0>a?j.removeAttr("aria-activedescendant"):j.attr("aria-activedescendant",B(a))});var C=function(a){var b={$viewValue:a};q(i,!0),c.when(w.source(i,b)).then(function(c){var d=a===l.$viewValue;if(d&&m)if(c&&c.length>0){x.activeIdx=u?0:-1,x.matches.length=0;for(var e=0;e=n?o>0?(F(),E(a)):C(a):(q(i,!1),F(),A()),p?a:a?void l.$setValidity("editable",!1):(l.$setValidity("editable",!0),a)}),l.$formatters.push(function(a){var b,c,d={};return p||l.$setValidity("editable",!0),s?(d.$model=a,s(i,d)):(d[w.itemName]=a,b=w.viewMapper(i,d),d[w.itemName]=void 0,c=w.viewMapper(i,d),b!==c?b:a)}),x.select=function(a){var b,c,e={};e[w.itemName]=c=x.matches[a].model,b=w.modelMapper(i,e),v(i,b),l.$setValidity("editable",!0),l.$setValidity("parse",!0),r(i,{$item:c,$model:b,$label:w.viewMapper(i,e)}),A(),d(function(){j[0].focus()},0,!1)},j.bind("keydown",function(a){0!==x.matches.length&&-1!==h.indexOf(a.which)&&(-1!=x.activeIdx||13!==a.which&&9!==a.which)&&(a.preventDefault(),40===a.which?(x.activeIdx=(x.activeIdx+1)%x.matches.length,x.$digest()):38===a.which?(x.activeIdx=(x.activeIdx>0?x.activeIdx:x.matches.length)-1,x.$digest()):13===a.which||9===a.which?x.$apply(function(){x.select(x.activeIdx)}):27===a.which&&(a.stopPropagation(),A(),x.$digest()))}),j.bind("blur",function(){m=!1});var G=function(a){j[0]!==a.target&&(A(),x.$digest())};e.bind("click",G),i.$on("$destroy",function(){e.unbind("click",G),t&&H.remove(),z.remove()});var H=a(z)(x);t?e.find("body").append(H):j.after(H)}}}]).directive("typeaheadPopup",function(){return{restrict:"EA",scope:{matches:"=",query:"=",active:"=",position:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("typeaheadMatch",["$templateRequest","$compile","$parse",function(a,b,c){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||"template/typeahead/typeahead-match.html";a(g).then(function(a){b(a.trim())(d,function(a){e.replaceWith(a)})})}}}]).filter("typeaheadHighlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c?(""+b).replace(new RegExp(a(c),"gi"),"$&"):b}}),angular.module("template/accordion/accordion-group.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion-group.html",'
    \n
    \n

    \n {{heading}}\n

    \n
    \n
    \n
    \n
    \n
    \n')}]),angular.module("template/accordion/accordion.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion.html",'
    ')}]),angular.module("template/alert/alert.html",[]).run(["$templateCache",function(a){a.put("template/alert/alert.html",'\n')}]),angular.module("template/carousel/carousel.html",[]).run(["$templateCache",function(a){a.put("template/carousel/carousel.html",'\n')}]),angular.module("template/carousel/slide.html",[]).run(["$templateCache",function(a){a.put("template/carousel/slide.html",'
    \n')}]),angular.module("template/datepicker/datepicker.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/datepicker.html",'
    \n \n \n \n
    ')}]),angular.module("template/datepicker/day.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/day.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{label.abbr}}
    {{ weekNumbers[$index] }}\n \n
    \n')}]),angular.module("template/datepicker/month.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/month.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n')}]),angular.module("template/datepicker/popup.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/popup.html",'\n')}]),angular.module("template/datepicker/year.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/year.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n') -}]),angular.module("template/modal/backdrop.html",[]).run(["$templateCache",function(a){a.put("template/modal/backdrop.html",'\n')}]),angular.module("template/modal/window.html",[]).run(["$templateCache",function(a){a.put("template/modal/window.html",'\n')}]),angular.module("template/pagination/pager.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pager.html",'')}]),angular.module("template/pagination/pagination.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pagination.html",'')}]),angular.module("template/tooltip/tooltip-html-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/tooltip/tooltip-html-unsafe-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-unsafe-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/tooltip/tooltip-template-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-template-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/popover/popover-template.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-template.html",'
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n')}]),angular.module("template/popover/popover-window.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-window.html",'
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n')}]),angular.module("template/popover/popover.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover.html",'
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n')}]),angular.module("template/progressbar/bar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/bar.html",'
    \n')}]),angular.module("template/progressbar/progress.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progress.html",'
    ')}]),angular.module("template/progressbar/progressbar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progressbar.html",'
    \n
    \n
    \n')}]),angular.module("template/rating/rating.html",[]).run(["$templateCache",function(a){a.put("template/rating/rating.html",'\n \n ({{ $index < value ? \'*\' : \' \' }})\n \n')}]),angular.module("template/tabs/tab.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tab.html",'
  • \n {{heading}}\n
  • \n')}]),angular.module("template/tabs/tabset.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tabset.html",'
    \n \n
    \n
    \n
    \n
    \n
    \n')}]),angular.module("template/timepicker/timepicker.html",[]).run(["$templateCache",function(a){a.put("template/timepicker/timepicker.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
     
    \n \n :\n \n
     
    \n')}]),angular.module("template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-match.html",'')}]),angular.module("template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-popup.html",'\n')}]),!angular.$$csp()&&angular.element(document).find("head").prepend(''); \ No newline at end of file +angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.dateparser", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdown", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.transition", "ui.bootstrap.typeahead"]), angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html", "template/accordion/accordion.html", "template/alert/alert.html", "template/carousel/carousel.html", "template/carousel/slide.html", "template/datepicker/datepicker.html", "template/datepicker/day.html", "template/datepicker/month.html", "template/datepicker/popup.html", "template/datepicker/year.html", "template/modal/backdrop.html", "template/modal/window.html", "template/pagination/pager.html", "template/pagination/pagination.html", "template/tooltip/tooltip-html-popup.html", "template/tooltip/tooltip-html-unsafe-popup.html", "template/tooltip/tooltip-popup.html", "template/tooltip/tooltip-template-popup.html", "template/popover/popover-template.html", "template/popover/popover.html", "template/progressbar/bar.html", "template/progressbar/progress.html", "template/progressbar/progressbar.html", "template/rating/rating.html", "template/tabs/tab.html", "template/tabs/tabset.html", "template/timepicker/timepicker.html", "template/typeahead/typeahead-match.html", "template/typeahead/typeahead-popup.html"]), angular.module("ui.bootstrap.collapse", []).directive("collapse", ["$animate", function (a) { + return { + link: function (b, c, d) { + function e() { + c.removeClass("collapse").addClass("collapsing"), a.addClass(c, "in", {to: {height: c[0].scrollHeight + "px"}}).then(f) + } + + function f() { + c.removeClass("collapsing"), c.css({height: "auto"}) + } + + function g() { + c.css({height: c[0].scrollHeight + "px"}).removeClass("collapse").addClass("collapsing"), a.removeClass(c, "in", {to: {height: "0"}}).then(h) + } + + function h() { + c.css({height: "0"}), c.removeClass("collapsing"), c.addClass("collapse") + } + + b.$watch(d.collapse, function (a) { + a ? g() : e() + }) + } + } +}]), angular.module("ui.bootstrap.accordion", ["ui.bootstrap.collapse"]).constant("accordionConfig", {closeOthers: !0}).controller("AccordionController", ["$scope", "$attrs", "accordionConfig", function (a, b, c) { + this.groups = [], this.closeOthers = function (d) { + var e = angular.isDefined(b.closeOthers) ? a.$eval(b.closeOthers) : c.closeOthers; + e && angular.forEach(this.groups, function (a) { + a !== d && (a.isOpen = !1) + }) + }, this.addGroup = function (a) { + var b = this; + this.groups.push(a), a.$on("$destroy", function () { + b.removeGroup(a) + }) + }, this.removeGroup = function (a) { + var b = this.groups.indexOf(a); + -1 !== b && this.groups.splice(b, 1) + } +}]).directive("accordion", function () { + return { + restrict: "EA", + controller: "AccordionController", + transclude: !0, + replace: !1, + templateUrl: "template/accordion/accordion.html" + } +}).directive("accordionGroup", function () { + return { + require: "^accordion", + restrict: "EA", + transclude: !0, + replace: !0, + templateUrl: "template/accordion/accordion-group.html", + scope: {heading: "@", isOpen: "=?", isDisabled: "=?"}, + controller: function () { + this.setHeading = function (a) { + this.heading = a + } + }, + link: function (a, b, c, d) { + d.addGroup(a), a.$watch("isOpen", function (b) { + b && d.closeOthers(a) + }), a.toggleOpen = function () { + a.isDisabled || (a.isOpen = !a.isOpen) + } + } + } +}).directive("accordionHeading", function () { + return { + restrict: "EA", + transclude: !0, + template: "", + replace: !0, + require: "^accordionGroup", + link: function (a, b, c, d, e) { + d.setHeading(e(a, angular.noop)) + } + } +}).directive("accordionTransclude", function () { + return { + require: "^accordionGroup", link: function (a, b, c, d) { + a.$watch(function () { + return d[c.accordionTransclude] + }, function (a) { + a && (b.html(""), b.append(a)) + }) + } + } +}), angular.module("ui.bootstrap.alert", []).controller("AlertController", ["$scope", "$attrs", function (a, b) { + a.closeable = "close" in b, this.close = a.close +}]).directive("alert", function () { + return { + restrict: "EA", + controller: "AlertController", + templateUrl: "template/alert/alert.html", + transclude: !0, + replace: !0, + scope: {type: "@", close: "&"} + } +}).directive("dismissOnTimeout", ["$timeout", function (a) { + return { + require: "alert", link: function (b, c, d, e) { + a(function () { + e.close() + }, parseInt(d.dismissOnTimeout, 10)) + } + } +}]), angular.module("ui.bootstrap.bindHtml", []).directive("bindHtmlUnsafe", function () { + return function (a, b, c) { + b.addClass("ng-binding").data("$binding", c.bindHtmlUnsafe), a.$watch(c.bindHtmlUnsafe, function (a) { + b.html(a || "") + }) + } +}), angular.module("ui.bootstrap.buttons", []).constant("buttonConfig", { + activeClass: "active", + toggleEvent: "click" +}).controller("ButtonsController", ["buttonConfig", function (a) { + this.activeClass = a.activeClass || "active", this.toggleEvent = a.toggleEvent || "click" +}]).directive("btnRadio", function () { + return { + require: ["btnRadio", "ngModel"], controller: "ButtonsController", link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f.$render = function () { + b.toggleClass(e.activeClass, angular.equals(f.$modelValue, a.$eval(c.btnRadio))) + }, b.bind(e.toggleEvent, function () { + var d = b.hasClass(e.activeClass); + (!d || angular.isDefined(c.uncheckable)) && a.$apply(function () { + f.$setViewValue(d ? null : a.$eval(c.btnRadio)), f.$render() + }) + }) + } + } +}).directive("btnCheckbox", function () { + return { + require: ["btnCheckbox", "ngModel"], controller: "ButtonsController", link: function (a, b, c, d) { + function e() { + return g(c.btnCheckboxTrue, !0) + } + + function f() { + return g(c.btnCheckboxFalse, !1) + } + + function g(b, c) { + var d = a.$eval(b); + return angular.isDefined(d) ? d : c + } + + var h = d[0], i = d[1]; + i.$render = function () { + b.toggleClass(h.activeClass, angular.equals(i.$modelValue, e())) + }, b.bind(h.toggleEvent, function () { + a.$apply(function () { + i.$setViewValue(b.hasClass(h.activeClass) ? f() : e()), i.$render() + }) + }) + } + } +}), angular.module("ui.bootstrap.carousel", []).controller("CarouselController", ["$scope", "$interval", "$animate", function (a, b, c) { + function d(a) { + if (angular.isUndefined(k[a].index))return k[a]; + { + var b; + k.length + } + for (b = 0; b < k.length; ++b)if (k[b].index == a)return k[b] + } + + function e() { + f(); + var c = +a.interval; + !isNaN(c) && c > 0 && (h = b(g, c)) + } + + function f() { + h && (b.cancel(h), h = null) + } + + function g() { + var b = +a.interval; + i && !isNaN(b) && b > 0 ? a.next() : a.pause() + } + + var h, i, j = this, k = j.slides = a.slides = [], l = -1; + j.currentSlide = null; + var m = !1; + j.select = a.select = function (b, d) { + function f() { + m || (angular.extend(b, {direction: d, active: !0}), angular.extend(j.currentSlide || {}, { + direction: d, + active: !1 + }), c.enabled() && !a.noTransition && b.$element && (a.$currentTransition = !0, b.$element.one("$animate:close", function () { + a.$currentTransition = null + })), j.currentSlide = b, l = g, e()) + } + + var g = j.indexOfSlide(b); + void 0 === d && (d = g > j.getCurrentIndex() ? "next" : "prev"), b && b !== j.currentSlide && f() + }, a.$on("$destroy", function () { + m = !0 + }), j.getCurrentIndex = function () { + return j.currentSlide && angular.isDefined(j.currentSlide.index) ? +j.currentSlide.index : l + }, j.indexOfSlide = function (a) { + return angular.isDefined(a.index) ? +a.index : k.indexOf(a) + }, a.next = function () { + var b = (j.getCurrentIndex() + 1) % k.length; + return a.$currentTransition ? void 0 : j.select(d(b), "next") + }, a.prev = function () { + var b = j.getCurrentIndex() - 1 < 0 ? k.length - 1 : j.getCurrentIndex() - 1; + return a.$currentTransition ? void 0 : j.select(d(b), "prev") + }, a.isActive = function (a) { + return j.currentSlide === a + }, a.$watch("interval", e), a.$on("$destroy", f), a.play = function () { + i || (i = !0, e()) + }, a.pause = function () { + a.noPause || (i = !1, f()) + }, j.addSlide = function (b, c) { + b.$element = c, k.push(b), 1 === k.length || b.active ? (j.select(k[k.length - 1]), 1 == k.length && a.play()) : b.active = !1 + }, j.removeSlide = function (a) { + angular.isDefined(a.index) && k.sort(function (a, b) { + return +a.index > +b.index + }); + var b = k.indexOf(a); + k.splice(b, 1), k.length > 0 && a.active ? j.select(b >= k.length ? k[b - 1] : k[b]) : l > b && l-- + } +}]).directive("carousel", [function () { + return { + restrict: "EA", + transclude: !0, + replace: !0, + controller: "CarouselController", + require: "carousel", + templateUrl: "template/carousel/carousel.html", + scope: {interval: "=", noTransition: "=", noPause: "="} + } +}]).directive("slide", function () { + return { + require: "^carousel", + restrict: "EA", + transclude: !0, + replace: !0, + templateUrl: "template/carousel/slide.html", + scope: {active: "=?", index: "=?"}, + link: function (a, b, c, d) { + d.addSlide(a, b), a.$on("$destroy", function () { + d.removeSlide(a) + }), a.$watch("active", function (b) { + b && d.select(a) + }) + } + } +}).animation(".item", ["$animate", function (a) { + return { + beforeAddClass: function (b, c, d) { + if ("active" == c && b.parent() && !b.parent().scope().noTransition) { + var e = !1, f = b.isolateScope().direction, g = "next" == f ? "left" : "right"; + return b.addClass(f), a.addClass(b, g).then(function () { + e || b.removeClass(g + " " + f), d() + }), function () { + e = !0 + } + } + d() + }, beforeRemoveClass: function (b, c, d) { + if ("active" == c && b.parent() && !b.parent().scope().noTransition) { + var e = !1, f = b.isolateScope().direction, g = "next" == f ? "left" : "right"; + return a.addClass(b, g).then(function () { + e || b.removeClass(g), d() + }), function () { + e = !0 + } + } + d() + } + } +}]), angular.module("ui.bootstrap.dateparser", []).service("dateParser", ["$locale", "orderByFilter", function (a, b) { + function c(a) { + var c = [], d = a.split(""); + return angular.forEach(f, function (b, e) { + var f = a.indexOf(e); + if (f > -1) { + a = a.split(""), d[f] = "(" + b.regex + ")", a[f] = "$"; + for (var g = f + 1, h = f + e.length; h > g; g++)d[g] = "", a[g] = "$"; + a = a.join(""), c.push({index: f, apply: b.apply}) + } + }), {regex: new RegExp("^" + d.join("") + "$"), map: b(c, "index")} + } + + function d(a, b, c) { + return 1 > c ? !1 : 1 === b && c > 28 ? 29 === c && (a % 4 === 0 && a % 100 !== 0 || a % 400 === 0) : 3 === b || 5 === b || 8 === b || 10 === b ? 31 > c : !0 + } + + var e = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + this.parsers = {}; + var f = { + yyyy: { + regex: "\\d{4}", apply: function (a) { + this.year = +a + } + }, + yy: { + regex: "\\d{2}", apply: function (a) { + this.year = +a + 2e3 + } + }, + y: { + regex: "\\d{1,4}", apply: function (a) { + this.year = +a + } + }, + MMMM: { + regex: a.DATETIME_FORMATS.MONTH.join("|"), apply: function (b) { + this.month = a.DATETIME_FORMATS.MONTH.indexOf(b) + } + }, + MMM: { + regex: a.DATETIME_FORMATS.SHORTMONTH.join("|"), apply: function (b) { + this.month = a.DATETIME_FORMATS.SHORTMONTH.indexOf(b) + } + }, + MM: { + regex: "0[1-9]|1[0-2]", apply: function (a) { + this.month = a - 1 + } + }, + M: { + regex: "[1-9]|1[0-2]", apply: function (a) { + this.month = a - 1 + } + }, + dd: { + regex: "[0-2][0-9]{1}|3[0-1]{1}", apply: function (a) { + this.date = +a + } + }, + d: { + regex: "[1-2]?[0-9]{1}|3[0-1]{1}", apply: function (a) { + this.date = +a + } + }, + EEEE: {regex: a.DATETIME_FORMATS.DAY.join("|")}, + EEE: {regex: a.DATETIME_FORMATS.SHORTDAY.join("|")}, + HH: { + regex: "(?:0|1)[0-9]|2[0-3]", apply: function (a) { + this.hours = +a + } + }, + H: { + regex: "1?[0-9]|2[0-3]", apply: function (a) { + this.hours = +a + } + }, + mm: { + regex: "[0-5][0-9]", apply: function (a) { + this.minutes = +a + } + }, + m: { + regex: "[0-9]|[1-5][0-9]", apply: function (a) { + this.minutes = +a + } + }, + sss: { + regex: "[0-9][0-9][0-9]", apply: function (a) { + this.milliseconds = +a + } + }, + ss: { + regex: "[0-5][0-9]", apply: function (a) { + this.seconds = +a + } + }, + s: { + regex: "[0-9]|[1-5][0-9]", apply: function (a) { + this.seconds = +a + } + } + }; + this.parse = function (b, f, g) { + if (!angular.isString(b) || !f)return b; + f = a.DATETIME_FORMATS[f] || f, f = f.replace(e, "\\$&"), this.parsers[f] || (this.parsers[f] = c(f)); + var h = this.parsers[f], i = h.regex, j = h.map, k = b.match(i); + if (k && k.length) { + var l, m; + l = g ? { + year: g.getFullYear(), + month: g.getMonth(), + date: g.getDate(), + hours: g.getHours(), + minutes: g.getMinutes(), + seconds: g.getSeconds(), + milliseconds: g.getMilliseconds() + } : {year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0}; + for (var n = 1, o = k.length; o > n; n++) { + var p = j[n - 1]; + p.apply && p.apply.call(l, k[n]) + } + return d(l.year, l.month, l.date) && (m = new Date(l.year, l.month, l.date, l.hours, l.minutes, l.seconds, l.milliseconds || 0)), m + } + } +}]), angular.module("ui.bootstrap.position", []).factory("$position", ["$document", "$window", function (a, b) { + function c(a, c) { + return a.currentStyle ? a.currentStyle[c] : b.getComputedStyle ? b.getComputedStyle(a)[c] : a.style[c] + } + + function d(a) { + return "static" === (c(a, "position") || "static") + } + + var e = function (b) { + for (var c = a[0], e = b.offsetParent || c; e && e !== c && d(e);)e = e.offsetParent; + return e || c + }; + return { + position: function (b) { + var c = this.offset(b), d = {top: 0, left: 0}, f = e(b[0]); + f != a[0] && (d = this.offset(angular.element(f)), d.top += f.clientTop - f.scrollTop, d.left += f.clientLeft - f.scrollLeft); + var g = b[0].getBoundingClientRect(); + return { + width: g.width || b.prop("offsetWidth"), + height: g.height || b.prop("offsetHeight"), + top: c.top - d.top, + left: c.left - d.left + } + }, offset: function (c) { + var d = c[0].getBoundingClientRect(); + return { + width: d.width || c.prop("offsetWidth"), + height: d.height || c.prop("offsetHeight"), + top: d.top + (b.pageYOffset || a[0].documentElement.scrollTop), + left: d.left + (b.pageXOffset || a[0].documentElement.scrollLeft) + } + }, positionElements: function (a, b, c, d) { + var e, f, g, h, i = c.split("-"), j = i[0], k = i[1] || "center"; + e = d ? this.offset(a) : this.position(a), f = b.prop("offsetWidth"), g = b.prop("offsetHeight"); + var l = { + center: function () { + return e.left + e.width / 2 - f / 2 + }, left: function () { + return e.left + }, right: function () { + return e.left + e.width + } + }, m = { + center: function () { + return e.top + e.height / 2 - g / 2 + }, top: function () { + return e.top + }, bottom: function () { + return e.top + e.height + } + }; + switch (j) { + case"right": + h = {top: m[k](), left: l[j]()}; + break; + case"left": + h = {top: m[k](), left: e.left - f}; + break; + case"bottom": + h = {top: m[j](), left: l[k]()}; + break; + default: + h = {top: e.top - g, left: l[k]()} + } + return h + } + } +}]), angular.module("ui.bootstrap.datepicker", ["ui.bootstrap.dateparser", "ui.bootstrap.position"]).constant("datepickerConfig", { + formatDay: "dd", + formatMonth: "MMMM", + formatYear: "yyyy", + formatDayHeader: "EEE", + formatDayTitle: "MMMM yyyy", + formatMonthTitle: "yyyy", + datepickerMode: "day", + minMode: "day", + maxMode: "year", + showWeeks: !0, + startingDay: 0, + yearRange: 20, + minDate: null, + maxDate: null, + shortcutPropagation: !1 +}).controller("DatepickerController", ["$scope", "$attrs", "$parse", "$interpolate", "$timeout", "$log", "dateFilter", "datepickerConfig", function (a, b, c, d, e, f, g, h) { + var i = this, j = {$setViewValue: angular.noop}; + this.modes = ["day", "month", "year"], angular.forEach(["formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "minMode", "maxMode", "showWeeks", "startingDay", "yearRange", "shortcutPropagation"], function (c, e) { + i[c] = angular.isDefined(b[c]) ? 8 > e ? d(b[c])(a.$parent) : a.$parent.$eval(b[c]) : h[c] + }), angular.forEach(["minDate", "maxDate"], function (d) { + b[d] ? a.$parent.$watch(c(b[d]), function (a) { + i[d] = a ? new Date(a) : null, i.refreshView() + }) : i[d] = h[d] ? new Date(h[d]) : null + }), a.datepickerMode = a.datepickerMode || h.datepickerMode, a.maxMode = i.maxMode, a.uniqueId = "datepicker-" + a.$id + "-" + Math.floor(1e4 * Math.random()), angular.isDefined(b.initDate) ? (this.activeDate = a.$parent.$eval(b.initDate) || new Date, a.$parent.$watch(b.initDate, function (a) { + a && (j.$isEmpty(j.$modelValue) || j.$invalid) && (i.activeDate = a, i.refreshView()) + })) : this.activeDate = new Date, a.isActive = function (b) { + return 0 === i.compare(b.date, i.activeDate) ? (a.activeDateId = b.uid, !0) : !1 + }, this.init = function (a) { + j = a, j.$render = function () { + i.render() + } + }, this.render = function () { + if (j.$viewValue) { + var a = new Date(j.$viewValue), b = !isNaN(a); + b ? this.activeDate = a : f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'), j.$setValidity("date", b) + } + this.refreshView() + }, this.refreshView = function () { + if (this.element) { + this._refreshView(); + var a = j.$viewValue ? new Date(j.$viewValue) : null; + j.$setValidity("date-disabled", !a || this.element && !this.isDisabled(a)) + } + }, this.createDateObject = function (a, b) { + var c = j.$viewValue ? new Date(j.$viewValue) : null; + return { + date: a, + label: g(a, b), + selected: c && 0 === this.compare(a, c), + disabled: this.isDisabled(a), + current: 0 === this.compare(a, new Date), + customClass: this.customClass(a) + } + }, this.isDisabled = function (c) { + return this.minDate && this.compare(c, this.minDate) < 0 || this.maxDate && this.compare(c, this.maxDate) > 0 || b.dateDisabled && a.dateDisabled({ + date: c, + mode: a.datepickerMode + }) + }, this.customClass = function (b) { + return a.customClass({date: b, mode: a.datepickerMode}) + }, this.split = function (a, b) { + for (var c = []; a.length > 0;)c.push(a.splice(0, b)); + return c + }, a.select = function (b) { + if (a.datepickerMode === i.minMode) { + var c = j.$viewValue ? new Date(j.$viewValue) : new Date(0, 0, 0, 0, 0, 0, 0); + c.setFullYear(b.getFullYear(), b.getMonth(), b.getDate()), j.$setViewValue(c), j.$render() + } else i.activeDate = b, a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) - 1] + }, a.move = function (a) { + var b = i.activeDate.getFullYear() + a * (i.step.years || 0), c = i.activeDate.getMonth() + a * (i.step.months || 0); + i.activeDate.setFullYear(b, c, 1), i.refreshView() + }, a.toggleMode = function (b) { + b = b || 1, a.datepickerMode === i.maxMode && 1 === b || a.datepickerMode === i.minMode && -1 === b || (a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) + b]) + }, a.keys = { + 13: "enter", + 32: "space", + 33: "pageup", + 34: "pagedown", + 35: "end", + 36: "home", + 37: "left", + 38: "up", + 39: "right", + 40: "down" + }; + var k = function () { + e(function () { + i.element[0].focus() + }, 0, !1) + }; + a.$on("datepicker.focus", k), a.keydown = function (b) { + var c = a.keys[b.which]; + if (c && !b.shiftKey && !b.altKey)if (b.preventDefault(), i.shortcutPropagation || b.stopPropagation(), "enter" === c || "space" === c) { + if (i.isDisabled(i.activeDate))return; + a.select(i.activeDate), k() + } else!b.ctrlKey || "up" !== c && "down" !== c ? (i.handleKeyDown(c, b), i.refreshView()) : (a.toggleMode("up" === c ? 1 : -1), k()) + } +}]).directive("datepicker", function () { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/datepicker.html", + scope: {datepickerMode: "=?", dateDisabled: "&", customClass: "&", shortcutPropagation: "&?"}, + require: ["datepicker", "?^ngModel"], + controller: "DatepickerController", + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f && e.init(f) + } + } +}).directive("daypicker", ["dateFilter", function (a) { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/day.html", + require: "^datepicker", + link: function (b, c, d, e) { + function f(a, b) { + return 1 !== b || a % 4 !== 0 || a % 100 === 0 && a % 400 !== 0 ? i[b] : 29 + } + + function g(a, b) { + var c = new Array(b), d = new Date(a), e = 0; + for (d.setHours(12); b > e;)c[e++] = new Date(d), d.setDate(d.getDate() + 1); + return c + } + + function h(a) { + var b = new Date(a); + b.setDate(b.getDate() + 4 - (b.getDay() || 7)); + var c = b.getTime(); + return b.setMonth(0), b.setDate(1), Math.floor(Math.round((c - b) / 864e5) / 7) + 1 + } + + b.showWeeks = e.showWeeks, e.step = {months: 1}, e.element = c; + var i = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + e._refreshView = function () { + var c = e.activeDate.getFullYear(), d = e.activeDate.getMonth(), f = new Date(c, d, 1), i = e.startingDay - f.getDay(), j = i > 0 ? 7 - i : -i, k = new Date(f); + j > 0 && k.setDate(-j + 1); + for (var l = g(k, 42), m = 0; 42 > m; m++)l[m] = angular.extend(e.createDateObject(l[m], e.formatDay), { + secondary: l[m].getMonth() !== d, + uid: b.uniqueId + "-" + m + }); + b.labels = new Array(7); + for (var n = 0; 7 > n; n++)b.labels[n] = { + abbr: a(l[n].date, e.formatDayHeader), + full: a(l[n].date, "EEEE") + }; + if (b.title = a(e.activeDate, e.formatDayTitle), b.rows = e.split(l, 7), b.showWeeks) { + b.weekNumbers = []; + for (var o = (11 - e.startingDay) % 7, p = b.rows.length, q = 0; p > q; q++)b.weekNumbers.push(h(b.rows[q][o].date)) + } + }, e.compare = function (a, b) { + return new Date(a.getFullYear(), a.getMonth(), a.getDate()) - new Date(b.getFullYear(), b.getMonth(), b.getDate()) + }, e.handleKeyDown = function (a) { + var b = e.activeDate.getDate(); + if ("left" === a)b -= 1; else if ("up" === a)b -= 7; else if ("right" === a)b += 1; else if ("down" === a)b += 7; else if ("pageup" === a || "pagedown" === a) { + var c = e.activeDate.getMonth() + ("pageup" === a ? -1 : 1); + e.activeDate.setMonth(c, 1), b = Math.min(f(e.activeDate.getFullYear(), e.activeDate.getMonth()), b) + } else"home" === a ? b = 1 : "end" === a && (b = f(e.activeDate.getFullYear(), e.activeDate.getMonth())); + e.activeDate.setDate(b) + }, e.refreshView() + } + } +}]).directive("monthpicker", ["dateFilter", function (a) { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/month.html", + require: "^datepicker", + link: function (b, c, d, e) { + e.step = {years: 1}, e.element = c, e._refreshView = function () { + for (var c = new Array(12), d = e.activeDate.getFullYear(), f = 0; 12 > f; f++)c[f] = angular.extend(e.createDateObject(new Date(d, f, 1), e.formatMonth), {uid: b.uniqueId + "-" + f}); + b.title = a(e.activeDate, e.formatMonthTitle), b.rows = e.split(c, 3) + }, e.compare = function (a, b) { + return new Date(a.getFullYear(), a.getMonth()) - new Date(b.getFullYear(), b.getMonth()) + }, e.handleKeyDown = function (a) { + var b = e.activeDate.getMonth(); + if ("left" === a)b -= 1; else if ("up" === a)b -= 3; else if ("right" === a)b += 1; else if ("down" === a)b += 3; else if ("pageup" === a || "pagedown" === a) { + var c = e.activeDate.getFullYear() + ("pageup" === a ? -1 : 1); + e.activeDate.setFullYear(c) + } else"home" === a ? b = 0 : "end" === a && (b = 11); + e.activeDate.setMonth(b) + }, e.refreshView() + } + } +}]).directive("yearpicker", ["dateFilter", function () { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/year.html", + require: "^datepicker", + link: function (a, b, c, d) { + function e(a) { + return parseInt((a - 1) / f, 10) * f + 1 + } + + var f = d.yearRange; + d.step = {years: f}, d.element = b, d._refreshView = function () { + for (var b = new Array(f), c = 0, g = e(d.activeDate.getFullYear()); f > c; c++)b[c] = angular.extend(d.createDateObject(new Date(g + c, 0, 1), d.formatYear), {uid: a.uniqueId + "-" + c}); + a.title = [b[0].label, b[f - 1].label].join(" - "), a.rows = d.split(b, 5) + }, d.compare = function (a, b) { + return a.getFullYear() - b.getFullYear() + }, d.handleKeyDown = function (a) { + var b = d.activeDate.getFullYear(); + "left" === a ? b -= 1 : "up" === a ? b -= 5 : "right" === a ? b += 1 : "down" === a ? b += 5 : "pageup" === a || "pagedown" === a ? b += ("pageup" === a ? -1 : 1) * d.step.years : "home" === a ? b = e(d.activeDate.getFullYear()) : "end" === a && (b = e(d.activeDate.getFullYear()) + f - 1), d.activeDate.setFullYear(b) + }, d.refreshView() + } + } +}]).constant("datepickerPopupConfig", { + datepickerPopup: "yyyy-MM-dd", + html5Types: {date: "yyyy-MM-dd", "datetime-local": "yyyy-MM-ddTHH:mm:ss.sss", month: "yyyy-MM"}, + currentText: "Today", + clearText: "Clear", + closeText: "Done", + closeOnDateSelection: !0, + appendToBody: !1, + showButtonBar: !0 +}).directive("datepickerPopup", ["$compile", "$parse", "$document", "$position", "dateFilter", "dateParser", "datepickerPopupConfig", function (a, b, c, d, e, f, g) { + return { + restrict: "EA", + require: "ngModel", + scope: {isOpen: "=?", currentText: "@", clearText: "@", closeText: "@", dateDisabled: "&", customClass: "&"}, + link: function (h, i, j, k) { + function l(a) { + return a.replace(/([A-Z])/g, function (a) { + return "-" + a.toLowerCase() + }) + } + + function m(a) { + if (angular.isNumber(a) && (a = new Date(a)), a) { + if (angular.isDate(a) && !isNaN(a))return a; + if (angular.isString(a)) { + var b = f.parse(a, o, h.date) || new Date(a); + return isNaN(b) ? void 0 : b + } + return void 0 + } + return null + } + + function n(a, b) { + var c = a || b; + if (angular.isNumber(c) && (c = new Date(c)), c) { + if (angular.isDate(c) && !isNaN(c))return !0; + if (angular.isString(c)) { + var d = f.parse(c, o) || new Date(c); + return !isNaN(d) + } + return !1 + } + return !0 + } + + var o, p = angular.isDefined(j.closeOnDateSelection) ? h.$parent.$eval(j.closeOnDateSelection) : g.closeOnDateSelection, q = angular.isDefined(j.datepickerAppendToBody) ? h.$parent.$eval(j.datepickerAppendToBody) : g.appendToBody; + h.showButtonBar = angular.isDefined(j.showButtonBar) ? h.$parent.$eval(j.showButtonBar) : g.showButtonBar, h.getText = function (a) { + return h[a + "Text"] || g[a + "Text"] + }; + var r = !1; + if (g.html5Types[j.type] ? (o = g.html5Types[j.type], r = !0) : (o = j.datepickerPopup || g.datepickerPopup, j.$observe("datepickerPopup", function (a) { + var b = a || g.datepickerPopup; + if (b !== o && (o = b, k.$modelValue = null, !o))throw new Error("datepickerPopup must have a date format specified.") + })), !o)throw new Error("datepickerPopup must have a date format specified."); + if (r && j.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats."); + var s = angular.element("
    "); + s.attr({"ng-model": "date", "ng-change": "dateSelection()"}); + var t = angular.element(s.children()[0]); + if (r && "month" == j.type && (t.attr("datepicker-mode", '"month"'), t.attr("min-mode", "month")), j.datepickerOptions) { + var u = h.$parent.$eval(j.datepickerOptions); + u.initDate && (h.initDate = u.initDate, t.attr("init-date", "initDate"), delete u.initDate), angular.forEach(u, function (a, b) { + t.attr(l(b), a) + }) + } + h.watchData = {}, angular.forEach(["minDate", "maxDate", "datepickerMode", "initDate", "shortcutPropagation"], function (a) { + if (j[a]) { + var c = b(j[a]); + if (h.$parent.$watch(c, function (b) { + h.watchData[a] = b + }), t.attr(l(a), "watchData." + a), "datepickerMode" === a) { + var d = c.assign; + h.$watch("watchData." + a, function (a, b) { + a !== b && d(h.$parent, a) + }) + } + } + }), j.dateDisabled && t.attr("date-disabled", "dateDisabled({ date: date, mode: mode })"), j.showWeeks && t.attr("show-weeks", j.showWeeks), j.customClass && t.attr("custom-class", "customClass({ date: date, mode: mode })"), r ? k.$formatters.push(function (a) { + return h.date = a, a + }) : (k.$$parserName = "date", k.$validators.date = n, k.$parsers.unshift(m), k.$formatters.push(function (a) { + return h.date = a, k.$isEmpty(a) ? a : e(a, o) + })), h.dateSelection = function (a) { + angular.isDefined(a) && (h.date = a); + var b = h.date ? e(h.date, o) : ""; + i.val(b), k.$setViewValue(b), p && (h.isOpen = !1, i[0].focus()) + }, k.$viewChangeListeners.push(function () { + h.date = f.parse(k.$viewValue, o, h.date) || new Date(k.$viewValue) + }); + var v = function (a) { + h.isOpen && a.target !== i[0] && h.$apply(function () { + h.isOpen = !1 + }) + }, w = function (a) { + h.keydown(a) + }; + i.bind("keydown", w), h.keydown = function (a) { + 27 === a.which ? (a.preventDefault(), h.isOpen && a.stopPropagation(), h.close()) : 40 !== a.which || h.isOpen || (h.isOpen = !0) + }, h.$watch("isOpen", function (a) { + a ? (h.$broadcast("datepicker.focus"), h.position = q ? d.offset(i) : d.position(i), h.position.top = h.position.top + i.prop("offsetHeight"), c.bind("click", v)) : c.unbind("click", v) + }), h.select = function (a) { + if ("today" === a) { + var b = new Date; + angular.isDate(h.date) ? (a = new Date(h.date), a.setFullYear(b.getFullYear(), b.getMonth(), b.getDate())) : a = new Date(b.setHours(0, 0, 0, 0)) + } + h.dateSelection(a) + }, h.close = function () { + h.isOpen = !1, i[0].focus() + }; + var x = a(s)(h); + s.remove(), q ? c.find("body").append(x) : i.after(x), h.$on("$destroy", function () { + x.remove(), i.unbind("keydown", w), c.unbind("click", v) + }) + } + } +}]).directive("datepickerPopupWrap", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + templateUrl: "template/datepicker/popup.html", + link: function (a, b) { + b.bind("click", function (a) { + a.preventDefault(), a.stopPropagation() + }) + } + } +}), angular.module("ui.bootstrap.dropdown", ["ui.bootstrap.position"]).constant("dropdownConfig", {openClass: "open"}).service("dropdownService", ["$document", "$rootScope", function (a, b) { + var c = null; + this.open = function (b) { + c || (a.bind("click", d), a.bind("keydown", e)), c && c !== b && (c.isOpen = !1), c = b + }, this.close = function (b) { + c === b && (c = null, a.unbind("click", d), a.unbind("keydown", e)) + }; + var d = function (a) { + if (c && (!a || "disabled" !== c.getAutoClose())) { + var d = c.getToggleElement(); + if (!(a && d && d[0].contains(a.target))) { + var e = c.getElement(); + a && "outsideClick" === c.getAutoClose() && e && e[0].contains(a.target) || (c.isOpen = !1, b.$$phase || c.$apply()) + } + } + }, e = function (a) { + 27 === a.which && (c.focusToggleElement(), d()) + } +}]).controller("DropdownController", ["$scope", "$attrs", "$parse", "dropdownConfig", "dropdownService", "$animate", "$position", "$document", function (a, b, c, d, e, f, g, h) { + var i, j = this, k = a.$new(), l = d.openClass, m = angular.noop, n = b.onToggle ? c(b.onToggle) : angular.noop, o = !1; + this.init = function (d) { + j.$element = d, b.isOpen && (i = c(b.isOpen), m = i.assign, a.$watch(i, function (a) { + k.isOpen = !!a + })), o = angular.isDefined(b.dropdownAppendToBody), o && j.dropdownMenu && (h.find("body").append(j.dropdownMenu), d.on("$destroy", function () { + j.dropdownMenu.remove() + })) + }, this.toggle = function (a) { + return k.isOpen = arguments.length ? !!a : !k.isOpen + }, this.isOpen = function () { + return k.isOpen + }, k.getToggleElement = function () { + return j.toggleElement + }, k.getAutoClose = function () { + return b.autoClose || "always" + }, k.getElement = function () { + return j.$element + }, k.focusToggleElement = function () { + j.toggleElement && j.toggleElement[0].focus() + }, k.$watch("isOpen", function (b, c) { + if (o && j.dropdownMenu) { + var d = g.positionElements(j.$element, j.dropdownMenu, "bottom-left", !0); + j.dropdownMenu.css({top: d.top + "px", left: d.left + "px", display: b ? "block" : "none"}) + } + f[b ? "addClass" : "removeClass"](j.$element, l), b ? (k.focusToggleElement(), e.open(k)) : e.close(k), m(a, b), angular.isDefined(b) && b !== c && n(a, {open: !!b}) + }), a.$on("$locationChangeSuccess", function () { + k.isOpen = !1 + }), a.$on("$destroy", function () { + k.$destroy() + }) +}]).directive("dropdown", function () { + return { + controller: "DropdownController", link: function (a, b, c, d) { + d.init(b) + } + } +}).directive("dropdownMenu", function () { + return { + restrict: "AC", require: "?^dropdown", link: function (a, b, c, d) { + d && (d.dropdownMenu = b) + } + } +}).directive("dropdownToggle", function () { + return { + require: "?^dropdown", link: function (a, b, c, d) { + if (d) { + d.toggleElement = b; + var e = function (e) { + e.preventDefault(), b.hasClass("disabled") || c.disabled || a.$apply(function () { + d.toggle() + }) + }; + b.bind("click", e), b.attr({ + "aria-haspopup": !0, + "aria-expanded": !1 + }), a.$watch(d.isOpen, function (a) { + b.attr("aria-expanded", !!a) + }), a.$on("$destroy", function () { + b.unbind("click", e) + }) + } + } + } +}), angular.module("ui.bootstrap.modal", []).factory("$$stackedMap", function () { + return { + createNew: function () { + var a = []; + return { + add: function (b, c) { + a.push({key: b, value: c}) + }, get: function (b) { + for (var c = 0; c < a.length; c++)if (b == a[c].key)return a[c] + }, keys: function () { + for (var b = [], c = 0; c < a.length; c++)b.push(a[c].key); + return b + }, top: function () { + return a[a.length - 1] + }, remove: function (b) { + for (var c = -1, d = 0; d < a.length; d++)if (b == a[d].key) { + c = d; + break + } + return a.splice(c, 1)[0] + }, removeTop: function () { + return a.splice(a.length - 1, 1)[0] + }, length: function () { + return a.length + } + } + } + } +}).directive("modalBackdrop", ["$timeout", function (a) { + function b(b) { + b.animate = !1, a(function () { + b.animate = !0 + }) + } + + return { + restrict: "EA", replace: !0, templateUrl: "template/modal/backdrop.html", compile: function (a, c) { + return a.addClass(c.backdropClass), b + } + } +}]).directive("modalWindow", ["$modalStack", "$q", function (a, b) { + return { + restrict: "EA", + scope: {index: "@", animate: "="}, + replace: !0, + transclude: !0, + templateUrl: function (a, b) { + return b.templateUrl || "template/modal/window.html" + }, + link: function (c, d, e) { + d.addClass(e.windowClass || ""), c.size = e.size, c.close = function (b) { + var c = a.getTop(); + c && c.value.backdrop && "static" != c.value.backdrop && b.target === b.currentTarget && (b.preventDefault(), b.stopPropagation(), a.dismiss(c.key, "backdrop click")) + }, c.$isRendered = !0; + var f = b.defer(); + e.$observe("modalRender", function (a) { + "true" == a && f.resolve() + }), f.promise.then(function () { + c.animate = !0; + var b = d[0].querySelectorAll("[autofocus]"); + b.length ? b[0].focus() : d[0].focus(); + var e = a.getTop(); + e && a.modalRendered(e.key) + }) + } + } +}]).directive("modalAnimationClass", [function () { + return { + compile: function (a, b) { + b.modalAnimation && a.addClass(b.modalAnimationClass) + } + } +}]).directive("modalTransclude", function () { + return { + link: function (a, b, c, d, e) { + e(a.$parent, function (a) { + b.empty(), b.append(a) + }) + } + } +}).factory("$modalStack", ["$animate", "$timeout", "$document", "$compile", "$rootScope", "$$stackedMap", function (a, b, c, d, e, f) { + function g() { + for (var a = -1, b = o.keys(), c = 0; c < b.length; c++)o.get(b[c]).value.backdrop && (a = c); + return a + } + + function h(a) { + var b = c.find("body").eq(0), d = o.get(a).value; + o.remove(a), j(d.modalDomEl, d.modalScope, function () { + b.toggleClass(n, o.length() > 0), i() + }) + } + + function i() { + if (l && -1 == g()) { + var a = m; + j(l, m, function () { + a = null + }), l = void 0, m = void 0 + } + } + + function j(c, d, f) { + function g() { + g.done || (g.done = !0, c.remove(), d.$destroy(), f && f()) + } + + d.animate = !1, c.attr("modal-animation") && a.enabled() ? c.one("$animate:close", function () { + e.$evalAsync(g) + }) : b(g) + } + + function k(a, b, c) { + return !a.value.modalScope.$broadcast("modal.closing", b, c).defaultPrevented + } + + var l, m, n = "modal-open", o = f.createNew(), p = {}; + return e.$watch(g, function (a) { + m && (m.index = a) + }), c.bind("keydown", function (a) { + var b; + 27 === a.which && (b = o.top(), b && b.value.keyboard && (a.preventDefault(), e.$apply(function () { + p.dismiss(b.key, "escape key press") + }))) + }), p.open = function (a, b) { + var f = c[0].activeElement; + o.add(a, { + deferred: b.deferred, + renderDeferred: b.renderDeferred, + modalScope: b.scope, + backdrop: b.backdrop, + keyboard: b.keyboard + }); + var h = c.find("body").eq(0), i = g(); + if (i >= 0 && !l) { + m = e.$new(!0), m.index = i; + var j = angular.element('
    '); + j.attr("backdrop-class", b.backdropClass), b.animation && j.attr("modal-animation", "true"), l = d(j)(m), h.append(l) + } + var k = angular.element('
    '); + k.attr({ + "template-url": b.windowTemplateUrl, + "window-class": b.windowClass, + size: b.size, + index: o.length() - 1, + animate: "animate" + }).html(b.content), b.animation && k.attr("modal-animation", "true"); + var p = d(k)(b.scope); + o.top().value.modalDomEl = p, o.top().value.modalOpener = f, h.append(p), h.addClass(n) + }, p.close = function (a, b) { + var c = o.get(a); + return c && k(c, b, !0) ? (c.value.deferred.resolve(b), h(a), c.value.modalOpener.focus(), !0) : !c + }, p.dismiss = function (a, b) { + var c = o.get(a); + return c && k(c, b, !1) ? (c.value.deferred.reject(b), h(a), c.value.modalOpener.focus(), !0) : !c + }, p.dismissAll = function (a) { + for (var b = this.getTop(); b && this.dismiss(b.key, a);)b = this.getTop() + }, p.getTop = function () { + return o.top() + }, p.modalRendered = function (a) { + var b = o.get(a); + b && b.value.renderDeferred.resolve() + }, p +}]).provider("$modal", function () { + var a = { + options: {animation: !0, backdrop: !0, keyboard: !0}, + $get: ["$injector", "$rootScope", "$q", "$templateRequest", "$controller", "$modalStack", function (b, c, d, e, f, g) { + function h(a) { + return a.template ? d.when(a.template) : e(angular.isFunction(a.templateUrl) ? a.templateUrl() : a.templateUrl) + } + + function i(a) { + var c = []; + return angular.forEach(a, function (a) { + (angular.isFunction(a) || angular.isArray(a)) && c.push(d.when(b.invoke(a))) + }), c + } + + var j = {}; + return j.open = function (b) { + var e = d.defer(), j = d.defer(), k = d.defer(), l = { + result: e.promise, + opened: j.promise, + rendered: k.promise, + close: function (a) { + return g.close(l, a) + }, + dismiss: function (a) { + return g.dismiss(l, a) + } + }; + if (b = angular.extend({}, a.options, b), b.resolve = b.resolve || {}, !b.template && !b.templateUrl)throw new Error("One of template or templateUrl options is required."); + var m = d.all([h(b)].concat(i(b.resolve))); + return m.then(function (a) { + var d = (b.scope || c).$new(); + d.$close = l.close, d.$dismiss = l.dismiss; + var h, i = {}, j = 1; + b.controller && (i.$scope = d, i.$modalInstance = l, angular.forEach(b.resolve, function (b, c) { + i[c] = a[j++] + }), h = f(b.controller, i), b.controllerAs && (d[b.controllerAs] = h)), g.open(l, { + scope: d, + deferred: e, + renderDeferred: k, + content: a[0], + animation: b.animation, + backdrop: b.backdrop, + keyboard: b.keyboard, + backdropClass: b.backdropClass, + windowClass: b.windowClass, + windowTemplateUrl: b.windowTemplateUrl, + size: b.size + }) + }, function (a) { + e.reject(a) + }), m.then(function () { + j.resolve(!0) + }, function (a) { + j.reject(a) + }), l + }, j + }] + }; + return a +}), angular.module("ui.bootstrap.pagination", []).controller("PaginationController", ["$scope", "$attrs", "$parse", function (a, b, c) { + var d = this, e = {$setViewValue: angular.noop}, f = b.numPages ? c(b.numPages).assign : angular.noop; + this.init = function (g, h) { + e = g, this.config = h, e.$render = function () { + d.render() + }, b.itemsPerPage ? a.$parent.$watch(c(b.itemsPerPage), function (b) { + d.itemsPerPage = parseInt(b, 10), a.totalPages = d.calculateTotalPages() + }) : this.itemsPerPage = h.itemsPerPage, a.$watch("totalItems", function () { + a.totalPages = d.calculateTotalPages() + }), a.$watch("totalPages", function (b) { + f(a.$parent, b), a.page > b ? a.selectPage(b) : e.$render() + }) + }, this.calculateTotalPages = function () { + var b = this.itemsPerPage < 1 ? 1 : Math.ceil(a.totalItems / this.itemsPerPage); + return Math.max(b || 0, 1) + }, this.render = function () { + a.page = parseInt(e.$viewValue, 10) || 1 + }, a.selectPage = function (b, c) { + a.page !== b && b > 0 && b <= a.totalPages && (c && c.target && c.target.blur(), e.$setViewValue(b), e.$render()) + }, a.getText = function (b) { + return a[b + "Text"] || d.config[b + "Text"] + }, a.noPrevious = function () { + return 1 === a.page + }, a.noNext = function () { + return a.page === a.totalPages + } +}]).constant("paginationConfig", { + itemsPerPage: 10, + boundaryLinks: !1, + directionLinks: !0, + firstText: "First", + previousText: "Previous", + nextText: "Next", + lastText: "Last", + rotate: !0 +}).directive("pagination", ["$parse", "paginationConfig", function (a, b) { + return { + restrict: "EA", + scope: {totalItems: "=", firstText: "@", previousText: "@", nextText: "@", lastText: "@"}, + require: ["pagination", "?ngModel"], + controller: "PaginationController", + templateUrl: "template/pagination/pagination.html", + replace: !0, + link: function (c, d, e, f) { + function g(a, b, c) { + return {number: a, text: b, active: c} + } + + function h(a, b) { + var c = [], d = 1, e = b, f = angular.isDefined(k) && b > k; + f && (l ? (d = Math.max(a - Math.floor(k / 2), 1), e = d + k - 1, e > b && (e = b, d = e - k + 1)) : (d = (Math.ceil(a / k) - 1) * k + 1, e = Math.min(d + k - 1, b))); + for (var h = d; e >= h; h++) { + var i = g(h, h, h === a); + c.push(i) + } + if (f && !l) { + if (d > 1) { + var j = g(d - 1, "...", !1); + c.unshift(j) + } + if (b > e) { + var m = g(e + 1, "...", !1); + c.push(m) + } + } + return c + } + + var i = f[0], j = f[1]; + if (j) { + var k = angular.isDefined(e.maxSize) ? c.$parent.$eval(e.maxSize) : b.maxSize, l = angular.isDefined(e.rotate) ? c.$parent.$eval(e.rotate) : b.rotate; + c.boundaryLinks = angular.isDefined(e.boundaryLinks) ? c.$parent.$eval(e.boundaryLinks) : b.boundaryLinks, c.directionLinks = angular.isDefined(e.directionLinks) ? c.$parent.$eval(e.directionLinks) : b.directionLinks, i.init(j, b), e.maxSize && c.$parent.$watch(a(e.maxSize), function (a) { + k = parseInt(a, 10), i.render() + }); + var m = i.render; + i.render = function () { + m(), c.page > 0 && c.page <= c.totalPages && (c.pages = h(c.page, c.totalPages)) + } + } + } + } +}]).constant("pagerConfig", { + itemsPerPage: 10, + previousText: "« Previous", + nextText: "Next »", + align: !0 +}).directive("pager", ["pagerConfig", function (a) { + return { + restrict: "EA", + scope: {totalItems: "=", previousText: "@", nextText: "@"}, + require: ["pager", "?ngModel"], + controller: "PaginationController", + templateUrl: "template/pagination/pager.html", + replace: !0, + link: function (b, c, d, e) { + var f = e[0], g = e[1]; + g && (b.align = angular.isDefined(d.align) ? b.$parent.$eval(d.align) : a.align, f.init(g, a)) + } + } +}]), angular.module("ui.bootstrap.tooltip", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).provider("$tooltip", function () { + function a(a) { + var b = /[A-Z]/g, c = "-"; + return a.replace(b, function (a, b) { + return (b ? c : "") + a.toLowerCase() + }) + } + + var b = {placement: "top", animation: !0, popupDelay: 0, useContentExp: !1}, c = { + mouseenter: "mouseleave", + click: "click", + focus: "blur" + }, d = {}; + this.options = function (a) { + angular.extend(d, a) + }, this.setTriggers = function (a) { + angular.extend(c, a) + }, this.$get = ["$window", "$compile", "$timeout", "$document", "$position", "$interpolate", function (e, f, g, h, i, j) { + return function (e, k, l, m) { + function n(a) { + var b = a || m.trigger || l, d = c[b] || b; + return {show: b, hide: d} + } + + m = angular.extend({}, b, d, m); + var o = a(e), p = j.startSymbol(), q = j.endSymbol(), r = "
    '; + return { + restrict: "EA", compile: function () { + var a = f(r); + return function (b, c, d) { + function f() { + E.isOpen ? l() : j() + } + + function j() { + (!D || b.$eval(d[k + "Enable"])) && (s(), E.popupDelay ? A || (A = g(o, E.popupDelay, !1), A.then(function (a) { + a() + })) : o()()) + } + + function l() { + b.$apply(function () { + p() + }) + } + + function o() { + return A = null, z && (g.cancel(z), z = null), (m.useContentExp ? E.contentExp() : E.content) ? (q(), x.css({ + top: 0, + left: 0, + display: "block" + }), E.$digest(), F(), E.isOpen = !0, E.$apply(), F) : angular.noop + } + + function p() { + E.isOpen = !1, g.cancel(A), A = null, E.animation ? z || (z = g(r, 500)) : r() + } + + function q() { + x && r(), y = E.$new(), x = a(y, function (a) { + B ? h.find("body").append(a) : c.after(a) + }), y.$watch(function () { + g(F, 0, !1) + }), m.useContentExp && y.$watch("contentExp()", function (a) { + !a && E.isOpen && p() + }) + } + + function r() { + z = null, x && (x.remove(), x = null), y && (y.$destroy(), y = null) + } + + function s() { + t(), u(), v() + } + + function t() { + E.popupClass = d[k + "Class"] + } + + function u() { + var a = d[k + "Placement"]; + E.placement = angular.isDefined(a) ? a : m.placement + } + + function v() { + var a = d[k + "PopupDelay"], b = parseInt(a, 10); + E.popupDelay = isNaN(b) ? m.popupDelay : b + } + + function w() { + var a = d[k + "Trigger"]; + G(), C = n(a), C.show === C.hide ? c.bind(C.show, f) : (c.bind(C.show, j), c.bind(C.hide, l)) + } + + var x, y, z, A, B = angular.isDefined(m.appendToBody) ? m.appendToBody : !1, C = n(void 0), D = angular.isDefined(d[k + "Enable"]), E = b.$new(!0), F = function () { + if (x) { + var a = i.positionElements(c, x, E.placement, B); + a.top += "px", a.left += "px", x.css(a) + } + }; + E.origScope = b, E.isOpen = !1, E.contentExp = function () { + return b.$eval(d[e]) + }, m.useContentExp || d.$observe(e, function (a) { + E.content = a, !a && E.isOpen && p() + }), d.$observe("disabled", function (a) { + a && E.isOpen && p() + }), d.$observe(k + "Title", function (a) { + E.title = a + }); + var G = function () { + c.unbind(C.show, j), c.unbind(C.hide, l) + }; + w(); + var H = b.$eval(d[k + "Animation"]); + E.animation = angular.isDefined(H) ? !!H : m.animation; + var I = b.$eval(d[k + "AppendToBody"]); + B = angular.isDefined(I) ? I : B, B && b.$on("$locationChangeSuccess", function () { + E.isOpen && p() + }), b.$on("$destroy", function () { + g.cancel(z), g.cancel(A), G(), r(), E = null + }) + } + } + } + } + }] +}).directive("tooltipTemplateTransclude", ["$animate", "$sce", "$compile", "$templateRequest", function (a, b, c, d) { + return { + link: function (e, f, g) { + var h, i, j, k = e.$eval(g.tooltipTemplateTranscludeScope), l = 0, m = function () { + i && (i.remove(), i = null), h && (h.$destroy(), h = null), j && (a.leave(j).then(function () { + i = null + }), i = j, j = null) + }; + e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude), function (b) { + var g = ++l; + b ? (d(b, !0).then(function (d) { + if (g === l) { + var e = k.$new(), i = d, n = c(i)(e, function (b) { + m(), a.enter(b, f) + }); + h = e, j = n, h.$emit("$includeContentLoaded", b) + } + }, function () { + g === l && (m(), e.$emit("$includeContentError", b)) + }), e.$emit("$includeContentRequested", b)) : m() + }), e.$on("$destroy", m) + } + } +}]).directive("tooltipClasses", function () { + return { + restrict: "A", link: function (a, b, c) { + a.placement && b.addClass(a.placement), a.popupClass && b.addClass(a.popupClass), a.animation() && b.addClass(c.tooltipAnimationClass) + } + } +}).directive("tooltipPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-popup.html" + } +}).directive("tooltip", ["$tooltip", function (a) { + return a("tooltip", "tooltip", "mouseenter") +}]).directive("tooltipTemplatePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {contentExp: "&", placement: "@", popupClass: "@", animation: "&", isOpen: "&", originScope: "&"}, + templateUrl: "template/tooltip/tooltip-template-popup.html" + } +}).directive("tooltipTemplate", ["$tooltip", function (a) { + return a("tooltipTemplate", "tooltip", "mouseenter", {useContentExp: !0}) +}]).directive("tooltipHtmlPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {contentExp: "&", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-html-popup.html" + } +}).directive("tooltipHtml", ["$tooltip", function (a) { + return a("tooltipHtml", "tooltip", "mouseenter", {useContentExp: !0}) +}]).directive("tooltipHtmlUnsafePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-html-unsafe-popup.html" + } +}).value("tooltipHtmlUnsafeSuppressDeprecated", !1).directive("tooltipHtmlUnsafe", ["$tooltip", "tooltipHtmlUnsafeSuppressDeprecated", "$log", function (a, b, c) { + return b || c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."), a("tooltipHtmlUnsafe", "tooltip", "mouseenter") +}]), angular.module("ui.bootstrap.popover", ["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: { + title: "@", + contentExp: "&", + placement: "@", + popupClass: "@", + animation: "&", + isOpen: "&", + originScope: "&" + }, + templateUrl: "template/popover/popover-template.html" + } +}).directive("popoverTemplate", ["$tooltip", function (a) { + return a("popoverTemplate", "popover", "click", {useContentExp: !0}) +}]).directive("popoverPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {title: "@", content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/popover/popover.html" + } +}).directive("popover", ["$tooltip", function (a) { + return a("popover", "popover", "click") +}]), angular.module("ui.bootstrap.progressbar", []).constant("progressConfig", { + animate: !0, + max: 100 +}).controller("ProgressController", ["$scope", "$attrs", "progressConfig", function (a, b, c) { + var d = this, e = angular.isDefined(b.animate) ? a.$parent.$eval(b.animate) : c.animate; + this.bars = [], a.max = angular.isDefined(a.max) ? a.max : c.max, this.addBar = function (b, c) { + e || c.css({transition: "none"}), this.bars.push(b), b.$watch("value", function (c) { + b.percent = +(100 * c / a.max).toFixed(2) + }), b.$on("$destroy", function () { + c = null, d.removeBar(b) + }) + }, this.removeBar = function (a) { + this.bars.splice(this.bars.indexOf(a), 1) + } +}]).directive("progress", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + controller: "ProgressController", + require: "progress", + scope: {}, + templateUrl: "template/progressbar/progress.html" + } +}).directive("bar", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + require: "^progress", + scope: {value: "=", max: "=?", type: "@"}, + templateUrl: "template/progressbar/bar.html", + link: function (a, b, c, d) { + d.addBar(a, b) + } + } +}).directive("progressbar", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + controller: "ProgressController", + scope: {value: "=", max: "=?", type: "@"}, + templateUrl: "template/progressbar/progressbar.html", + link: function (a, b, c, d) { + d.addBar(a, angular.element(b.children()[0])) + } + } +}), angular.module("ui.bootstrap.rating", []).constant("ratingConfig", { + max: 5, + stateOn: null, + stateOff: null +}).controller("RatingController", ["$scope", "$attrs", "ratingConfig", function (a, b, c) { + var d = {$setViewValue: angular.noop}; + this.init = function (e) { + d = e, d.$render = this.render, d.$formatters.push(function (a) { + return angular.isNumber(a) && a << 0 !== a && (a = Math.round(a)), a + }), this.stateOn = angular.isDefined(b.stateOn) ? a.$parent.$eval(b.stateOn) : c.stateOn, this.stateOff = angular.isDefined(b.stateOff) ? a.$parent.$eval(b.stateOff) : c.stateOff; + var f = angular.isDefined(b.ratingStates) ? a.$parent.$eval(b.ratingStates) : new Array(angular.isDefined(b.max) ? a.$parent.$eval(b.max) : c.max); + a.range = this.buildTemplateObjects(f) + }, this.buildTemplateObjects = function (a) { + for (var b = 0, c = a.length; c > b; b++)a[b] = angular.extend({index: b}, { + stateOn: this.stateOn, + stateOff: this.stateOff + }, a[b]); + return a + }, a.rate = function (b) { + !a.readonly && b >= 0 && b <= a.range.length && (d.$setViewValue(b), d.$render()) + }, a.enter = function (b) { + a.readonly || (a.value = b), a.onHover({value: b}) + }, a.reset = function () { + a.value = d.$viewValue, a.onLeave() + }, a.onKeydown = function (b) { + /(37|38|39|40)/.test(b.which) && (b.preventDefault(), b.stopPropagation(), a.rate(a.value + (38 === b.which || 39 === b.which ? 1 : -1))) + }, this.render = function () { + a.value = d.$viewValue + } +}]).directive("rating", function () { + return { + restrict: "EA", + require: ["rating", "ngModel"], + scope: {readonly: "=?", onHover: "&", onLeave: "&"}, + controller: "RatingController", + templateUrl: "template/rating/rating.html", + replace: !0, + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + e.init(f) + } + } +}), angular.module("ui.bootstrap.tabs", []).controller("TabsetController", ["$scope", function (a) { + var b = this, c = b.tabs = a.tabs = []; + b.select = function (a) { + angular.forEach(c, function (b) { + b.active && b !== a && (b.active = !1, b.onDeselect()) + }), a.active = !0, a.onSelect() + }, b.addTab = function (a) { + c.push(a), 1 === c.length && a.active !== !1 ? a.active = !0 : a.active ? b.select(a) : a.active = !1 + }, b.removeTab = function (a) { + var e = c.indexOf(a); + if (a.active && c.length > 1 && !d) { + var f = e == c.length - 1 ? e - 1 : e + 1; + b.select(c[f]) + } + c.splice(e, 1) + }; + var d; + a.$on("$destroy", function () { + d = !0 + }) +}]).directive("tabset", function () { + return { + restrict: "EA", + transclude: !0, + replace: !0, + scope: {type: "@"}, + controller: "TabsetController", + templateUrl: "template/tabs/tabset.html", + link: function (a, b, c) { + a.vertical = angular.isDefined(c.vertical) ? a.$parent.$eval(c.vertical) : !1, a.justified = angular.isDefined(c.justified) ? a.$parent.$eval(c.justified) : !1 + } + } +}).directive("tab", ["$parse", "$log", function (a, b) { + return { + require: "^tabset", + restrict: "EA", + replace: !0, + templateUrl: "template/tabs/tab.html", + transclude: !0, + scope: {active: "=?", heading: "@", onSelect: "&select", onDeselect: "&deselect"}, + controller: function () { + }, + compile: function (c, d, e) { + return function (c, d, f, g) { + c.$watch("active", function (a) { + a && g.select(c) + }), c.disabled = !1, f.disable && c.$parent.$watch(a(f.disable), function (a) { + c.disabled = !!a + }), f.disabled && (b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'), c.$parent.$watch(a(f.disabled), function (a) { + c.disabled = !!a + })), c.select = function () { + c.disabled || (c.active = !0) + }, g.addTab(c), c.$on("$destroy", function () { + g.removeTab(c) + }), c.$transcludeFn = e + } + } + } +}]).directive("tabHeadingTransclude", [function () { + return { + restrict: "A", require: "^tab", link: function (a, b) { + a.$watch("headingElement", function (a) { + a && (b.html(""), b.append(a)) + }) + } + } +}]).directive("tabContentTransclude", function () { + function a(a) { + return a.tagName && (a.hasAttribute("tab-heading") || a.hasAttribute("data-tab-heading") || "tab-heading" === a.tagName.toLowerCase() || "data-tab-heading" === a.tagName.toLowerCase()) + } + + return { + restrict: "A", require: "^tabset", link: function (b, c, d) { + var e = b.$eval(d.tabContentTransclude); + e.$transcludeFn(e.$parent, function (b) { + angular.forEach(b, function (b) { + a(b) ? e.headingElement = b : c.append(b) + }) + }) + } + } +}), angular.module("ui.bootstrap.timepicker", []).constant("timepickerConfig", { + hourStep: 1, + minuteStep: 1, + showMeridian: !0, + meridians: null, + readonlyInput: !1, + mousewheel: !0, + arrowkeys: !0 +}).controller("TimepickerController", ["$scope", "$attrs", "$parse", "$log", "$locale", "timepickerConfig", function (a, b, c, d, e, f) { + function g() { + var b = parseInt(a.hours, 10), c = a.showMeridian ? b > 0 && 13 > b : b >= 0 && 24 > b; + return c ? (a.showMeridian && (12 === b && (b = 0), a.meridian === p[1] && (b += 12)), b) : void 0 + } + + function h() { + var b = parseInt(a.minutes, 10); + return b >= 0 && 60 > b ? b : void 0 + } + + function i(a) { + return angular.isDefined(a) && a.toString().length < 2 ? "0" + a : a.toString() + } + + function j(a) { + k(), o.$setViewValue(new Date(n)), l(a) + } + + function k() { + o.$setValidity("time", !0), a.invalidHours = !1, a.invalidMinutes = !1 + } + + function l(b) { + var c = n.getHours(), d = n.getMinutes(); + a.showMeridian && (c = 0 === c || 12 === c ? 12 : c % 12), a.hours = "h" === b ? c : i(c), "m" !== b && (a.minutes = i(d)), a.meridian = n.getHours() < 12 ? p[0] : p[1] + } + + function m(a) { + var b = new Date(n.getTime() + 6e4 * a); + n.setHours(b.getHours(), b.getMinutes()), j() + } + + var n = new Date, o = {$setViewValue: angular.noop}, p = angular.isDefined(b.meridians) ? a.$parent.$eval(b.meridians) : f.meridians || e.DATETIME_FORMATS.AMPMS; + this.init = function (c, d) { + o = c, o.$render = this.render, o.$formatters.unshift(function (a) { + return a ? new Date(a) : null + }); + var e = d.eq(0), g = d.eq(1), h = angular.isDefined(b.mousewheel) ? a.$parent.$eval(b.mousewheel) : f.mousewheel; + h && this.setupMousewheelEvents(e, g); + var i = angular.isDefined(b.arrowkeys) ? a.$parent.$eval(b.arrowkeys) : f.arrowkeys; + i && this.setupArrowkeyEvents(e, g), a.readonlyInput = angular.isDefined(b.readonlyInput) ? a.$parent.$eval(b.readonlyInput) : f.readonlyInput, this.setupInputEvents(e, g) + }; + var q = f.hourStep; + b.hourStep && a.$parent.$watch(c(b.hourStep), function (a) { + q = parseInt(a, 10) + }); + var r = f.minuteStep; + b.minuteStep && a.$parent.$watch(c(b.minuteStep), function (a) { + r = parseInt(a, 10) + }), a.showMeridian = f.showMeridian, b.showMeridian && a.$parent.$watch(c(b.showMeridian), function (b) { + if (a.showMeridian = !!b, o.$error.time) { + var c = g(), d = h(); + angular.isDefined(c) && angular.isDefined(d) && (n.setHours(c), j()) + } else l() + }), this.setupMousewheelEvents = function (b, c) { + var d = function (a) { + a.originalEvent && (a = a.originalEvent); + var b = a.wheelDelta ? a.wheelDelta : -a.deltaY; + return a.detail || b > 0 + }; + b.bind("mousewheel wheel", function (b) { + a.$apply(d(b) ? a.incrementHours() : a.decrementHours()), b.preventDefault() + }), c.bind("mousewheel wheel", function (b) { + a.$apply(d(b) ? a.incrementMinutes() : a.decrementMinutes()), b.preventDefault() + }) + }, this.setupArrowkeyEvents = function (b, c) { + b.bind("keydown", function (b) { + 38 === b.which ? (b.preventDefault(), a.incrementHours(), a.$apply()) : 40 === b.which && (b.preventDefault(), a.decrementHours(), a.$apply()) + }), c.bind("keydown", function (b) { + 38 === b.which ? (b.preventDefault(), a.incrementMinutes(), a.$apply()) : 40 === b.which && (b.preventDefault(), a.decrementMinutes(), a.$apply()) + }) + }, this.setupInputEvents = function (b, c) { + if (a.readonlyInput)return a.updateHours = angular.noop, void(a.updateMinutes = angular.noop); + var d = function (b, c) { + o.$setViewValue(null), o.$setValidity("time", !1), angular.isDefined(b) && (a.invalidHours = b), angular.isDefined(c) && (a.invalidMinutes = c) + }; + a.updateHours = function () { + var a = g(); + angular.isDefined(a) ? (n.setHours(a), j("h")) : d(!0) + }, b.bind("blur", function () { + !a.invalidHours && a.hours < 10 && a.$apply(function () { + a.hours = i(a.hours) + }) + }), a.updateMinutes = function () { + var a = h(); + angular.isDefined(a) ? (n.setMinutes(a), j("m")) : d(void 0, !0) + }, c.bind("blur", function () { + !a.invalidMinutes && a.minutes < 10 && a.$apply(function () { + a.minutes = i(a.minutes) + }) + }) + }, this.render = function () { + var a = o.$viewValue; + isNaN(a) ? (o.$setValidity("time", !1), d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : (a && (n = a), k(), l()) + }, a.incrementHours = function () { + m(60 * q) + }, a.decrementHours = function () { + m(60 * -q) + }, a.incrementMinutes = function () { + m(r) + }, a.decrementMinutes = function () { + m(-r) + }, a.toggleMeridian = function () { + m(720 * (n.getHours() < 12 ? 1 : -1)) + } +}]).directive("timepicker", function () { + return { + restrict: "EA", + require: ["timepicker", "?^ngModel"], + controller: "TimepickerController", + replace: !0, + scope: {}, + templateUrl: "template/timepicker/timepicker.html", + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f && e.init(f, b.find("input")) + } + } +}), angular.module("ui.bootstrap.transition", []).value("$transitionSuppressDeprecated", !1).factory("$transition", ["$q", "$timeout", "$rootScope", "$log", "$transitionSuppressDeprecated", function (a, b, c, d, e) { + function f(a) { + for (var b in a)if (void 0 !== h.style[b])return a[b] + } + + e || d.warn("$transition is now deprecated. Use $animate from ngAnimate instead."); + var g = function (d, e, f) { + f = f || {}; + var h = a.defer(), i = g[f.animation ? "animationEndEventName" : "transitionEndEventName"], j = function () { + c.$apply(function () { + d.unbind(i, j), h.resolve(d) + }) + }; + return i && d.bind(i, j), b(function () { + angular.isString(e) ? d.addClass(e) : angular.isFunction(e) ? e(d) : angular.isObject(e) && d.css(e), i || h.resolve(d) + }), h.promise.cancel = function () { + i && d.unbind(i, j), h.reject("Transition cancelled") + }, h.promise + }, h = document.createElement("trans"), i = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd", + transition: "transitionend" + }, j = { + WebkitTransition: "webkitAnimationEnd", + MozTransition: "animationend", + OTransition: "oAnimationEnd", + transition: "animationend" + }; + return g.transitionEndEventName = f(i), g.animationEndEventName = f(j), g +}]), angular.module("ui.bootstrap.typeahead", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).factory("typeaheadParser", ["$parse", function (a) { + var b = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/; + return { + parse: function (c) { + var d = c.match(b); + if (!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "' + c + '".'); + return {itemName: d[3], source: a(d[4]), viewMapper: a(d[2] || d[1]), modelMapper: a(d[1])} + } + } +}]).directive("typeahead", ["$compile", "$parse", "$q", "$timeout", "$document", "$position", "typeaheadParser", function (a, b, c, d, e, f, g) { + var h = [9, 13, 27, 38, 40]; + return { + require: "ngModel", link: function (i, j, k, l) { + var m, n = i.$eval(k.typeaheadMinLength) || 1, o = i.$eval(k.typeaheadWaitMs) || 0, p = i.$eval(k.typeaheadEditable) !== !1, q = b(k.typeaheadLoading).assign || angular.noop, r = b(k.typeaheadOnSelect), s = k.typeaheadInputFormatter ? b(k.typeaheadInputFormatter) : void 0, t = k.typeaheadAppendToBody ? i.$eval(k.typeaheadAppendToBody) : !1, u = i.$eval(k.typeaheadFocusFirst) !== !1, v = b(k.ngModel).assign, w = g.parse(k.typeahead), x = i.$new(); + i.$on("$destroy", function () { + x.$destroy() + }); + var y = "typeahead-" + x.$id + "-" + Math.floor(1e4 * Math.random()); + j.attr({"aria-autocomplete": "list", "aria-expanded": !1, "aria-owns": y}); + var z = angular.element("
    "); + z.attr({ + id: y, + matches: "matches", + active: "activeIdx", + select: "select(activeIdx)", + query: "query", + position: "position" + }), angular.isDefined(k.typeaheadTemplateUrl) && z.attr("template-url", k.typeaheadTemplateUrl); + var A = function () { + x.matches = [], x.activeIdx = -1, j.attr("aria-expanded", !1) + }, B = function (a) { + return y + "-option-" + a + }; + x.$watch("activeIdx", function (a) { + 0 > a ? j.removeAttr("aria-activedescendant") : j.attr("aria-activedescendant", B(a)) + }); + var C = function (a) { + var b = {$viewValue: a}; + q(i, !0), c.when(w.source(i, b)).then(function (c) { + var d = a === l.$viewValue; + if (d && m)if (c && c.length > 0) { + x.activeIdx = u ? 0 : -1, x.matches.length = 0; + for (var e = 0; e < c.length; e++)b[w.itemName] = c[e], x.matches.push({ + id: B(e), + label: w.viewMapper(x, b), + model: c[e] + }); + x.query = a, x.position = t ? f.offset(j) : f.position(j), x.position.top = x.position.top + j.prop("offsetHeight"), j.attr("aria-expanded", !0) + } else A(); + d && q(i, !1) + }, function () { + A(), q(i, !1) + }) + }; + A(), x.query = void 0; + var D, E = function (a) { + D = d(function () { + C(a) + }, o) + }, F = function () { + D && d.cancel(D) + }; + l.$parsers.unshift(function (a) { + return m = !0, a && a.length >= n ? o > 0 ? (F(), E(a)) : C(a) : (q(i, !1), F(), A()), p ? a : a ? void l.$setValidity("editable", !1) : (l.$setValidity("editable", !0), a) + }), l.$formatters.push(function (a) { + var b, c, d = {}; + return p || l.$setValidity("editable", !0), s ? (d.$model = a, s(i, d)) : (d[w.itemName] = a, b = w.viewMapper(i, d), d[w.itemName] = void 0, c = w.viewMapper(i, d), b !== c ? b : a) + }), x.select = function (a) { + var b, c, e = {}; + e[w.itemName] = c = x.matches[a].model, b = w.modelMapper(i, e), v(i, b), l.$setValidity("editable", !0), l.$setValidity("parse", !0), r(i, { + $item: c, + $model: b, + $label: w.viewMapper(i, e) + }), A(), d(function () { + j[0].focus() + }, 0, !1) + }, j.bind("keydown", function (a) { + 0 !== x.matches.length && -1 !== h.indexOf(a.which) && (-1 != x.activeIdx || 13 !== a.which && 9 !== a.which) && (a.preventDefault(), 40 === a.which ? (x.activeIdx = (x.activeIdx + 1) % x.matches.length, x.$digest()) : 38 === a.which ? (x.activeIdx = (x.activeIdx > 0 ? x.activeIdx : x.matches.length) - 1, x.$digest()) : 13 === a.which || 9 === a.which ? x.$apply(function () { + x.select(x.activeIdx) + }) : 27 === a.which && (a.stopPropagation(), A(), x.$digest())) + }), j.bind("blur", function () { + m = !1 + }); + var G = function (a) { + j[0] !== a.target && (A(), x.$digest()) + }; + e.bind("click", G), i.$on("$destroy", function () { + e.unbind("click", G), t && H.remove(), z.remove() + }); + var H = a(z)(x); + t ? e.find("body").append(H) : j.after(H) + } + } +}]).directive("typeaheadPopup", function () { + return { + restrict: "EA", + scope: {matches: "=", query: "=", active: "=", position: "=", select: "&"}, + replace: !0, + templateUrl: "template/typeahead/typeahead-popup.html", + link: function (a, b, c) { + a.templateUrl = c.templateUrl, a.isOpen = function () { + return a.matches.length > 0 + }, a.isActive = function (b) { + return a.active == b + }, a.selectActive = function (b) { + a.active = b + }, a.selectMatch = function (b) { + a.select({activeIdx: b}) + } + } + } +}).directive("typeaheadMatch", ["$templateRequest", "$compile", "$parse", function (a, b, c) { + return { + restrict: "EA", scope: {index: "=", match: "=", query: "="}, link: function (d, e, f) { + var g = c(f.templateUrl)(d.$parent) || "template/typeahead/typeahead-match.html"; + a(g).then(function (a) { + b(a.trim())(d, function (a) { + e.replaceWith(a) + }) + }) + } + } +}]).filter("typeaheadHighlight", function () { + function a(a) { + return a.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1") + } + + return function (b, c) { + return c ? ("" + b).replace(new RegExp(a(c), "gi"), "$&") : b + } +}), angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function (a) { + a.put("template/accordion/accordion-group.html", '
    \n
    \n

    \n {{heading}}\n

    \n
    \n
    \n
    \n
    \n
    \n') +}]), angular.module("template/accordion/accordion.html", []).run(["$templateCache", function (a) { + a.put("template/accordion/accordion.html", '
    ') +}]), angular.module("template/alert/alert.html", []).run(["$templateCache", function (a) { + a.put("template/alert/alert.html", '\n') +}]), angular.module("template/carousel/carousel.html", []).run(["$templateCache", function (a) { + a.put("template/carousel/carousel.html", '\n') +}]), angular.module("template/carousel/slide.html", []).run(["$templateCache", function (a) { + a.put("template/carousel/slide.html", '
    \n') +}]), angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/datepicker.html", '
    \n \n \n \n
    ') +}]), angular.module("template/datepicker/day.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/day.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{label.abbr}}
    {{ weekNumbers[$index] }}\n \n
    \n') +}]), angular.module("template/datepicker/month.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/month.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n') +}]), angular.module("template/datepicker/popup.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/popup.html", '\n') +}]), angular.module("template/datepicker/year.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/year.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n') +}]), angular.module("template/modal/backdrop.html", []).run(["$templateCache", function (a) { + a.put("template/modal/backdrop.html", '\n') +}]), angular.module("template/modal/window.html", []).run(["$templateCache", function (a) { + a.put("template/modal/window.html", '\n') +}]), angular.module("template/pagination/pager.html", []).run(["$templateCache", function (a) { + a.put("template/pagination/pager.html", '') +}]), angular.module("template/pagination/pagination.html", []).run(["$templateCache", function (a) { + a.put("template/pagination/pagination.html", '') +}]), angular.module("template/tooltip/tooltip-html-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-html-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-html-unsafe-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/tooltip/tooltip-template-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-template-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/popover/popover-template.html", []).run(["$templateCache", function (a) { + a.put("template/popover/popover-template.html", '
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n') +}]), angular.module("template/popover/popover-window.html", []).run(["$templateCache", function (a) { + a.put("template/popover/popover-window.html", '
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n') +}]), angular.module("template/popover/popover.html", []).run(["$templateCache", function (a) { + a.put("template/popover/popover.html", '
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n') +}]), angular.module("template/progressbar/bar.html", []).run(["$templateCache", function (a) { + a.put("template/progressbar/bar.html", '
    \n') +}]), angular.module("template/progressbar/progress.html", []).run(["$templateCache", function (a) { + a.put("template/progressbar/progress.html", '
    ') +}]), angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function (a) { + a.put("template/progressbar/progressbar.html", '
    \n
    \n
    \n') +}]), angular.module("template/rating/rating.html", []).run(["$templateCache", function (a) { + a.put("template/rating/rating.html", '\n \n ({{ $index < value ? \'*\' : \' \' }})\n \n') +}]), angular.module("template/tabs/tab.html", []).run(["$templateCache", function (a) { + a.put("template/tabs/tab.html", '
  • \n {{heading}}\n
  • \n') +}]), angular.module("template/tabs/tabset.html", []).run(["$templateCache", function (a) { + a.put("template/tabs/tabset.html", '
    \n \n
    \n
    \n
    \n
    \n
    \n') +}]), angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function (a) { + a.put("template/timepicker/timepicker.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
     
    \n \n :\n \n
     
    \n') +}]), angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function (a) { + a.put("template/typeahead/typeahead-match.html", '') +}]), angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function (a) { + a.put("template/typeahead/typeahead-popup.html", '\n') +}]), !angular.$$csp() && angular.element(document).find("head").prepend(''); diff --git a/apollo-demo/src/main/webapp/s/styles/angular-toastr-1.4.1.min.css b/apollo-demo/src/main/webapp/s/styles/angular-toastr-1.4.1.min.css index f3ac347b7..75c624600 100644 --- a/apollo-demo/src/main/webapp/s/styles/angular-toastr-1.4.1.min.css +++ b/apollo-demo/src/main/webapp/s/styles/angular-toastr-1.4.1.min.css @@ -1 +1,233 @@ -.toast-title{font-weight:700}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}.toast{opacity:1!important}.toast.ng-enter{opacity:0!important;transition:opacity .3s linear}.toast.ng-enter.ng-enter-active{opacity:1!important}.toast.ng-leave{opacity:1;transition:opacity .3s linear}.toast.ng-leave.ng-leave-active{opacity:0!important}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px)and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px)and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}} \ No newline at end of file +.toast-title { + font-weight: 700 +} + +.toast-message { + word-wrap: break-word +} + +.toast-message a, .toast-message label { + color: #fff +} + +.toast-message a:hover { + color: #ccc; + text-decoration: none +} + +.toast-close-button { + position: relative; + right: -.3em; + top: -.3em; + float: right; + font-size: 20px; + font-weight: 700; + color: #fff; + -webkit-text-shadow: 0 1px 0 #fff; + text-shadow: 0 1px 0 #fff; + opacity: .8 +} + +.toast-close-button:focus, .toast-close-button:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .4 +} + +button.toast-close-button { + padding: 0; + cursor: pointer; + background: 0 0; + border: 0; + -webkit-appearance: none +} + +.toast-top-center { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-center { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-full-width { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-full-width { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-left { + top: 12px; + left: 12px +} + +.toast-top-right { + top: 12px; + right: 12px +} + +.toast-bottom-right { + right: 12px; + bottom: 12px +} + +.toast-bottom-left { + bottom: 12px; + left: 12px +} + +#toast-container { + position: fixed; + z-index: 999999 +} + +#toast-container * { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box +} + +#toast-container > div { + position: relative; + overflow: hidden; + margin: 0 0 6px; + padding: 15px 15px 15px 50px; + width: 300px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background-position: 15px center; + background-repeat: no-repeat; + -moz-box-shadow: 0 0 12px #999; + -webkit-box-shadow: 0 0 12px #999; + box-shadow: 0 0 12px #999; + color: #fff; + opacity: .8 +} + +#toast-container > :hover { + -moz-box-shadow: 0 0 12px #000; + -webkit-box-shadow: 0 0 12px #000; + box-shadow: 0 0 12px #000; + opacity: 1; + cursor: pointer +} + +#toast-container > .toast-info { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-error { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-success { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==) !important +} + +#toast-container > .toast-warning { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=) !important +} + +#toast-container.toast-bottom-center > div, #toast-container.toast-top-center > div { + width: 300px; + margin: auto +} + +#toast-container.toast-bottom-full-width > div, #toast-container.toast-top-full-width > div { + width: 96%; + margin: auto +} + +.toast { + background-color: #030303 +} + +.toast-success { + background-color: #51a351 +} + +.toast-error { + background-color: #bd362f +} + +.toast-info { + background-color: #2f96b4 +} + +.toast-warning { + background-color: #f89406 +} + +.toast-progress { + position: absolute; + left: 0; + bottom: 0; + height: 4px; + background-color: #000; + opacity: .4 +} + +.toast { + opacity: 1 !important +} + +.toast.ng-enter { + opacity: 0 !important; + transition: opacity .3s linear +} + +.toast.ng-enter.ng-enter-active { + opacity: 1 !important +} + +.toast.ng-leave { + opacity: 1; + transition: opacity .3s linear +} + +.toast.ng-leave.ng-leave-active { + opacity: 0 !important +} + +@media all and (max-width: 240px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 11em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 241px)and (max-width: 480px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 18em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 481px)and (max-width: 768px) { + #toast-container > div { + padding: 15px 15px 15px 50px; + width: 25em + } +} diff --git a/apollo-demo/src/main/webapp/s/styles/loading-bar.min.css b/apollo-demo/src/main/webapp/s/styles/loading-bar.min.css index 0f9f10677..bae538c51 100644 --- a/apollo-demo/src/main/webapp/s/styles/loading-bar.min.css +++ b/apollo-demo/src/main/webapp/s/styles/loading-bar.min.css @@ -1 +1,123 @@ -#loading-bar,#loading-bar-spinner{pointer-events:none;-webkit-pointer-events:none;-webkit-transition:350ms linear all;-moz-transition:350ms linear all;-o-transition:350ms linear all;transition:350ms linear all}#loading-bar-spinner.ng-enter,#loading-bar-spinner.ng-leave.ng-leave-active,#loading-bar.ng-enter,#loading-bar.ng-leave.ng-leave-active{opacity:0}#loading-bar-spinner.ng-enter.ng-enter-active,#loading-bar-spinner.ng-leave,#loading-bar.ng-enter.ng-enter-active,#loading-bar.ng-leave{opacity:1}#loading-bar .bar{-webkit-transition:width 350ms;-moz-transition:width 350ms;-o-transition:width 350ms;transition:width 350ms;background:#29d;position:fixed;z-index:10002;top:0;left:0;width:100%;height:2px;border-bottom-right-radius:1px;border-top-right-radius:1px}#loading-bar .peg{position:absolute;width:70px;right:0;top:0;height:2px;opacity:.45;-moz-box-shadow:#29d 1px 0 6px 1px;-ms-box-shadow:#29d 1px 0 6px 1px;-webkit-box-shadow:#29d 1px 0 6px 1px;box-shadow:#29d 1px 0 6px 1px;-moz-border-radius:100%;-webkit-border-radius:100%;border-radius:100%}#loading-bar-spinner{display:block;position:fixed;z-index:10002;top:10px;left:10px}#loading-bar-spinner .spinner-icon{width:14px;height:14px;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:loading-bar-spinner 400ms linear infinite;-moz-animation:loading-bar-spinner 400ms linear infinite;-ms-animation:loading-bar-spinner 400ms linear infinite;-o-animation:loading-bar-spinner 400ms linear infinite;animation:loading-bar-spinner 400ms linear infinite}@-webkit-keyframes loading-bar-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes loading-bar-spinner{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes loading-bar-spinner{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes loading-bar-spinner{0%{-ms-transform:rotate(0);transform:rotate(0)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-bar-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} \ No newline at end of file +#loading-bar, #loading-bar-spinner { + pointer-events: none; + -webkit-pointer-events: none; + -webkit-transition: 350ms linear all; + -moz-transition: 350ms linear all; + -o-transition: 350ms linear all; + transition: 350ms linear all +} + +#loading-bar-spinner.ng-enter, #loading-bar-spinner.ng-leave.ng-leave-active, #loading-bar.ng-enter, #loading-bar.ng-leave.ng-leave-active { + opacity: 0 +} + +#loading-bar-spinner.ng-enter.ng-enter-active, #loading-bar-spinner.ng-leave, #loading-bar.ng-enter.ng-enter-active, #loading-bar.ng-leave { + opacity: 1 +} + +#loading-bar .bar { + -webkit-transition: width 350ms; + -moz-transition: width 350ms; + -o-transition: width 350ms; + transition: width 350ms; + background: #29d; + position: fixed; + z-index: 10002; + top: 0; + left: 0; + width: 100%; + height: 2px; + border-bottom-right-radius: 1px; + border-top-right-radius: 1px +} + +#loading-bar .peg { + position: absolute; + width: 70px; + right: 0; + top: 0; + height: 2px; + opacity: .45; + -moz-box-shadow: #29d 1px 0 6px 1px; + -ms-box-shadow: #29d 1px 0 6px 1px; + -webkit-box-shadow: #29d 1px 0 6px 1px; + box-shadow: #29d 1px 0 6px 1px; + -moz-border-radius: 100%; + -webkit-border-radius: 100%; + border-radius: 100% +} + +#loading-bar-spinner { + display: block; + position: fixed; + z-index: 10002; + top: 10px; + left: 10px +} + +#loading-bar-spinner .spinner-icon { + width: 14px; + height: 14px; + border: 2px solid transparent; + border-top-color: #29d; + border-left-color: #29d; + border-radius: 50%; + -webkit-animation: loading-bar-spinner 400ms linear infinite; + -moz-animation: loading-bar-spinner 400ms linear infinite; + -ms-animation: loading-bar-spinner 400ms linear infinite; + -o-animation: loading-bar-spinner 400ms linear infinite; + animation: loading-bar-spinner 400ms linear infinite +} + +@-webkit-keyframes loading-bar-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0) + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@-moz-keyframes loading-bar-spinner { + 0% { + -moz-transform: rotate(0); + transform: rotate(0) + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@-o-keyframes loading-bar-spinner { + 0% { + -o-transform: rotate(0); + transform: rotate(0) + } + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@-ms-keyframes loading-bar-spinner { + 0% { + -ms-transform: rotate(0); + transform: rotate(0) + } + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@keyframes loading-bar-spinner { + 0% { + transform: rotate(0) + } + 100% { + transform: rotate(360deg) + } +} diff --git a/apollo-demo/src/main/webapp/s/templates/list.html b/apollo-demo/src/main/webapp/s/templates/list.html index c577f1e03..7e77675a6 100644 --- a/apollo-demo/src/main/webapp/s/templates/list.html +++ b/apollo-demo/src/main/webapp/s/templates/list.html @@ -44,7 +44,8 @@
    - +
    diff --git a/apollo-portal/pom.xml b/apollo-portal/pom.xml index 48d5f9a65..e824ed2e3 100644 --- a/apollo-portal/pom.xml +++ b/apollo-portal/pom.xml @@ -1,50 +1,50 @@ - - com.ctrip.apollo - apollo - 0.0.1-SNAPSHOT - ../pom.xml - - 4.0.0 - apollo-portal - Apollo Portal - - - com.ctrip.apollo - apollo-core - - - org.springframework.cloud - spring-cloud-starter-eureka - - - org.springframework.boot - spring-boot-devtools - true - - - org.springframework.boot - spring-boot-starter-data-jpa - - - com.h2database - h2 - - - mysql - mysql-connector-java - runtime - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + com.ctrip.apollo + apollo + 0.0.1-SNAPSHOT + ../pom.xml + + 4.0.0 + apollo-portal + Apollo Portal + + + com.ctrip.apollo + apollo-core + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-devtools + true + + + org.springframework.boot + spring-boot-starter-data-jpa + + + com.h2database + h2 + + + mysql + mysql-connector-java + runtime + - - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/PortalApplication.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/PortalApplication.java index 7597248a1..aa66bb029 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/PortalApplication.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/PortalApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class PortalApplication { - + public static void main(String[] args) throws Exception { SpringApplication.run(PortalApplication.class, args); } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/RestUtils.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/RestUtils.java index 0fe693933..ebb1e1972 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/RestUtils.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/RestUtils.java @@ -7,11 +7,11 @@ import org.springframework.web.client.RestTemplate; public class RestUtils { - private static RestTemplate restTemplate = new RestTemplate(); + private static RestTemplate restTemplate = new RestTemplate(); - public static T exchangeInGET(String url, Class responseType) { - ResponseEntity response = - restTemplate.exchange(url, HttpMethod.GET, new HttpEntity((Void) null), responseType); - return response.getBody(); - } + public static T exchangeInGET(String url, Class responseType) { + ResponseEntity response = + restTemplate.exchange(url, HttpMethod.GET, new HttpEntity((Void) null), responseType); + return response.getBody(); + } } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/constants/PortalConstants.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/constants/PortalConstants.java index 6763ac3c1..1c71981fe 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/constants/PortalConstants.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/constants/PortalConstants.java @@ -2,5 +2,5 @@ package com.ctrip.apollo.portal.constants; public interface PortalConstants { - long LASTEST_VERSION_ID = -1; + long LASTEST_VERSION_ID = -1; } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/AppController.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/AppController.java index a8351021a..bd0de3ab6 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/AppController.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/AppController.java @@ -1,6 +1,8 @@ package com.ctrip.apollo.portal.controller; -import java.util.List; +import com.ctrip.apollo.portal.entity.App; +import com.ctrip.apollo.portal.exception.NotFoundException; +import com.ctrip.apollo.portal.service.AppService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; @@ -11,9 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.ctrip.apollo.portal.entity.App; -import com.ctrip.apollo.portal.exception.NotFoundException; -import com.ctrip.apollo.portal.service.AppService; +import java.util.List; @RestController @RequestMapping("/apps") diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/ConfigController.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/ConfigController.java index de6408979..aaf4c861b 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/ConfigController.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/ConfigController.java @@ -4,6 +4,7 @@ import com.ctrip.apollo.portal.constants.PortalConstants; import com.ctrip.apollo.portal.entity.AppConfigVO; import com.ctrip.apollo.portal.exception.NotFoundException; import com.ctrip.apollo.portal.service.ConfigService; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -13,22 +14,23 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/configs") public class ConfigController { - @Autowired - private ConfigService configService; + @Autowired + private ConfigService configService; - @RequestMapping("/{appId}/{env}/{versionId}") - public AppConfigVO detail(@PathVariable long appId, @PathVariable String env, @PathVariable long versionId) { + @RequestMapping("/{appId}/{env}/{versionId}") + public AppConfigVO detail(@PathVariable long appId, @PathVariable String env, + @PathVariable long versionId) { - if (appId <= 0) { - throw new NotFoundException(); - } + if (appId <= 0) { + throw new NotFoundException(); + } - if (versionId == PortalConstants.LASTEST_VERSION_ID) { - return configService.loadLatestConfig(appId); - } else if (versionId > 0) { - return configService.loadReleaseConfig(appId, versionId); - } else { - throw new NotFoundException(); - } + if (versionId == PortalConstants.LASTEST_VERSION_ID) { + return configService.loadLatestConfig(appId); + } else if (versionId > 0) { + return configService.loadReleaseConfig(appId, versionId); + } else { + throw new NotFoundException(); } + } } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/GlobalDefaultExceptionHandler.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/GlobalDefaultExceptionHandler.java index 6df9cfe65..d08d12627 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/GlobalDefaultExceptionHandler.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/GlobalDefaultExceptionHandler.java @@ -1,15 +1,7 @@ package com.ctrip.apollo.portal.controller; -import static org.springframework.http.HttpStatus.BAD_REQUEST; -import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; -import static org.springframework.http.HttpStatus.NOT_FOUND; -import static org.springframework.http.MediaType.APPLICATION_JSON; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.LinkedHashMap; -import java.util.Map; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; +import com.ctrip.apollo.portal.exception.NotFoundException; + import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,7 +11,18 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; -import com.ctrip.apollo.portal.exception.NotFoundException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.LinkedHashMap; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; + +import static org.springframework.http.HttpStatus.BAD_REQUEST; +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; +import static org.springframework.http.HttpStatus.NOT_FOUND; +import static org.springframework.http.MediaType.APPLICATION_JSON; @ControllerAdvice public class GlobalDefaultExceptionHandler { @@ -29,12 +32,13 @@ public class GlobalDefaultExceptionHandler { } private ResponseEntity> handleError(HttpServletRequest request, - HttpStatus status, Throwable ex) { + HttpStatus status, Throwable ex) { return handleError(request, status, ex, ex.getMessage()); } private ResponseEntity> handleError(HttpServletRequest request, - HttpStatus status, Throwable ex, String message) { + HttpStatus status, Throwable ex, + String message) { ex = resolveError(ex); Map errorAttributes = new LinkedHashMap<>(); errorAttributes.put("status", status.value()); @@ -49,13 +53,14 @@ public class GlobalDefaultExceptionHandler { @ExceptionHandler({HttpRequestMethodNotSupportedException.class, HttpMediaTypeException.class}) public ResponseEntity> methodNotSupportedException(HttpServletRequest request, - ServletException ex) { + ServletException ex) { return handleError(request, BAD_REQUEST, ex); } @ExceptionHandler(NotFoundException.class) @ResponseStatus(value = NOT_FOUND) - public void notFound(HttpServletRequest req, NotFoundException ex) {} + public void notFound(HttpServletRequest req, NotFoundException ex) { + } private Throwable resolveError(Throwable ex) { while (ex instanceof ServletException && ex.getCause() != null) { diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/VersionController.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/VersionController.java index ab5eb7f90..8356dfc0e 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/VersionController.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/controller/VersionController.java @@ -2,6 +2,7 @@ package com.ctrip.apollo.portal.controller; import com.ctrip.apollo.core.dto.VersionDTO; import com.ctrip.apollo.portal.service.VersionService; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -13,11 +14,11 @@ import java.util.List; @RequestMapping("/version") public class VersionController { - @Autowired - private VersionService versionService; + @Autowired + private VersionService versionService; - @RequestMapping("/{appId}/{env}") - public List versions(@PathVariable long appId, @PathVariable String env){ - return versionService.findVersionsByApp(appId, env); - } + @RequestMapping("/{appId}/{env}") + public List versions(@PathVariable long appId, @PathVariable String env) { + return versionService.findVersionsByApp(appId, env); + } } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/App.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/App.java index 9088ed51f..c350067aa 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/App.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/App.java @@ -11,7 +11,7 @@ import javax.persistence.Id; public class App implements Serializable { /** - * + * */ private static final long serialVersionUID = 7348554309210401557L; diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/AppConfigVO.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/AppConfigVO.java index 709294e26..1da475b3a 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/AppConfigVO.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/AppConfigVO.java @@ -9,177 +9,174 @@ import java.util.List; public class AppConfigVO { + private long appId; + + private Env env; + + /** + * latest version if version is zero, or is release version + */ + private long versionId; + + /** + * default cluster and app self’s configs + */ + private List defaultClusterConfigs; + + /** + * default cluster and override other app configs + */ + private List overrideAppConfigs; + + /** + * configs in different cluster maybe different. + * overrideClusterConfigs only save diff configs from default cluster. + * For example: + * default cluster has 3 configs: + * {a -> A, b -> B, c -> C} + * + * cluster1 has 1 config + * {b -> D} + * + * if client read cluster1 configs will return {a -> A, b -> D, c -> C} + */ + private List overrideClusterConfigs; + + public AppConfigVO() { + + } + + public static AppConfigVO newInstance(long appId, long versionId) { + AppConfigVO instance = new AppConfigVO(); + instance.setAppId(appId); + instance.setVersionId(versionId); + instance.setDefaultClusterConfigs(new LinkedList<>()); + instance.setOverrideAppConfigs(new LinkedList<>()); + instance.setOverrideClusterConfigs(new LinkedList<>()); + return instance; + } + + public boolean isLatestVersion() { + return versionId == 0; + } + + public static class OverrideAppConfig { + private long appId; + private List configs; - private Env env; - - /** - * latest version if version is zero, or is release version - */ - private long versionId; - - /** - * default cluster and app self’s configs - */ - private List defaultClusterConfigs; - - /** - * default cluster and override other app configs - */ - private List overrideAppConfigs; - - /** - * configs in different cluster maybe different. - * overrideClusterConfigs only save diff configs from default cluster. - * For example: - * default cluster has 3 configs: - * {a -> A, b -> B, c -> C} - * - * cluster1 has 1 config - * {b -> D} - * - * if client read cluster1 configs will return {a -> A, b -> D, c -> C} - * - * - */ - private List overrideClusterConfigs; - - public AppConfigVO(){ + public OverrideAppConfig() { } - public static AppConfigVO newInstance(long appId, long versionId){ - AppConfigVO instance = new AppConfigVO(); - instance.setAppId(appId); - instance.setVersionId(versionId); - instance.setDefaultClusterConfigs(new LinkedList<>()); - instance.setOverrideAppConfigs(new LinkedList<>()); - instance.setOverrideClusterConfigs(new LinkedList<>()); - return instance; + public long getAppId() { + return appId; } - public boolean isLatestVersion() { - return versionId == 0; + public void setAppId(long appId) { + this.appId = appId; } - public static class OverrideAppConfig { - - private long appId; - private List configs; - - public OverrideAppConfig(){ - - } - - public long getAppId() { - return appId; - } - - public void setAppId(long appId) { - this.appId = appId; - } - - public List getConfigs() { - return configs; - } - - public void setConfigs(List configs) { - this.configs = configs; - } - - public void addConfig(ConfigItemDTO config){ - if (configs == null){ - configs = new LinkedList<>(); - } - configs.add(config); - } + public List getConfigs() { + return configs; } + public void setConfigs(List configs) { + this.configs = configs; + } - public static class OverrideClusterConfig { + public void addConfig(ConfigItemDTO config) { + if (configs == null) { + configs = new LinkedList<>(); + } + configs.add(config); + } + } - private String clusterName; - private List configs; - public OverrideClusterConfig(){} + public static class OverrideClusterConfig { - public String getClusterName() { - return clusterName; - } + private String clusterName; + private List configs; - public void setClusterName(String clusterName) { - this.clusterName = clusterName; - } + public OverrideClusterConfig() { + } - public List getConfigs() { - return configs; - } + public String getClusterName() { + return clusterName; + } - public void setConfigs(List configs) { - this.configs = configs; - } + public void setClusterName(String clusterName) { + this.clusterName = clusterName; } + public List getConfigs() { + return configs; + } + public void setConfigs(List configs) { + this.configs = configs; + } + } - public long getAppId() { - return appId; - } + public long getAppId() { + return appId; + } - public void setAppId(long appId) { - this.appId = appId; - } + public void setAppId(long appId) { + this.appId = appId; + } - public Env getEnv() { - return env; - } + public Env getEnv() { + return env; + } - public void setEnv(Env env) { - this.env = env; - } + public void setEnv(Env env) { + this.env = env; + } - public long getVersionId() { - return versionId; - } + public long getVersionId() { + return versionId; + } - public void setVersionId(long versionId) { - this.versionId = versionId; - } + public void setVersionId(long versionId) { + this.versionId = versionId; + } - public List getDefaultClusterConfigs() { - return defaultClusterConfigs; - } + public List getDefaultClusterConfigs() { + return defaultClusterConfigs; + } - public void setDefaultClusterConfigs(List defaultClusterConfigs) { - this.defaultClusterConfigs = defaultClusterConfigs; - } + public void setDefaultClusterConfigs(List defaultClusterConfigs) { + this.defaultClusterConfigs = defaultClusterConfigs; + } - public List getOverrideAppConfigs() { - return overrideAppConfigs; - } + public List getOverrideAppConfigs() { + return overrideAppConfigs; + } - public void setOverrideAppConfigs(List overrideAppConfigs) { - this.overrideAppConfigs = overrideAppConfigs; - } + public void setOverrideAppConfigs(List overrideAppConfigs) { + this.overrideAppConfigs = overrideAppConfigs; + } - public List getOverrideClusterConfigs() { - return overrideClusterConfigs; - } + public List getOverrideClusterConfigs() { + return overrideClusterConfigs; + } - public void setOverrideClusterConfigs(List overrideClusterConfigs) { - this.overrideClusterConfigs = overrideClusterConfigs; - } + public void setOverrideClusterConfigs(List overrideClusterConfigs) { + this.overrideClusterConfigs = overrideClusterConfigs; + } - @Override - public String toString() { - return "Config4PortalDTO{" + - "appId=" + appId + - ", env=" + env + - ", versionId=" + versionId + - ", defaultClusterConfigs=" + defaultClusterConfigs + - ", overrideAppConfigs=" + overrideAppConfigs + - ", overrideClusterConfigs=" + overrideClusterConfigs + - '}'; - } + @Override + public String toString() { + return "Config4PortalDTO{" + + "appId=" + appId + + ", env=" + env + + ", versionId=" + versionId + + ", defaultClusterConfigs=" + defaultClusterConfigs + + ", overrideAppConfigs=" + overrideAppConfigs + + ", overrideClusterConfigs=" + overrideClusterConfigs + + '}'; + } } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/Privilege.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/Privilege.java index 56c759d9e..64a3eb991 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/Privilege.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/entity/Privilege.java @@ -11,7 +11,7 @@ import javax.persistence.Id; public class Privilege implements Serializable { /** - * + * */ private static final long serialVersionUID = -430087307622435118L; diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/enums/Env.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/enums/Env.java index 49fb3ef1a..7d61f41a4 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/enums/Env.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/enums/Env.java @@ -2,31 +2,32 @@ package com.ctrip.apollo.portal.enums; public enum Env { - DEV("dev"), FWS("fws"), FAT("fat"), UAT("uat"), LPT("lpt"), PROD("prod"), TOOLS("tools"), UN_KNOW(""); + DEV("dev"), FWS("fws"), FAT("fat"), UAT("uat"), LPT("lpt"), PROD("prod"), TOOLS("tools"), UN_KNOW( + ""); - private String value; + private String value; - Env(String value) { - this.value = value; - } + Env(String value) { + this.value = value; + } - public static Env valueFrom(String env) { - if (env == null || "".equals(env)) { - return UN_KNOW; - } else if ("dev".equals(env)) { - return DEV; - } else if ("fws".equals(env)) { - return FWS; - } else if ("fat".equals(env)) { - return FAT; - } else if ("uat".equals(env)) { - return UAT; - } else if ("prod".equals(env)) { - return PROD; - } else if ("tools".equals(env)) { - return TOOLS; - } else{ - return UN_KNOW; - } + public static Env valueFrom(String env) { + if (env == null || "".equals(env)) { + return UN_KNOW; + } else if ("dev".equals(env)) { + return DEV; + } else if ("fws".equals(env)) { + return FWS; + } else if ("fat".equals(env)) { + return FAT; + } else if ("uat".equals(env)) { + return UAT; + } else if ("prod".equals(env)) { + return PROD; + } else if ("tools".equals(env)) { + return TOOLS; + } else { + return UN_KNOW; } + } } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/exception/NotFoundException.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/exception/NotFoundException.java index ed2f86a65..1c357f359 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/exception/NotFoundException.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/exception/NotFoundException.java @@ -2,7 +2,7 @@ package com.ctrip.apollo.portal.exception; public class NotFoundException extends RuntimeException { /** - * + * */ private static final long serialVersionUID = 7611357629749481796L; } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/AppRepository.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/AppRepository.java index df631a9d1..317e0f895 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/AppRepository.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/AppRepository.java @@ -1,11 +1,11 @@ package com.ctrip.apollo.portal.repository; +import com.ctrip.apollo.portal.entity.App; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.repository.PagingAndSortingRepository; -import com.ctrip.apollo.portal.entity.App; - public interface AppRepository extends PagingAndSortingRepository { Page findAll(Pageable pageable); diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/PrivilegeRepository.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/PrivilegeRepository.java index 492c93e72..7723b904a 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/PrivilegeRepository.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/repository/PrivilegeRepository.java @@ -1,10 +1,10 @@ package com.ctrip.apollo.portal.repository; -import java.util.List; +import com.ctrip.apollo.portal.entity.Privilege; import org.springframework.data.repository.PagingAndSortingRepository; -import com.ctrip.apollo.portal.entity.Privilege; +import java.util.List; public interface PrivilegeRepository extends PagingAndSortingRepository { diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/AppService.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/AppService.java index 5d54e8cd2..2644f2372 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/AppService.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/AppService.java @@ -1,14 +1,14 @@ package com.ctrip.apollo.portal.service; -import java.util.Date; +import com.ctrip.apollo.portal.entity.App; +import com.ctrip.apollo.portal.repository.AppRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import com.ctrip.apollo.portal.entity.App; -import com.ctrip.apollo.portal.repository.AppRepository; +import java.util.Date; @Service public class AppService { diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/ConfigService.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/ConfigService.java index 668fc8347..6e926f53b 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/ConfigService.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/ConfigService.java @@ -4,20 +4,17 @@ import com.ctrip.apollo.portal.entity.AppConfigVO; public interface ConfigService { - /** - * load config info by appId and versionId - * @param appId - * @param versionId - * @return - */ - AppConfigVO loadReleaseConfig(long appId, long versionId); + /** + * load config info by appId and versionId + */ + AppConfigVO loadReleaseConfig(long appId, long versionId); - /** - * - * @param appId - * @return - */ - AppConfigVO loadLatestConfig(long appId); + /** + * + * @param appId + * @return + */ + AppConfigVO loadLatestConfig(long appId); } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/PrivilegeService.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/PrivilegeService.java index 7ab84b875..81caa0a70 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/PrivilegeService.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/PrivilegeService.java @@ -1,13 +1,13 @@ package com.ctrip.apollo.portal.service; -import java.util.List; +import com.ctrip.apollo.portal.entity.Privilege; +import com.ctrip.apollo.portal.exception.NotFoundException; +import com.ctrip.apollo.portal.repository.PrivilegeRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.ctrip.apollo.portal.entity.Privilege; -import com.ctrip.apollo.portal.exception.NotFoundException; -import com.ctrip.apollo.portal.repository.PrivilegeRepository; +import java.util.List; @Service public class PrivilegeService { diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/VersionService.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/VersionService.java index 7b2569fef..cab55bbc6 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/VersionService.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/VersionService.java @@ -2,6 +2,7 @@ package com.ctrip.apollo.portal.service; import com.ctrip.apollo.core.dto.VersionDTO; import com.ctrip.apollo.portal.RestUtils; + import org.springframework.stereotype.Service; import java.util.List; @@ -9,7 +10,7 @@ import java.util.List; @Service public class VersionService { - public List findVersionsByApp(long appId, String env){ - return RestUtils.exchangeInGET("http://localhost:8090/version/app/" + appId, List.class); - } + public List findVersionsByApp(long appId, String env) { + return RestUtils.exchangeInGET("http://localhost:8090/version/app/" + appId, List.class); + } } diff --git a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/impl/ConfigServiceImpl.java b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/impl/ConfigServiceImpl.java index 8ae841294..4f9cd8f0f 100644 --- a/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/impl/ConfigServiceImpl.java +++ b/apollo-portal/src/main/java/com/ctrip/apollo/portal/service/impl/ConfigServiceImpl.java @@ -1,254 +1,270 @@ package com.ctrip.apollo.portal.service.impl; +import com.google.common.collect.Maps; + import com.ctrip.apollo.core.Constants; -import com.ctrip.apollo.core.dto.*; +import com.ctrip.apollo.core.dto.ClusterDTO; +import com.ctrip.apollo.core.dto.ConfigItemDTO; +import com.ctrip.apollo.core.dto.ReleaseSnapshotDTO; +import com.ctrip.apollo.core.dto.VersionDTO; import com.ctrip.apollo.portal.RestUtils; import com.ctrip.apollo.portal.constants.PortalConstants; import com.ctrip.apollo.portal.entity.AppConfigVO; import com.ctrip.apollo.portal.service.ConfigService; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.Maps; + import org.springframework.stereotype.Service; import java.io.IOException; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; @Service public class ConfigServiceImpl implements ConfigService { - public static final String ADMIN_SERVICE_HOST = "http://localhost:8090"; - private ObjectMapper objectMapper = new ObjectMapper(); + public static final String ADMIN_SERVICE_HOST = "http://localhost:8090"; + private ObjectMapper objectMapper = new ObjectMapper(); - @Override - public AppConfigVO loadReleaseConfig(long appId, long versionId) { + @Override + public AppConfigVO loadReleaseConfig(long appId, long versionId) { - if (appId <= 0 || versionId <= 0) { - return null; - } + if (appId <= 0 || versionId <= 0) { + return null; + } - long releaseId = getReleaseIdFromVersionId(versionId); + long releaseId = getReleaseIdFromVersionId(versionId); - ReleaseSnapshotDTO[] releaseSnapShots = RestUtils.exchangeInGET( - ADMIN_SERVICE_HOST + "/configs/release/" + releaseId, ReleaseSnapshotDTO[].class); - if (releaseSnapShots == null || releaseSnapShots.length == 0) { - return null; - } + ReleaseSnapshotDTO[] releaseSnapShots = RestUtils.exchangeInGET( + ADMIN_SERVICE_HOST + "/configs/release/" + releaseId, ReleaseSnapshotDTO[].class); + if (releaseSnapShots == null || releaseSnapShots.length == 0) { + return null; + } - AppConfigVO appConfigVO = AppConfigVO.newInstance(appId, versionId); + AppConfigVO appConfigVO = AppConfigVO.newInstance(appId, versionId); - for (ReleaseSnapshotDTO snapShot : releaseSnapShots) { - //default cluster - if (Constants.DEFAULT_CLUSTER_NAME.equals(snapShot.getClusterName())) { + for (ReleaseSnapshotDTO snapShot : releaseSnapShots) { + //default cluster + if (Constants.DEFAULT_CLUSTER_NAME.equals(snapShot.getClusterName())) { - collectDefaultClusterConfigs(appId, snapShot, appConfigVO); + collectDefaultClusterConfigs(appId, snapShot, appConfigVO); - } else {//cluster special configs - collectSpecialClusterConfigs(appId, snapShot, appConfigVO); - } - } - return appConfigVO; + } else {//cluster special configs + collectSpecialClusterConfigs(appId, snapShot, appConfigVO); + } } - - private long getReleaseIdFromVersionId(long versionId) { - VersionDTO version = - RestUtils.exchangeInGET(ADMIN_SERVICE_HOST + "/version/" + versionId, VersionDTO.class); - if (version == null) { - return -1; - } - return version.getReleaseId(); + return appConfigVO; + } + + private long getReleaseIdFromVersionId(long versionId) { + VersionDTO version = + RestUtils.exchangeInGET(ADMIN_SERVICE_HOST + "/version/" + versionId, VersionDTO.class); + if (version == null) { + return -1; } + return version.getReleaseId(); + } - private void collectDefaultClusterConfigs(long appId, ReleaseSnapshotDTO snapShot, AppConfigVO appConfigVO) { - - Map> groupedConfigs = - groupConfigsByApp(snapShot.getConfigurations()); + private void collectDefaultClusterConfigs(long appId, ReleaseSnapshotDTO snapShot, + AppConfigVO appConfigVO) { - List overrideAppConfigs = - appConfigVO.getOverrideAppConfigs(); + Map> groupedConfigs = + groupConfigsByApp(snapShot.getConfigurations()); - for (Map.Entry> entry : groupedConfigs.entrySet()) { - long configAppId = entry.getKey(); - List kvs = entry.getValue(); + List overrideAppConfigs = + appConfigVO.getOverrideAppConfigs(); - if (configAppId == appId) { - appConfigVO.setDefaultClusterConfigs(kvs); - } else { + for (Map.Entry> entry : groupedConfigs.entrySet()) { + long configAppId = entry.getKey(); + List kvs = entry.getValue(); - AppConfigVO.OverrideAppConfig overrideAppConfig = - new AppConfigVO.OverrideAppConfig(); - overrideAppConfig.setAppId(configAppId); - overrideAppConfig.setConfigs(kvs); - overrideAppConfigs.add(overrideAppConfig); - } - } + if (configAppId == appId) { + appConfigVO.setDefaultClusterConfigs(kvs); + } else { + AppConfigVO.OverrideAppConfig overrideAppConfig = + new AppConfigVO.OverrideAppConfig(); + overrideAppConfig.setAppId(configAppId); + overrideAppConfig.setConfigs(kvs); + overrideAppConfigs.add(overrideAppConfig); + } } - /** - * appId -> List - */ - private Map> groupConfigsByApp(String configJson) { - if (configJson == null || "".equals(configJson)) { - return Maps.newHashMap(); - } - - Map> appIdMapKVs = new HashMap<>(); + } - String key; - Object value; - Map kvMaps = null; - try { - kvMaps = objectMapper.readValue(configJson, Map.class); - } catch (IOException e) { - //todo log - } - for (Map.Entry entry : kvMaps.entrySet()) { - key = entry.getKey(); - value = entry.getValue(); - - Long appId = getAppIdFromKey(key); - List kvs = appIdMapKVs.get(appId); - if (kvs == null) { - kvs = new LinkedList<>(); - appIdMapKVs.put(appId, kvs); - } - kvs.add(new ConfigItemDTO(key, value.toString())); - } + /** + * appId -> List + */ + private Map> groupConfigsByApp(String configJson) { + if (configJson == null || "".equals(configJson)) { + return Maps.newHashMap(); + } - return appIdMapKVs; + Map> appIdMapKVs = new HashMap<>(); + String key; + Object value; + Map kvMaps = null; + try { + kvMaps = objectMapper.readValue(configJson, Map.class); + } catch (IOException e) { + //todo log } - - private Long getAppIdFromKey(String key) { - return Long.valueOf(key.substring(0, key.indexOf("."))); + for (Map.Entry entry : kvMaps.entrySet()) { + key = entry.getKey(); + value = entry.getValue(); + + Long appId = getAppIdFromKey(key); + List kvs = appIdMapKVs.get(appId); + if (kvs == null) { + kvs = new LinkedList<>(); + appIdMapKVs.put(appId, kvs); + } + kvs.add(new ConfigItemDTO(key, value.toString())); } - private void collectSpecialClusterConfigs(long appId, ReleaseSnapshotDTO snapShot, AppConfigVO appConfigVO) { - List overrideClusterConfigs = - appConfigVO.getOverrideClusterConfigs(); - AppConfigVO.OverrideClusterConfig overrideClusterConfig = - new AppConfigVO.OverrideClusterConfig(); - overrideClusterConfig.setClusterName(snapShot.getClusterName()); - //todo step1: cluster special config can't override other app config - overrideClusterConfig.setConfigs(groupConfigsByApp(snapShot.getConfigurations()).get(appId)); - overrideClusterConfigs.add(overrideClusterConfig); + return appIdMapKVs; + + } + + private Long getAppIdFromKey(String key) { + return Long.valueOf(key.substring(0, key.indexOf("."))); + } + + private void collectSpecialClusterConfigs(long appId, ReleaseSnapshotDTO snapShot, + AppConfigVO appConfigVO) { + List overrideClusterConfigs = + appConfigVO.getOverrideClusterConfigs(); + AppConfigVO.OverrideClusterConfig overrideClusterConfig = + new AppConfigVO.OverrideClusterConfig(); + overrideClusterConfig.setClusterName(snapShot.getClusterName()); + //todo step1: cluster special config can't override other app config + overrideClusterConfig.setConfigs(groupConfigsByApp(snapShot.getConfigurations()).get(appId)); + overrideClusterConfigs.add(overrideClusterConfig); + } + + @Override + public AppConfigVO loadLatestConfig(long appId) { + if (appId <= 0) { + return null; } - @Override - public AppConfigVO loadLatestConfig(long appId) { - if (appId <= 0) { - return null; - } - - ClusterDTO[] clusters = RestUtils.exchangeInGET( - ADMIN_SERVICE_HOST + "/cluster/app/" + appId, ClusterDTO[].class); - if (clusters == null || clusters.length == 0) { - return null; - } - - StringBuilder sb = new StringBuilder(); - for (ClusterDTO cluster : clusters) { - sb.append(cluster.getId()).append(","); - } - - ConfigItemDTO[] configItems = RestUtils.exchangeInGET( - ADMIN_SERVICE_HOST + "/configs/latest?clusterIds=" + sb.substring(0, - sb.length() - 1), ConfigItemDTO[].class); - - return buildAPPConfigVO(appId, Arrays.asList(configItems)); + ClusterDTO[] clusters = RestUtils.exchangeInGET( + ADMIN_SERVICE_HOST + "/cluster/app/" + appId, ClusterDTO[].class); + if (clusters == null || clusters.length == 0) { + return null; } - private AppConfigVO buildAPPConfigVO(long appId, List configItems) { - if (configItems == null || configItems.size() == 0) { - return null; - } - - Map> groupedClusterConfigs = groupConfigByCluster(configItems); - - AppConfigVO appConfigVO = - AppConfigVO.newInstance(appId, PortalConstants.LASTEST_VERSION_ID); + StringBuilder sb = new StringBuilder(); + for (ClusterDTO cluster : clusters) { + sb.append(cluster.getId()).append(","); + } - groupConfigByAppAndEnrichDTO(groupedClusterConfigs, appConfigVO); + ConfigItemDTO[] configItems = RestUtils.exchangeInGET( + ADMIN_SERVICE_HOST + "/configs/latest?clusterIds=" + sb.substring(0, + sb.length() - 1), ConfigItemDTO[].class); - return appConfigVO; + return buildAPPConfigVO(appId, Arrays.asList(configItems)); + } + private AppConfigVO buildAPPConfigVO(long appId, List configItems) { + if (configItems == null || configItems.size() == 0) { + return null; } - private Map> groupConfigByCluster(List configItems) { - Map> groupedClusterConfigs = new HashMap<>(); - - String clusterName; - for (ConfigItemDTO configItem : configItems) { - clusterName = configItem.getClusterName(); - List clusterConfigs = groupedClusterConfigs.get(clusterName); - if (clusterConfigs == null) { - clusterConfigs = new LinkedList<>(); - groupedClusterConfigs.put(clusterName, clusterConfigs); - } - clusterConfigs.add(configItem); - } - return groupedClusterConfigs; - } + Map> groupedClusterConfigs = groupConfigByCluster(configItems); - private void groupConfigByAppAndEnrichDTO(Map> groupedClusterConfigs, AppConfigVO appConfigVO) { - long appId = appConfigVO.getAppId(); + AppConfigVO appConfigVO = + AppConfigVO.newInstance(appId, PortalConstants.LASTEST_VERSION_ID); - List defaultClusterConfigs = appConfigVO.getDefaultClusterConfigs(); + groupConfigByAppAndEnrichDTO(groupedClusterConfigs, appConfigVO); - List overrideAppConfigs = - appConfigVO.getOverrideAppConfigs(); + return appConfigVO; - List overrideClusterConfigs = - appConfigVO.getOverrideClusterConfigs(); + } - String clusterName; - List clusterConfigs; - for (Map.Entry> entry : groupedClusterConfigs.entrySet()) { - clusterName = entry.getKey(); - clusterConfigs = entry.getValue(); + private Map> groupConfigByCluster(List configItems) { + Map> groupedClusterConfigs = new HashMap<>(); - if (Constants.DEFAULT_CLUSTER_NAME.equals(clusterName)) { - //default cluster configs - collectDefaultClusterConfigs(appId, clusterConfigs, defaultClusterConfigs, overrideAppConfigs); - } else { - //override cluster configs - collectSpecialClusterConfigs(clusterName, clusterConfigs, overrideClusterConfigs); - } - } + String clusterName; + for (ConfigItemDTO configItem : configItems) { + clusterName = configItem.getClusterName(); + List clusterConfigs = groupedClusterConfigs.get(clusterName); + if (clusterConfigs == null) { + clusterConfigs = new LinkedList<>(); + groupedClusterConfigs.put(clusterName, clusterConfigs); + } + clusterConfigs.add(configItem); } + return groupedClusterConfigs; + } + + private void groupConfigByAppAndEnrichDTO(Map> groupedClusterConfigs, + AppConfigVO appConfigVO) { + long appId = appConfigVO.getAppId(); + + List defaultClusterConfigs = appConfigVO.getDefaultClusterConfigs(); + + List overrideAppConfigs = + appConfigVO.getOverrideAppConfigs(); + + List overrideClusterConfigs = + appConfigVO.getOverrideClusterConfigs(); + + String clusterName; + List clusterConfigs; + for (Map.Entry> entry : groupedClusterConfigs.entrySet()) { + clusterName = entry.getKey(); + clusterConfigs = entry.getValue(); + + if (Constants.DEFAULT_CLUSTER_NAME.equals(clusterName)) { + //default cluster configs + collectDefaultClusterConfigs(appId, clusterConfigs, defaultClusterConfigs, + overrideAppConfigs); + } else { + //override cluster configs + collectSpecialClusterConfigs(clusterName, clusterConfigs, overrideClusterConfigs); + } + } + } - private void collectDefaultClusterConfigs(long appId, List clusterConfigs, List defaultClusterConfigs, List overrideAppConfigs) { - - Map appIdMapOverrideAppConfig = null; + private void collectDefaultClusterConfigs(long appId, List clusterConfigs, + List defaultClusterConfigs, + List overrideAppConfigs) { - for (ConfigItemDTO config : clusterConfigs) { - long targetAppId = config.getAppId(); - if (appId == targetAppId) {//app self's configs - defaultClusterConfigs.add(config); - } else {//override other app configs - if (appIdMapOverrideAppConfig == null) { - appIdMapOverrideAppConfig = new HashMap<>(); - } + Map appIdMapOverrideAppConfig = null; - AppConfigVO.OverrideAppConfig overrideAppConfig = - appIdMapOverrideAppConfig.get(targetAppId); + for (ConfigItemDTO config : clusterConfigs) { + long targetAppId = config.getAppId(); + if (appId == targetAppId) {//app self's configs + defaultClusterConfigs.add(config); + } else {//override other app configs + if (appIdMapOverrideAppConfig == null) { + appIdMapOverrideAppConfig = new HashMap<>(); + } - if (overrideAppConfig == null) { - overrideAppConfig = new AppConfigVO.OverrideAppConfig(); - appIdMapOverrideAppConfig.put(targetAppId, overrideAppConfig); - overrideAppConfigs.add(overrideAppConfig); - } + AppConfigVO.OverrideAppConfig overrideAppConfig = + appIdMapOverrideAppConfig.get(targetAppId); - overrideAppConfig.setAppId(targetAppId); - overrideAppConfig.addConfig(config); - } + if (overrideAppConfig == null) { + overrideAppConfig = new AppConfigVO.OverrideAppConfig(); + appIdMapOverrideAppConfig.put(targetAppId, overrideAppConfig); + overrideAppConfigs.add(overrideAppConfig); } - } - private void collectSpecialClusterConfigs(String clusterName, List clusterConfigs, List overrideClusterConfigs) { - AppConfigVO.OverrideClusterConfig overrideClusterConfig = - new AppConfigVO.OverrideClusterConfig(); - overrideClusterConfig.setClusterName(clusterName); - overrideClusterConfig.setConfigs(clusterConfigs); - overrideClusterConfigs.add(overrideClusterConfig); + overrideAppConfig.setAppId(targetAppId); + overrideAppConfig.addConfig(config); + } } + } + + private void collectSpecialClusterConfigs(String clusterName, List clusterConfigs, + List overrideClusterConfigs) { + AppConfigVO.OverrideClusterConfig overrideClusterConfig = + new AppConfigVO.OverrideClusterConfig(); + overrideClusterConfig.setClusterName(clusterName); + overrideClusterConfig.setConfigs(clusterConfigs); + overrideClusterConfigs.add(overrideClusterConfig); + } } diff --git a/apollo-portal/src/main/resources/static/scripts/app.js b/apollo-portal/src/main/resources/static/scripts/app.js index e471d1ab7..a29639b8d 100644 --- a/apollo-portal/src/main/resources/static/scripts/app.js +++ b/apollo-portal/src/main/resources/static/scripts/app.js @@ -16,11 +16,11 @@ application_module.config(['$stateProvider', templateUrl: '../../views/app/config.html', controller: 'AppConfigController' }).state('info', { - templateUrl: '../../views/app/info.html', - controller: 'AppInfoController' - }).state('setting', { - templateUrl: '../../views/app/setting.html' - }); + templateUrl: '../../views/app/info.html', + controller: 'AppInfoController' + }).state('setting', { + templateUrl: '../../views/app/setting.html' + }); }]).run(function ($state) { $state.go('config'); }); diff --git a/apollo-portal/src/main/resources/static/scripts/controller/CreateAppController.js b/apollo-portal/src/main/resources/static/scripts/controller/CreateAppController.js index 266f9d68c..85ff66e3f 100644 --- a/apollo-portal/src/main/resources/static/scripts/controller/CreateAppController.js +++ b/apollo-portal/src/main/resources/static/scripts/controller/CreateAppController.js @@ -1,24 +1,24 @@ create_app_module.controller('CreateAppController', ['$scope', '$window', 'toastr', 'AppService', function ($scope, $window, toastr, AppService) { - //todo 便于测试,后续删掉 - $scope.app = { - appId: 1001, - name: 'lepdou', - ownerPhone: '1111', - ownerMail: 'qqq@qq.com', - owner: 'le' - }; + //todo 便于测试,后续删掉 + $scope.app = { + appId: 1001, + name: 'lepdou', + ownerPhone: '1111', + ownerMail: 'qqq@qq.com', + owner: 'le' + }; - $scope.save = function(){ - AppService.add($scope.app).then(function(result){ - toastr.success('添加成功!'); - setInterval(function(){ - $window.location.href = '/views/app/index.html?#appid=' + result.appId; - },1000); - },function(result){ - toastr.error('添加失败!'); - }); - }; + $scope.save = function () { + AppService.add($scope.app).then(function (result) { + toastr.success('添加成功!'); + setInterval(function () { + $window.location.href = '/views/app/index.html?#appid=' + result.appId; + }, 1000); + }, function (result) { + toastr.error('添加失败!'); + }); + }; -}]); + }]); diff --git a/apollo-portal/src/main/resources/static/scripts/controller/app/AppPageController.js b/apollo-portal/src/main/resources/static/scripts/controller/app/AppPageController.js index 008b5f610..c3f2faa3a 100644 --- a/apollo-portal/src/main/resources/static/scripts/controller/app/AppPageController.js +++ b/apollo-portal/src/main/resources/static/scripts/controller/app/AppPageController.js @@ -4,7 +4,7 @@ application_module.controller("AppPageController", ['$rootScope', '$location', $rootScope.appId = $location.$$url.split("=")[1]; - if(!$rootScope.appId){ + if (!$rootScope.appId) { $rootScope.appId = 6666; } diff --git a/apollo-portal/src/main/resources/static/styles/common-style.css b/apollo-portal/src/main/resources/static/styles/common-style.css index e52258e7f..c0565635b 100644 --- a/apollo-portal/src/main/resources/static/styles/common-style.css +++ b/apollo-portal/src/main/resources/static/styles/common-style.css @@ -4,7 +4,7 @@ body { padding: 0px !important; margin: 0px !important; font-size: 13px; - padding-bottom:50px; + padding-bottom: 50px; } .container { diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular-cookies.min.js b/apollo-portal/src/main/resources/static/vendor/angular/angular-cookies.min.js index 36b74e96f..8a765e3a1 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular-cookies.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular-cookies.min.js @@ -2,8 +2,64 @@ AngularJS v1.4.3 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT -*/ -(function(p,g,l){'use strict';function m(b,a,f){var c=f.baseHref(),k=b[0];return function(b,d,e){var f,h;e=e||{};h=e.expires;f=g.isDefined(e.path)?e.path:c;d===l&&(h="Thu, 01 Jan 1970 00:00:00 GMT",d="");g.isString(h)&&(h=new Date(h));d=encodeURIComponent(b)+"="+encodeURIComponent(d);d=d+(f?";path="+f:"")+(e.domain?";domain="+e.domain:"");d+=h?";expires="+h.toUTCString():"";d+=e.secure?";secure":"";e=d.length+1;4096 4096 bytes)!");k.cookie=d}}g.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,f){return{get:function(c){return a()[c]},getObject:function(c){return(c=this.get(c))?g.fromJson(c):c},getAll:function(){return a()},put:function(c,a,n){f(c,a,n?g.extend({},b,n):b)},putObject:function(c,b,a){this.put(c,g.toJson(b),a)},remove:function(a,k){f(a,l,k?g.extend({},b,k):b)}}}]}]);g.module("ngCookies").factory("$cookieStore", -["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,f){b.putObject(a,f)},remove:function(a){b.remove(a)}}}]);m.$inject=["$document","$log","$browser"];g.module("ngCookies").provider("$$cookieWriter",function(){this.$get=m})})(window,window.angular); + */ +(function (p, g, l) { + 'use strict'; + function m(b, a, f) { + var c = f.baseHref(), k = b[0]; + return function (b, d, e) { + var f, h; + e = e || {}; + h = e.expires; + f = g.isDefined(e.path) ? e.path : c; + d === l && (h = "Thu, 01 Jan 1970 00:00:00 GMT", d = ""); + g.isString(h) && (h = new Date(h)); + d = encodeURIComponent(b) + "=" + encodeURIComponent(d); + d = d + (f ? ";path=" + f : "") + (e.domain ? ";domain=" + e.domain : ""); + d += h ? ";expires=" + h.toUTCString() : ""; + d += e.secure ? ";secure" : ""; + e = d.length + 1; + 4096 < e && a.warn("Cookie '" + b + "' possibly not set or overflowed because it was too large (" + + e + " > 4096 bytes)!"); + k.cookie = d + } + } + + g.module("ngCookies", ["ng"]).provider("$cookies", [function () { + var b = this.defaults = {}; + this.$get = ["$$cookieReader", "$$cookieWriter", function (a, f) { + return { + get: function (c) { + return a()[c] + }, getObject: function (c) { + return (c = this.get(c)) ? g.fromJson(c) : c + }, getAll: function () { + return a() + }, put: function (c, a, n) { + f(c, a, n ? g.extend({}, b, n) : b) + }, putObject: function (c, b, a) { + this.put(c, g.toJson(b), a) + }, remove: function (a, k) { + f(a, l, k ? g.extend({}, b, k) : b) + } + } + }] + }]); + g.module("ngCookies").factory("$cookieStore", + ["$cookies", function (b) { + return { + get: function (a) { + return b.getObject(a) + }, put: function (a, f) { + b.putObject(a, f) + }, remove: function (a) { + b.remove(a) + } + } + }]); + m.$inject = ["$document", "$log", "$browser"]; + g.module("ngCookies").provider("$$cookieWriter", function () { + this.$get = m + }) +})(window, window.angular); //# sourceMappingURL=angular-cookies.min.js.map diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular-resource.min.js b/apollo-portal/src/main/resources/static/vendor/angular/angular-resource.min.js index 079811790..499808296 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular-resource.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular-resource.min.js @@ -2,12 +2,180 @@ AngularJS v1.4.3 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT -*/ -(function(I,d,B){'use strict';function D(f,q){q=q||{};d.forEach(q,function(d,h){delete q[h]});for(var h in f)!f.hasOwnProperty(h)||"$"===h.charAt(0)&&"$"===h.charAt(1)||(q[h]=f[h]);return q}var x=d.$$minErr("$resource"),C=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var f=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}}; -this.$get=["$http","$q",function(q,h){function u(d,g){this.template=d;this.defaults=s({},f.defaults,g);this.urlParams={}}function w(y,g,l,m){function c(b,k){var c={};k=s({},g,k);r(k,function(a,k){v(a)&&(a=a());var d;if(a&&a.charAt&&"@"==a.charAt(0)){d=b;var e=a.substr(1);if(null==e||""===e||"hasOwnProperty"===e||!C.test("."+e))throw x("badmember",e);for(var e=e.split("."),n=0,g=e.length;n (https://github.com/mgcrea) * @license MIT License, http://www.opensource.org/licenses/MIT */ -!function(e,t,n){'use strict';angular.module('mgcrea.ngStrap',['mgcrea.ngStrap.modal','mgcrea.ngStrap.aside','mgcrea.ngStrap.alert','mgcrea.ngStrap.button','mgcrea.ngStrap.select','mgcrea.ngStrap.datepicker','mgcrea.ngStrap.timepicker','mgcrea.ngStrap.navbar','mgcrea.ngStrap.tooltip','mgcrea.ngStrap.popover','mgcrea.ngStrap.dropdown','mgcrea.ngStrap.typeahead','mgcrea.ngStrap.scrollspy','mgcrea.ngStrap.affix','mgcrea.ngStrap.tab','mgcrea.ngStrap.collapse']),angular.module('mgcrea.ngStrap.affix',['mgcrea.ngStrap.helpers.dimensions','mgcrea.ngStrap.helpers.debounce']).provider('$affix',function(){var e=this.defaults={offsetTop:'auto',inlineStyles:!0};this.$get=['$window','debounce','dimensions',function(t,n,a){function o(o,s){function l(e,t,n){var a=u(),o=c();return v>=a?'top':null!==e&&a+e<=t.top?'middle':null!==w&&t.top+n+$>=o-w?'bottom':'middle'}function u(){return p[0]===t?t.pageYOffset:p[0].scrollTop}function c(){return p[0]===t?t.document.body.scrollHeight:p[0].scrollHeight}var d={},f=angular.extend({},e,s),p=f.target,g='affix affix-top affix-bottom',m=!1,$=0,h=0,v=0,w=0,y=null,b=null,D=o.parent();if(f.offsetParent)if(f.offsetParent.match(/^\d+$/))for(var k=0;k<1*f.offsetParent-1;k++)D=D.parent();else D=angular.element(f.offsetParent);return d.init=function(){this.$parseOffsets(),h=a.offset(o[0]).top+$,m=!o[0].style.width,p.on('scroll',this.checkPosition),p.on('click',this.checkPositionWithEventLoop),r.on('resize',this.$debouncedOnResize),this.checkPosition(),this.checkPositionWithEventLoop()},d.destroy=function(){p.off('scroll',this.checkPosition),p.off('click',this.checkPositionWithEventLoop),r.off('resize',this.$debouncedOnResize)},d.checkPositionWithEventLoop=function(){setTimeout(d.checkPosition,1)},d.checkPosition=function(){var e=u(),t=a.offset(o[0]),n=a.height(o[0]),r=l(b,t,n);y!==r&&(y=r,o.removeClass(g).addClass('affix'+('middle'!==r?'-'+r:'')),'top'===r?(b=null,m&&o.css('width',''),f.inlineStyles&&(o.css('position',f.offsetParent?'':'relative'),o.css('top',''))):'bottom'===r?(b=f.offsetUnpin?-(1*f.offsetUnpin):t.top-e,m&&o.css('width',''),f.inlineStyles&&(o.css('position',f.offsetParent?'':'relative'),o.css('top',f.offsetParent?'':i[0].offsetHeight-w-n-h+'px'))):(b=null,m&&o.css('width',o[0].offsetWidth+'px'),f.inlineStyles&&(o.css('position','fixed'),o.css('top',$+'px'))))},d.$onResize=function(){d.$parseOffsets(),d.checkPosition()},d.$debouncedOnResize=n(d.$onResize,50),d.$parseOffsets=function(){var e=o.css('position');f.inlineStyles&&o.css('position',f.offsetParent?'':'relative'),f.offsetTop&&('auto'===f.offsetTop&&(f.offsetTop='+0'),f.offsetTop.match(/^[-+]\d+$/)?($=1*-f.offsetTop,v=f.offsetParent?a.offset(D[0]).top+1*f.offsetTop:a.offset(o[0]).top-a.css(o[0],'marginTop',!0)+1*f.offsetTop):v=1*f.offsetTop),f.offsetBottom&&(w=f.offsetParent&&f.offsetBottom.match(/^[-+]\d+$/)?c()-(a.offset(D[0]).top+a.height(D[0]))+1*f.offsetBottom+1:1*f.offsetBottom),f.inlineStyles&&o.css('position',e)},d.init(),d}var i=angular.element(t.document.body),r=angular.element(t);return o}]}).directive('bsAffix',['$affix','$window',function(e,t){return{restrict:'EAC',require:'^?bsAffixTarget',link:function(n,a,o,i){var r={scope:n,target:i?i.$element:angular.element(t)};angular.forEach(['offsetTop','offsetBottom','offsetParent','offsetUnpin','inlineStyles'],function(e){if(angular.isDefined(o[e])){var t=o[e];/true/i.test(t)&&(t=!0),/false/i.test(t)&&(t=!1),r[e]=t}});var s=e(a,r);n.$on('$destroy',function(){s&&s.destroy(),r=null,s=null})}}}]).directive('bsAffixTarget',function(){return{controller:['$element',function(e){this.$element=e}]}}),angular.module('mgcrea.ngStrap.alert',['mgcrea.ngStrap.modal']).provider('$alert',function(){var e=this.defaults={animation:'am-fade',prefixClass:'alert',prefixEvent:'alert',placement:null,template:'alert/alert.tpl.html',container:!1,element:null,backdrop:!1,keyboard:!0,show:!0,duration:!1,type:!1,dismissable:!0};this.$get=['$modal','$timeout',function(t,n){function a(a){var o={},i=angular.extend({},e,a);o=t(i),o.$scope.dismissable=!!i.dismissable,i.type&&(o.$scope.type=i.type);var r=o.show;return i.duration&&(o.show=function(){r(),n(function(){o.hide()},1e3*i.duration)}),o}return a}]}).directive('bsAlert',['$window','$sce','$alert',function(e,t,n){e.requestAnimationFrame||e.setTimeout;return{restrict:'EAC',scope:!0,link:function(e,a,o,i){var r={scope:e,element:a,show:!1};angular.forEach(['template','placement','keyboard','html','container','animation','duration','dismissable'],function(e){angular.isDefined(o[e])&&(r[e]=o[e])});var s=/^(false|0|)$/i;angular.forEach(['keyboard','html','container','dismissable'],function(e){angular.isDefined(o[e])&&s.test(o[e])&&(r[e]=!1)}),e.hasOwnProperty('title')||(e.title=''),angular.forEach(['title','content','type'],function(n){o[n]&&o.$observe(n,function(a,o){e[n]=t.trustAsHtml(a)})}),o.bsAlert&&e.$watch(o.bsAlert,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var l=n(r);a.on(o.trigger||'click',l.toggle),e.$on('$destroy',function(){l&&l.destroy(),r=null,l=null})}}}]),angular.module('mgcrea.ngStrap.aside',['mgcrea.ngStrap.modal']).provider('$aside',function(){var e=this.defaults={animation:'am-fade-and-slide-right',prefixClass:'aside',prefixEvent:'aside',placement:'right',template:'aside/aside.tpl.html',contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=['$modal',function(t){function n(n){var a={},o=angular.extend({},e,n);return a=t(o)}return n}]}).directive('bsAside',['$window','$sce','$aside',function(e,t,n){e.requestAnimationFrame||e.setTimeout;return{restrict:'EAC',scope:!0,link:function(e,a,o,i){var r={scope:e,element:a,show:!1};angular.forEach(['template','contentTemplate','placement','backdrop','keyboard','html','container','animation'],function(e){angular.isDefined(o[e])&&(r[e]=o[e])});var s=/^(false|0|)$/i;angular.forEach(['backdrop','keyboard','html','container'],function(e){angular.isDefined(o[e])&&s.test(o[e])&&(r[e]=!1)}),angular.forEach(['title','content'],function(n){o[n]&&o.$observe(n,function(a,o){e[n]=t.trustAsHtml(a)})}),o.bsAside&&e.$watch(o.bsAside,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var l=n(r);a.on(o.trigger||'click',l.toggle),e.$on('$destroy',function(){l&&l.destroy(),r=null,l=null})}}}]),angular.module('mgcrea.ngStrap.button',[]).provider('$button',function(){var e=this.defaults={activeClass:'active',toggleEvent:'click'};this.$get=function(){return{defaults:e}}}).directive('bsCheckboxGroup',function(){return{restrict:'A',require:'ngModel',compile:function(e,t){e.attr('data-toggle','buttons'),e.removeAttr('ng-model');var n=e[0].querySelectorAll('input[type="checkbox"]');angular.forEach(n,function(e){var n=angular.element(e);n.attr('bs-checkbox',''),n.attr('ng-model',t.ngModel+'.'+n.attr('value'))})}}}).directive('bsCheckbox',['$button','$$rAF',function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:'A',require:'ngModel',link:function(e,o,i,r){var s=n,l='INPUT'===o[0].nodeName,u=l?o.parent():o,c=angular.isDefined(i.trueValue)?i.trueValue:!0;a.test(i.trueValue)&&(c=e.$eval(i.trueValue));var d=angular.isDefined(i.falseValue)?i.falseValue:!1;a.test(i.falseValue)&&(d=e.$eval(i.falseValue));var f='boolean'!=typeof c||'boolean'!=typeof d;f&&(r.$parsers.push(function(e){return e?c:d}),r.$formatters.push(function(e){return angular.equals(e,c)}),e.$watch(i.ngModel,function(e,t){r.$render()})),r.$render=function(){var e=angular.equals(r.$modelValue,c);t(function(){l&&(o[0].checked=e),u.toggleClass(s.activeClass,e)})},o.bind(s.toggleEvent,function(){e.$apply(function(){l||r.$setViewValue(!u.hasClass('active')),f||r.$render()})})}}}]).directive('bsRadioGroup',function(){return{restrict:'A',require:'ngModel',compile:function(e,t){e.attr('data-toggle','buttons'),e.removeAttr('ng-model');var n=e[0].querySelectorAll('input[type="radio"]');angular.forEach(n,function(e){angular.element(e).attr('bs-radio',''),angular.element(e).attr('ng-model',t.ngModel)})}}}).directive('bsRadio',['$button','$$rAF',function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:'A',require:'ngModel',link:function(e,o,i,r){var s,l=n,u='INPUT'===o[0].nodeName,c=u?o.parent():o;i.$observe('value',function(t){s=a.test(t)?e.$eval(t):t,r.$render()}),r.$render=function(){var e=angular.equals(r.$modelValue,s);t(function(){u&&(o[0].checked=e),c.toggleClass(l.activeClass,e)})},o.bind(l.toggleEvent,function(){e.$apply(function(){r.$setViewValue(s),r.$render()})})}}}]),angular.module('mgcrea.ngStrap.collapse',[]).provider('$collapse',function(){var e=this.defaults={animation:'am-collapse',disallowToggle:!1,activeClass:'in',startCollapsed:!1,allowMultiple:!1},t=this.controller=function(t,n,a){function o(e){for(var t=l.$targets.$active,n=0;nt;t++)angular.forEach(g.rows[t],u.$setDisabledEl)},u.select=function(e,t){angular.isDate(n.$dateValue)||(n.$dateValue=new Date(e)),!g.$mode||t?(n.$setViewValue(angular.copy(e)),n.$render(),p.autoclose&&!t&&l(function(){u.hide(!0)})):(angular.extend($,{year:e.getFullYear(),month:e.getMonth(),date:e.getDate()}),u.setMode(g.$mode-1),u.$build())},u.setMode=function(e){g.$mode=e,h=u.$views[g.$mode],u.$build()},u.$build=function(e){e===!0&&h.built||(e!==!1||h.built)&&h.build.call(h)},u.$updateSelected=function(){for(var e=0,t=g.rows.length;t>e;e++)angular.forEach(g.rows[e],o)},u.$isSelected=function(e){return h.isSelected(e)},u.$setDisabledEl=function(e){e.disabled=h.isDisabled(e.date)},u.$selectPane=function(e){var t=h.steps,n=new Date(Date.UTC($.year+(t.year||0)*e,$.month+(t.month||0)*e,1));angular.extend($,{year:n.getUTCFullYear(),month:n.getUTCMonth(),date:n.getUTCDate()}),u.$build()},u.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),d){var t=angular.element(e.target);'button'!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler('click')}},u.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return g.$mode?g.$apply(function(){u.setMode(g.$mode-1)}):u.hide(!0);h.onKeyDown(e),f.$digest()}};var v=u.init;u.init=function(){return c&&p.useNative?(t.prop('type','date'),void t.css('-webkit-appearance','textfield')):(d&&(t.prop('type','text'),t.attr('readonly','true'),t.on('click',i)),void v())};var w=u.destroy;u.destroy=function(){c&&p.useNative&&t.off('click',i),w()};var y=u.show;u.show=function(){y(),l(function(){u.$isShown&&(u.$element.on(d?'touchstart':'mousedown',u.$onMouseDown),p.keyboard&&t.on('keydown',u.$onKeyDown))},0,!1)};var b=u.hide;return u.hide=function(e){u.$isShown&&(u.$element.off(d?'touchstart':'mousedown',u.$onMouseDown),p.keyboard&&t.off('keydown',u.$onKeyDown),b(e))},u}var c=(angular.element(t.document.body),/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)),d='createTouch'in t.document&&c;return e.lang||(e.lang=i.getDefaultLocale()),u.defaults=e,u}]}).directive('bsDatepicker',['$window','$parse','$q','$dateFormatter','$dateParser','$datepicker',function(e,t,n,a,o,i){var r=(i.defaults,/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent));return{restrict:'EAC',require:'ngModel',link:function(e,t,n,s){function l(e){return e&&e.length?e:null}function u(e){if(angular.isDate(e)){var t=isNaN(p.$options.minDate)||e.getTime()>=p.$options.minDate,n=isNaN(p.$options.maxDate)||e.getTime()<=p.$options.maxDate,a=t&&n;s.$setValidity('date',a),s.$setValidity('min',t),s.$setValidity('max',n),a&&(s.$dateValue=e)}}function c(){return!s.$dateValue||isNaN(s.$dateValue.getTime())?'':m(s.$dateValue,d.dateFormat)}var d={scope:e,controller:s};angular.forEach(['placement','container','delay','trigger','html','animation','template','autoclose','dateType','dateFormat','timezone','modelDateFormat','dayFormat','strictFormat','startWeek','startDate','useNative','lang','startView','minView','iconLeft','iconRight','daysOfWeekDisabled','id','prefixClass','prefixEvent'],function(e){angular.isDefined(n[e])&&(d[e]=n[e])});var f=/^(false|0|)$/i;angular.forEach(['html','container','autoclose','useNative'],function(e){angular.isDefined(n[e])&&f.test(n[e])&&(d[e]=!1)}),n.bsShow&&e.$watch(n.bsShow,function(e,t){p&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(datepicker),?/i)),e===!0?p.show():p.hide())});var p=i(t,s,d);d=p.$options,r&&d.useNative&&(d.dateFormat='yyyy-MM-dd');var g=d.lang,m=function(e,t){return a.formatDate(e,t,g)},$=o({format:d.dateFormat,lang:g,strict:d.strictFormat});angular.forEach(['minDate','maxDate'],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){p.$options[e]=$.getDateForAttribute(e,t),!isNaN(p.$options[e])&&p.$build(!1),u(s.$dateValue)})}),e.$watch(n.ngModel,function(e,t){p.update(s.$dateValue)},!0),angular.isDefined(n.disabledDates)&&e.$watch(n.disabledDates,function(e,t){e=l(e),t=l(t),e&&p.updateDisabledDates(e)}),s.$parsers.unshift(function(e){var t;if(!e)return s.$setValidity('date',!0),null;var n=$.parse(e,s.$dateValue);return!n||isNaN(n.getTime())?void s.$setValidity('date',!1):(u(n),'string'===d.dateType?(t=$.timezoneOffsetAdjust(n,d.timezone,!0),m(t,d.modelDateFormat||d.dateFormat)):(t=$.timezoneOffsetAdjust(s.$dateValue,d.timezone,!0),'number'===d.dateType?t.getTime():'unix'===d.dateType?t.getTime()/1e3:'iso'===d.dateType?t.toISOString():new Date(t)))}),s.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:'string'===d.dateType?$.parse(e,null,d.modelDateFormat):new Date('unix'===d.dateType?1e3*e:e),s.$dateValue=$.timezoneOffsetAdjust(t,d.timezone),c()}),s.$render=function(){t.val(c())},e.$on('$destroy',function(){p&&p.destroy(),d=null,p=null})}}}]).provider('datepickerViews',function(){function e(e,t){for(var n=[];e.length>0;)n.push(e.splice(0,t));return n}function t(e,t){return(e%t+t)%t}this.defaults={dayFormat:'dd',daySplit:7};this.$get=['$dateFormatter','$dateParser','$sce',function(n,a,o){return function(i){var r=i.$scope,s=i.$options,l=s.lang,u=function(e,t){return n.formatDate(e,t,l)},c=a({format:s.dateFormat,lang:l,strict:s.strictFormat}),d=n.weekdaysShort(l),f=d.slice(s.startWeek).concat(d.slice(0,s.startWeek)),p=o.trustAsHtml(''+f.join('')+''),g=i.$date||(s.startDate?c.getDateForAttribute('startDate',s.startDate):new Date),m={year:g.getFullYear(),month:g.getMonth(),date:g.getDate()},$=[{format:s.dayFormat,split:7,steps:{month:1},update:function(e,t){!this.built||t||e.getFullYear()!==m.year||e.getMonth()!==m.month?(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):(e.getDate()!==m.date||1===e.getDate())&&(m.date=i.$date.getDate(),i.$updateSelected())},build:function(){var n=new Date(m.year,m.month,1),a=n.getTimezoneOffset(),o=new Date(+n-864e5*t(n.getDay()-s.startWeek,7)),l=o.getTimezoneOffset(),d=c.timezoneOffsetAdjust(new Date,s.timezone).toDateString();l!==a&&(o=new Date(+o+6e4*(l-a)));for(var f,g=[],$=0;42>$;$++)f=c.daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth(),o.getDate()+$)),g.push({date:f,isToday:f.toDateString()===d,label:u(f,this.format),selected:i.$date&&this.isSelected(f),muted:f.getMonth()!==m.month,disabled:this.isDisabled(f)});r.title=u(n,s.monthTitleFormat),r.showLabels=!0,r.labels=p,r.rows=e(g,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()&&e.getDate()===i.$date.getDate()},isDisabled:function(e){var t=e.getTime();if(ts.maxDate)return!0;if(-1!==s.daysOfWeekDisabled.indexOf(e.getDay()))return!0;if(s.disabledDateRanges)for(var n=0;n=s.disabledDateRanges[n].start&&t<=s.disabledDateRanges[n].end)return!0;return!1},onKeyDown:function(e){if(i.$date){var t,n=i.$date.getTime();37===e.keyCode?t=new Date(n-864e5):38===e.keyCode?t=new Date(n-6048e5):39===e.keyCode?t=new Date(n+864e5):40===e.keyCode&&(t=new Date(n+6048e5)),this.isDisabled(t)||i.select(t,!0)}}},{name:'month',format:s.monthFormat,split:4,steps:{year:1},update:function(e,t){this.built&&e.getFullYear()===m.year?e.getMonth()!==m.month&&(angular.extend(m,{month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected()):(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build())},build:function(){for(var t,n=(new Date(m.year,0,1),[]),a=0;12>a;a++)t=new Date(m.year,a,1),n.push({date:t,label:u(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=u(t,s.yearTitleFormat),r.showLabels=!1,r.rows=e(n,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()},isDisabled:function(e){var t=+new Date(e.getFullYear(),e.getMonth()+1,0);return ts.maxDate},onKeyDown:function(e){if(i.$date){var t=i.$date.getMonth(),n=new Date(i.$date);37===e.keyCode?n.setMonth(t-1):38===e.keyCode?n.setMonth(t-4):39===e.keyCode?n.setMonth(t+1):40===e.keyCode&&n.setMonth(t+4),this.isDisabled(n)||i.select(n,!0)}}},{name:'year',format:s.yearFormat,split:4,steps:{year:12},update:function(e,t){!this.built||t||parseInt(e.getFullYear()/20,10)!==parseInt(m.year/20,10)?(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):e.getFullYear()!==m.year&&(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected())},build:function(){for(var t,n=m.year-m.year%(3*this.split),a=[],o=0;12>o;o++)t=new Date(n+o,0,1),a.push({date:t,label:u(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=a[0].label+'-'+a[a.length-1].label,r.showLabels=!1,r.rows=e(a,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()},isDisabled:function(e){var t=+new Date(e.getFullYear()+1,0,0);return ts.maxDate},onKeyDown:function(e){if(i.$date){var t=i.$date.getFullYear(),n=new Date(i.$date);37===e.keyCode?n.setYear(t-1):38===e.keyCode?n.setYear(t-4):39===e.keyCode?n.setYear(t+1):40===e.keyCode&&n.setYear(t+4),this.isDisabled(n)||i.select(n,!0)}}}];return{views:s.minView?Array.prototype.slice.call($,s.minView):$,viewDate:m}}}]}),angular.module('mgcrea.ngStrap.dropdown',['mgcrea.ngStrap.tooltip']).provider('$dropdown',function(){var e=this.defaults={animation:'am-fade',prefixClass:'dropdown',prefixEvent:'dropdown',placement:'bottom-left',template:'dropdown/dropdown.tpl.html',trigger:'click',container:!1,keyboard:!0,html:!1,delay:0};this.$get=['$window','$rootScope','$tooltip','$timeout',function(t,n,a,o){function i(t,i){function l(e){return e.target!==t[0]?e.target!==t[0]&&u.hide():void 0}{var u={},c=angular.extend({},e,i);u.$scope=c.scope&&c.scope.$new()||n.$new()}u=a(t,c);var d=t.parent();u.$onKeyDown=function(e){if(/(38|40)/.test(e.keyCode)){e.preventDefault(),e.stopPropagation();var t=angular.element(u.$element[0].querySelectorAll('li:not(.divider) a'));if(t.length){var n;angular.forEach(t,function(e,t){s&&s.call(e,':focus')&&(n=t)}),38===e.keyCode&&n>0?n--:40===e.keyCode&&no;o++)if(e[o].toLowerCase()===a)return o;return-1}t.prototype.setMilliseconds=function(e){this.milliseconds=e},t.prototype.setSeconds=function(e){this.seconds=e},t.prototype.setMinutes=function(e){this.minutes=e},t.prototype.setHours=function(e){this.hours=e},t.prototype.getHours=function(){return this.hours},t.prototype.setDate=function(e){this.day=e},t.prototype.setMonth=function(e){this.month=e},t.prototype.setFullYear=function(e){this.year=e},t.prototype.fromDate=function(e){return this.year=e.getFullYear(),this.month=e.getMonth(),this.day=e.getDate(),this.hours=e.getHours(),this.minutes=e.getMinutes(),this.seconds=e.getSeconds(),this.milliseconds=e.getMilliseconds(),this},t.prototype.toDate=function(){return new Date(this.year,this.month,this.day,this.hours,this.minutes,this.seconds,this.milliseconds)};var i=t.prototype,r=this.defaults={format:'shortDate',strict:!1};this.$get=['$locale','dateFilter',function(e,s){var l=function(l){function u(e){var t,n=Object.keys(h),a=[],o=[],i=e;for(t=0;t1){var r=i.search(n[t]);e=e.split(n[t]).join(''),h[n[t]]&&(a[r]=h[n[t]])}return angular.forEach(a,function(e){e&&o.push(e)}),o}function c(e){return e.replace(/\//g,'[\\/]').replace('/-/g','[-]').replace(/\./g,'[.]').replace(/\\s/g,'[\\s]')}function d(e){var t,n=Object.keys($),a=e;for(t=0;t12?e.getHours()+2:0),e):null},m.timezoneOffsetAdjust=function(e,t,n){return e?(t&&'UTC'===t&&(e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+(n?-1:1)*e.getTimezoneOffset())),e):null},m.init(),m};return l}]}]),angular.module('mgcrea.ngStrap.helpers.debounce',[]).factory('debounce',['$timeout',function(e){return function(t,n,a){var o=null;return function(){var i=this,r=arguments,s=a&&!o;return o&&e.cancel(o),o=e(function(){o=null,a||t.apply(i,r)},n,!1),s&&t.apply(i,r),o}}}]).factory('throttle',['$timeout',function(e){return function(t,n,a){var o=null;return a||(a={}),function(){var i=this,r=arguments;o||(a.leading!==!1&&t.apply(i,r),o=e(function(){o=null,a.trailing!==!1&&t.apply(i,r)},n,!1))}}}]),angular.module('mgcrea.ngStrap.helpers.dimensions',[]).factory('dimensions',['$document','$window',function(t,n){var a=(angular.element,{}),o=a.nodeName=function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()};a.css=function(t,n,a){var o;return o=t.currentStyle?t.currentStyle[n]:e.getComputedStyle?e.getComputedStyle(t)[n]:t.style[n],a===!0?parseFloat(o)||0:o},a.offset=function(t){var n=t.getBoundingClientRect(),a=t.ownerDocument;return{width:n.width||t.offsetWidth,height:n.height||t.offsetHeight,top:n.top+(e.pageYOffset||a.documentElement.scrollTop)-(a.documentElement.clientTop||0),left:n.left+(e.pageXOffset||a.documentElement.scrollLeft)-(a.documentElement.clientLeft||0)}},a.setOffset=function(e,t,n){var o,i,r,s,l,u,c,d=a.css(e,'position'),f=angular.element(e),p={};'static'===d&&(e.style.position='relative'),l=a.offset(e),r=a.css(e,'top'),u=a.css(e,'left'),c=('absolute'===d||'fixed'===d)&&(r+u).indexOf('auto')>-1,c?(o=a.position(e),s=o.top,i=o.left):(s=parseFloat(r)||0,i=parseFloat(u)||0),angular.isFunction(t)&&(t=t.call(e,n,l)), -null!==t.top&&(p.top=t.top-l.top+s),null!==t.left&&(p.left=t.left-l.left+i),'using'in t?t.using.call(f,p):f.css({top:p.top+'px',left:p.left+'px'})},a.position=function(e){var t,n,r={top:0,left:0};return'fixed'===a.css(e,'position')?n=e.getBoundingClientRect():(t=i(e),n=a.offset(e),o(t,'html')||(r=a.offset(t)),r.top+=a.css(t,'borderTopWidth',!0),r.left+=a.css(t,'borderLeftWidth',!0)),{width:e.offsetWidth,height:e.offsetHeight,top:n.top-r.top-a.css(e,'marginTop',!0),left:n.left-r.left-a.css(e,'marginLeft',!0)}};var i=function(e){var t=e.ownerDocument,n=e.offsetParent||t;if(o(n,'#document'))return t.documentElement;for(;n&&!o(n,'html')&&'static'===a.css(n,'position');)n=n.offsetParent;return n||t.documentElement};return a.height=function(e,t){var n=e.offsetHeight;return t?n+=a.css(e,'marginTop',!0)+a.css(e,'marginBottom',!0):n-=a.css(e,'paddingTop',!0)+a.css(e,'paddingBottom',!0)+a.css(e,'borderTopWidth',!0)+a.css(e,'borderBottomWidth',!0),n},a.width=function(e,t){var n=e.offsetWidth;return t?n+=a.css(e,'marginLeft',!0)+a.css(e,'marginRight',!0):n-=a.css(e,'paddingLeft',!0)+a.css(e,'paddingRight',!0)+a.css(e,'borderLeftWidth',!0)+a.css(e,'borderRightWidth',!0),n},a}]),angular.module('mgcrea.ngStrap.helpers.parseOptions',[]).provider('$parseOptions',function(){var e=this.defaults={regexp:/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/};this.$get=['$parse','$q',function(t,n){function a(a,o){function i(e,t){return e.map(function(e,n){var a,o,i={};return i[c]=e,a=u(t,i),o=p(t,i),{label:a,value:o,index:n}})}var r={},s=angular.extend({},e,o);r.$values=[];var l,u,c,d,f,p,g;return r.init=function(){r.$match=l=a.match(s.regexp),u=t(l[2]||l[1]),c=l[4]||l[6],d=l[5],f=t(l[3]||''),p=t(l[2]?l[1]:c),g=t(l[7])},r.valuesFn=function(e,t){return n.when(g(e,t)).then(function(t){return r.$values=t?i(t,e):{},r.$values})},r.displayValue=function(e){var t={};return t[c]=e,u(t)},r.init(),r}return a}]}),angular.version.minor<3&&angular.version.dot<14&&angular.module('ng').factory('$$rAF',['$window','$timeout',function(e,t){var n=e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame,a=e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.mozCancelAnimationFrame||e.webkitCancelRequestAnimationFrame,o=!!n,i=o?function(e){var t=n(e);return function(){a(t)}}:function(e){var n=t(e,16.66,!1);return function(){t.cancel(n)}};return i.supported=o,i}]),angular.module('mgcrea.ngStrap.modal',['mgcrea.ngStrap.helpers.dimensions']).provider('$modal',function(){var e=this.defaults={animation:'am-fade',backdropAnimation:'am-fade',prefixClass:'modal',prefixEvent:'modal',placement:'top',template:'modal/modal.tpl.html',contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=['$window','$rootScope','$compile','$q','$templateCache','$http','$animate','$timeout','$sce','dimensions',function(n,a,o,i,r,s,l,u,c,d){function f(t){function n(){f.$emit(d.prefixEvent+'.show',u)}function i(){f.$emit(d.prefixEvent+'.hide',u),w.removeClass(d.prefixClass+'-open'),d.animation&&w.removeClass(d.prefixClass+'-with-'+d.animation)}function r(e){e.target===e.currentTarget&&('static'===d.backdrop?u.focus():u.hide())}function s(e){e.preventDefault()}var u={},d=u.$options=angular.extend({},e,t);u.$promise=m(d.template);var f=u.$scope=d.scope&&d.scope.$new()||a.$new();d.element||d.container||(d.container='body'),u.$id=d.id||d.element&&d.element.attr('id')||'',$(['title','content'],function(e){d[e]&&(f[e]=c.trustAsHtml(d[e]))}),f.$hide=function(){f.$$postDigest(function(){u.hide()})},f.$show=function(){f.$$postDigest(function(){u.show()})},f.$toggle=function(){f.$$postDigest(function(){u.toggle()})},u.$isShown=f.$isShown=!1,d.contentTemplate&&(u.$promise=u.$promise.then(function(e){var n=angular.element(e);return m(d.contentTemplate).then(function(e){var a=g('[ng-bind="content"]',n[0]).removeAttr('ng-bind').html(e);return t.template||a.next().remove(),n[0].outerHTML})}));var b,D,k=angular.element('
    ');return k.css({position:'fixed',top:'0px',left:'0px',bottom:'0px',right:'0px','z-index':1038}),u.$promise.then(function(e){angular.isObject(e)&&(e=e.data),d.html&&(e=e.replace(y,'ng-bind-html="')),e=h.apply(e),b=o(e),u.init()}),u.init=function(){d.show&&f.$$postDigest(function(){u.show()})},u.destroy=function(){D&&(D.remove(),D=null),k&&(k.remove(),k=null),f.$destroy()},u.show=function(){if(!u.$isShown){var e,t;if(angular.isElement(d.container)?(e=d.container,t=d.container[0].lastChild?angular.element(d.container[0].lastChild):null):d.container?(e=g(d.container),t=e[0]&&e[0].lastChild?angular.element(e[0].lastChild):null):(e=null,t=d.element),D=u.$element=b(f,function(e,t){}),!f.$emit(d.prefixEvent+'.show.before',u).defaultPrevented){D.css({display:'block'}).addClass(d.placement),d.animation&&(d.backdrop&&k.addClass(d.backdropAnimation),D.addClass(d.animation)),d.backdrop&&l.enter(k,w,null);var a=l.enter(D,e,t,n);a&&a.then&&a.then(n),u.$isShown=f.$isShown=!0,p(f);var o=D[0];v(function(){o.focus()}),w.addClass(d.prefixClass+'-open'),d.animation&&w.addClass(d.prefixClass+'-with-'+d.animation),d.backdrop&&(D.on('click',r),k.on('click',r),k.on('wheel',s)),d.keyboard&&D.on('keyup',u.$onKeyUp)}}},u.hide=function(){if(u.$isShown&&!f.$emit(d.prefixEvent+'.hide.before',u).defaultPrevented){var e=l.leave(D,i);e&&e.then&&e.then(i),d.backdrop&&l.leave(k),u.$isShown=f.$isShown=!1,p(f),d.backdrop&&(D.off('click',r),k.off('click',r),k.off('wheel',s)),d.keyboard&&D.off('keyup',u.$onKeyUp)}},u.toggle=function(){u.$isShown?u.hide():u.show()},u.focus=function(){D[0].focus()},u.$onKeyUp=function(e){27===e.which&&u.$isShown&&(u.hide(),e.stopPropagation())},u}function p(e){e.$$phase||e.$root&&e.$root.$$phase||e.$digest()}function g(e,n){return angular.element((n||t).querySelectorAll(e))}function m(e){return b[e]?b[e]:b[e]=s.get(e,{cache:r}).then(function(e){return e.data})}var $=angular.forEach,h=String.prototype.trim,v=n.requestAnimationFrame||n.setTimeout,w=angular.element(n.document.body),y=/ng-bind="/gi,b={};return f}]}).directive('bsModal',['$window','$sce','$modal',function(e,t,n){return{restrict:'EAC',scope:!0,link:function(e,a,o,i){var r={scope:e,element:a,show:!1};angular.forEach(['template','contentTemplate','placement','backdrop','keyboard','html','container','animation','id','prefixEvent','prefixClass'],function(e){angular.isDefined(o[e])&&(r[e]=o[e])});var s=/^(false|0|)$/i;angular.forEach(['backdrop','keyboard','html','container'],function(e){angular.isDefined(o[e])&&s.test(o[e])&&(r[e]=!1)}),angular.forEach(['title','content'],function(n){o[n]&&o.$observe(n,function(a,o){e[n]=t.trustAsHtml(a)})}),o.bsModal&&e.$watch(o.bsModal,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var l=n(r);a.on(o.trigger||'click',l.toggle),e.$on('$destroy',function(){l&&l.destroy(),r=null,l=null})}}}]),angular.module('mgcrea.ngStrap.navbar',[]).provider('$navbar',function(){var e=this.defaults={activeClass:'active',routeAttr:'data-match-route',strict:!1};this.$get=function(){return{defaults:e}}}).directive('bsNavbar',['$window','$location','$navbar',function(e,t,n){var a=n.defaults;return{restrict:'A',link:function(e,n,o,i){var r=angular.copy(a);angular.forEach(Object.keys(a),function(e){angular.isDefined(o[e])&&(r[e]=o[e])}),e.$watch(function(){return t.path()},function(e,t){var a=n[0].querySelectorAll('li['+r.routeAttr+']');angular.forEach(a,function(t){var n=angular.element(t),a=n.attr(r.routeAttr).replace('/','\\/');r.strict&&(a='^'+a+'$');var o=new RegExp(a,'i');o.test(e)?n.addClass(r.activeClass):n.removeClass(r.activeClass)})})}}}]),angular.module('mgcrea.ngStrap.popover',['mgcrea.ngStrap.tooltip']).provider('$popover',function(){var e=this.defaults={animation:'am-fade',customClass:'',container:!1,target:!1,placement:'right',template:'popover/popover.tpl.html',contentTemplate:!1,trigger:'click',keyboard:!0,html:!1,title:'',content:'',delay:0,autoClose:!1};this.$get=['$tooltip',function(t){function n(n,a){var o=angular.extend({},e,a),i=t(n,o);return o.content&&(i.$scope.content=o.content),i}return n}]}).directive('bsPopover',['$window','$sce','$popover',function(e,t,n){var a=e.requestAnimationFrame||e.setTimeout;return{restrict:'EAC',scope:!0,link:function(e,o,i){var r={scope:e};angular.forEach(['template','contentTemplate','placement','container','delay','trigger','html','animation','customClass','autoClose','id','prefixClass','prefixEvent'],function(e){angular.isDefined(i[e])&&(r[e]=i[e])});var s=/^(false|0|)$/i;angular.forEach(['html','container','autoClose'],function(e){angular.isDefined(i[e])&&s.test(i[e])&&(r[e]=!1)});var l=o.attr('data-target');angular.isDefined(l)&&(r.target=s.test(l)?!1:l),angular.forEach(['title','content'],function(n){i[n]&&i.$observe(n,function(o,i){e[n]=t.trustAsHtml(o),angular.isDefined(i)&&a(function(){u&&u.$applyPlacement()})})}),i.bsPopover&&e.$watch(i.bsPopover,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t,angular.isDefined(n)&&a(function(){u&&u.$applyPlacement()})},!0),i.bsShow&&e.$watch(i.bsShow,function(e,t){u&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(popover),?/i)),e===!0?u.show():u.hide())}),i.viewport&&e.$watch(i.viewport,function(e){u&&angular.isDefined(e)&&u.setViewport(e)});var u=n(o,r);e.$on('$destroy',function(){u&&u.destroy(),r=null,u=null})}}}]),angular.module('mgcrea.ngStrap.scrollspy',['mgcrea.ngStrap.helpers.debounce','mgcrea.ngStrap.helpers.dimensions']).provider('$scrollspy',function(){var e=this.$$spies={},n=this.defaults={debounce:150,throttle:100,offset:100};this.$get=['$window','$document','$rootScope','dimensions','debounce','throttle',function(a,o,i,r,s,l){function u(e,t){return e[0].nodeName&&e[0].nodeName.toLowerCase()===t.toLowerCase()}function c(o){var c=angular.extend({},n,o);c.element||(c.element=p);var g=u(c.element,'body'),m=g?d:c.element,$=g?'window':c.id;if(e[$])return e[$].$$count++,e[$];var h,v,w,y,b,D,k,S,x={},T=x.$trackedElements=[],C=[];return x.init=function(){this.$$count=1,y=s(this.checkPosition,c.debounce),b=l(this.checkPosition,c.throttle),m.on('click',this.checkPositionWithEventLoop),d.on('resize',y),m.on('scroll',b),D=s(this.checkOffsets,c.debounce),h=i.$on('$viewContentLoaded',D),v=i.$on('$includeContentLoaded',D),D(),$&&(e[$]=x)},x.destroy=function(){this.$$count--,this.$$count>0||(m.off('click',this.checkPositionWithEventLoop),d.off('resize',y),m.off('scroll',b),h(),v(),$&&delete e[$])},x.checkPosition=function(){if(C.length){if(S=(g?a.pageYOffset:m.prop('scrollTop'))||0,k=Math.max(a.innerHeight,f.prop('clientHeight')),SC[e+1].offsetTop))return x.$activateElement(C[e])}},x.checkPositionWithEventLoop=function(){setTimeout(x.checkPosition,1)},x.$activateElement=function(e){if(w){var t=x.$getTrackedElement(w);t&&(t.source.removeClass('active'),u(t.source,'li')&&u(t.source.parent().parent(),'li')&&t.source.parent().parent().removeClass('active'))}w=e.target,e.source.addClass('active'),u(e.source,'li')&&u(e.source.parent().parent(),'li')&&e.source.parent().parent().addClass('active')},x.$getTrackedElement=function(e){return T.filter(function(t){return t.target===e})[0]},x.checkOffsets=function(){angular.forEach(T,function(e){var n=t.querySelector(e.target);e.offsetTop=n?r.offset(n).top:null,c.offset&&null!==e.offsetTop&&(e.offsetTop-=1*c.offset)}),C=T.filter(function(e){return null!==e.offsetTop}).sort(function(e,t){return e.offsetTop-t.offsetTop}),y()},x.trackElement=function(e,t){T.push({target:e,source:t})},x.untrackElement=function(e,t){for(var n,a=T.length;a--;)if(T[a].target===e&&T[a].source===t){n=a;break}T=T.splice(n,1)},x.activate=function(e){T[e].addClass('active')},x.init(),x}var d=angular.element(a),f=angular.element(o.prop('documentElement')),p=angular.element(a.document.body);return c}]}).directive('bsScrollspy',['$rootScope','debounce','dimensions','$scrollspy',function(e,t,n,a){return{restrict:'EAC',link:function(e,t,n){var o={scope:e};angular.forEach(['offset','target'],function(e){angular.isDefined(n[e])&&(o[e]=n[e])});var i=a(o);i.trackElement(o.target,t),e.$on('$destroy',function(){i&&(i.untrackElement(o.target,t),i.destroy()),o=null,i=null})}}}]).directive('bsScrollspyList',['$rootScope','debounce','dimensions','$scrollspy',function(e,t,n,a){return{restrict:'A',compile:function(e,t){var n=e[0].querySelectorAll('li > a[href]');angular.forEach(n,function(e){var t=angular.element(e);t.parent().attr('bs-scrollspy','').attr('data-target',t.attr('href'))})}}}]),angular.module('mgcrea.ngStrap.select',['mgcrea.ngStrap.tooltip','mgcrea.ngStrap.helpers.parseOptions']).provider('$select',function(){var e=this.defaults={animation:'am-fade',prefixClass:'select',prefixEvent:'$select',placement:'bottom-left',template:'select/select.tpl.html',trigger:'focus',container:!1,keyboard:!0,html:!1,delay:0,multiple:!1,allNoneButtons:!1,sort:!0,caretHtml:' ',placeholder:'Choose among the following...',allText:'All',noneText:'None',maxLength:3,maxLengthHtml:'selected',iconCheckmark:'glyphicon glyphicon-ok'};this.$get=['$window','$document','$rootScope','$tooltip','$timeout',function(t,n,a,o,i){function r(t,n,a){var r={},s=angular.extend({},e,a);r=o(t,s);var u=r.$scope;u.$matches=[],u.$activeIndex=s.multiple?[]:-1,u.$isMultiple=s.multiple,u.$showAllNoneButtons=s.allNoneButtons&&s.multiple,u.$iconCheckmark=s.iconCheckmark,u.$allText=s.allText,u.$noneText=s.noneText,u.$activate=function(e){u.$$postDigest(function(){r.activate(e)})},u.$select=function(e,t){u.$$postDigest(function(){r.select(e)})},u.$isVisible=function(){return r.$isVisible()},u.$isActive=function(e){return r.$isActive(e)},u.$selectAll=function(){for(var e=0;e=u.$matches.length&&(u.$activeIndex=s.multiple?[]:0)},r.$isVisible=function(){return s.minLength&&n?u.$matches.length&&n.$viewValue.length>=s.minLength:u.$matches.length},r.$isActive=function(e){return s.multiple?-1!==u.$activeIndex.indexOf(e):u.$activeIndex===e},r.$getIndex=function(e){var t=u.$matches.length,n=t;if(t){for(n=t;n--&&u.$matches[n].value!==e;);if(!(0>n))return n}},r.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),l){var t=angular.element(e.target);t.triggerHandler('click')}},r.$onKeyDown=function(e){return/(9|13|38|40)/.test(e.keyCode)?(e.preventDefault(),e.stopPropagation(),s.multiple&&9===e.keyCode?r.hide():s.multiple||13!==e.keyCode&&9!==e.keyCode?void(s.multiple||(38===e.keyCode&&u.$activeIndex>0?u.$activeIndex--:38===e.keyCode&&u.$activeIndex<0?u.$activeIndex=u.$matches.length-1:40===e.keyCode&&u.$activeIndex'),c.after(t)}var d=o(n.bsOptions),f=a(t,r,s),p=d.$match[7].replace(/\|.+/,'').trim();e.$watchCollection(p,function(t,n){d.valuesFn(e,r).then(function(e){f.update(e),r.$render()})}),e.$watch(n.ngModel,function(e,t){f.$updateActiveIndex(),r.$render()},!0),r.$render=function(){var e,n;s.multiple&&angular.isArray(r.$modelValue)?(e=r.$modelValue.map(function(e){return n=f.$getIndex(e),angular.isDefined(n)?f.$scope.$matches[n].label:!1}).filter(angular.isDefined),e=e.length>(s.maxLength||i.maxLength)?e.length+' '+(s.maxLengthHtml||i.maxLengthHtml):e.join(', ')):(n=f.$getIndex(r.$modelValue),e=angular.isDefined(n)?f.$scope.$matches[n].label:!1),t.html((e?e:s.placeholder)+(s.caretHtml?s.caretHtml:i.caretHtml))},s.multiple&&(r.$isEmpty=function(e){return!e||0===e.length}),e.$on('$destroy',function(){f&&f.destroy(),s=null,f=null})}}}]),angular.module('mgcrea.ngStrap.timepicker',['mgcrea.ngStrap.helpers.dateParser','mgcrea.ngStrap.helpers.dateFormatter','mgcrea.ngStrap.tooltip']).provider('$timepicker',function(){var e=this.defaults={animation:'am-fade',prefixClass:'timepicker',placement:'bottom-left',template:'timepicker/timepicker.tpl.html',trigger:'focus',container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:'date',timeFormat:'shortTime',timezone:null,modelTimeFormat:null,autoclose:!1,minTime:-(1/0),maxTime:+(1/0),length:5,hourStep:1,minuteStep:5,secondStep:5,roundDisplay:!1,iconUp:'glyphicon glyphicon-chevron-up',iconDown:'glyphicon glyphicon-chevron-down',arrowBehavior:'pager'};this.$get=['$window','$document','$rootScope','$sce','$dateFormatter','$tooltip','$timeout',function(t,n,a,o,i,r,s){function l(t,n,a){function o(e){var t=6e4*g.minuteStep;return new Date(Math.floor(e.getTime()/t)*t)}function l(e,n){var a=e+n;if(t[0].createTextRange){var o=t[0].createTextRange();o.collapse(!0),o.moveStart('character',e),o.moveEnd('character',a),o.select()}else t[0].setSelectionRange?t[0].setSelectionRange(e,a):angular.isUndefined(t[0].selectionStart)&&(t[0].selectionStart=e,t[0].selectionEnd=a)}function d(){t[0].focus()}var f=r(t,angular.extend({},e,a)),p=a.scope,g=f.$options,m=f.$scope,$=g.lang,h=function(e,t,n){return i.formatDate(e,t,$,n)},v=0,w=g.roundDisplay?o(new Date):new Date,y=n.$dateValue||w,b={hour:y.getHours(),meridian:y.getHours()<12,minute:y.getMinutes(),second:y.getSeconds(),millisecond:y.getMilliseconds()},D=i.getDatetimeFormat(g.timeFormat,$),k=i.hoursFormat(D),S=i.timeSeparator(D),x=i.minutesFormat(D),T=i.secondsFormat(D),C=i.showSeconds(D),M=i.showAM(D);m.$iconUp=g.iconUp,m.$iconDown=g.iconDown,m.$select=function(e,t){f.select(e,t)},m.$moveIndex=function(e,t){f.$moveIndex(e,t)},m.$switchMeridian=function(e){f.switchMeridian(e)},f.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())?(f.$date=e,angular.extend(b,{hour:e.getHours(),minute:e.getMinutes(),second:e.getSeconds(),millisecond:e.getMilliseconds()}),f.$build()):f.$isBuilt||f.$build()},f.select=function(e,t,a){(!n.$dateValue||isNaN(n.$dateValue.getTime()))&&(n.$dateValue=new Date(1970,0,1)),angular.isDate(e)||(e=new Date(e)),0===t?n.$dateValue.setHours(e.getHours()):1===t?n.$dateValue.setMinutes(e.getMinutes()):2===t&&n.$dateValue.setSeconds(e.getSeconds()),n.$setViewValue(angular.copy(n.$dateValue)),n.$render(),g.autoclose&&!a&&s(function(){f.hide(!0)})},f.switchMeridian=function(e){if(n.$dateValue&&!isNaN(n.$dateValue.getTime())){var t=(e||n.$dateValue).getHours();n.$dateValue.setHours(12>t?t+12:t-12),n.$setViewValue(angular.copy(n.$dateValue)),n.$render()}},f.$build=function(){var e,t,n=m.midIndex=parseInt(g.length/2,10),a=[];for(e=0;e1*g.maxTime},m.$arrowAction=function(e,t){'picker'===g.arrowBehavior?f.$setTimeByStep(e,t):f.$moveIndex(e,t)},f.$setTimeByStep=function(e,t){{var n=new Date(f.$date),a=n.getHours(),o=(h(n,k).length,n.getMinutes()),i=(h(n,x).length,n.getSeconds());h(n,T).length}0===t?n.setHours(a-parseInt(g.hourStep,10)*e):1===t?n.setMinutes(o-parseInt(g.minuteStep,10)*e):2===t&&n.setSeconds(i-parseInt(g.secondStep,10)*e),f.select(n,t,!0)},f.$moveIndex=function(e,t){var n;0===t?(n=new Date(1970,0,1,b.hour+e*g.length,b.minute,b.second),angular.extend(b,{hour:n.getHours()})):1===t?(n=new Date(1970,0,1,b.hour,b.minute+e*g.length*g.minuteStep,b.second),angular.extend(b,{minute:n.getMinutes()})):2===t&&(n=new Date(1970,0,1,b.hour,b.minute,b.second+e*g.length*g.secondStep),angular.extend(b,{second:n.getSeconds()})),f.$build()},f.$onMouseDown=function(e){if('input'!==e.target.nodeName.toLowerCase()&&e.preventDefault(),e.stopPropagation(),c){var t=angular.element(e.target);'button'!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler('click')}},f.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return f.hide(!0);var t=new Date(f.$date),n=t.getHours(),a=h(t,k).length,o=t.getMinutes(),i=h(t,x).length,r=t.getSeconds(),s=h(t,T).length,u=1,c=/(37|39)/.test(e.keyCode),d=2+1*C+1*M;c&&(37===e.keyCode?v=1>v?d-1:v-1:39===e.keyCode&&(v=d-1>v?v+1:0));var m=[0,a],$=0;38===e.keyCode&&($=-1),40===e.keyCode&&($=1);var w=2===v&&C,y=2===v&&!C||3===v&&C;0===v?(t.setHours(n+$*parseInt(g.hourStep,10)),a=h(t,k).length,m=[0,a]):1===v?(t.setMinutes(o+$*parseInt(g.minuteStep,10)),i=h(t,x).length,m=[a+u,i]):w?(t.setSeconds(r+$*parseInt(g.secondStep,10)),s=h(t,T).length,m=[a+u+i+u,s]):y&&(c||f.switchMeridian(),m=[a+u+i+u+(s+u)*C,2]),f.select(t,v,!0),l(m[0],m[1]),p.$digest()}};var E=f.init;f.init=function(){return u&&g.useNative?(t.prop('type','time'),void t.css('-webkit-appearance','textfield')):(c&&(t.prop('type','text'),t.attr('readonly','true'),t.on('click',d)),void E())};var A=f.destroy;f.destroy=function(){u&&g.useNative&&t.off('click',d),A()};var F=f.show;f.show=function(){F(),s(function(){f.$element.on(c?'touchstart':'mousedown',f.$onMouseDown),g.keyboard&&t.on('keydown',f.$onKeyDown)},0,!1)};var V=f.hide;return f.hide=function(e){f.$isShown&&(f.$element.off(c?'touchstart':'mousedown',f.$onMouseDown),g.keyboard&&t.off('keydown',f.$onKeyDown),V(e))},f}var u=(angular.element(t.document.body),/(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)),c='createTouch'in t.document&&u;return e.lang||(e.lang=i.getDefaultLocale()),l.defaults=e,l}]}).directive('bsTimepicker',['$window','$parse','$q','$dateFormatter','$dateParser','$timepicker',function(e,t,n,a,o,i){{var r=i.defaults,s=/(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent);e.requestAnimationFrame||e.setTimeout}return{restrict:'EAC',require:'ngModel',link:function(e,t,n,l){function u(e){if(angular.isDate(e)){var t=isNaN(d.minTime)||new Date(e.getTime()).setFullYear(1970,0,1)>=d.minTime,n=isNaN(d.maxTime)||new Date(e.getTime()).setFullYear(1970,0,1)<=d.maxTime,a=t&&n;l.$setValidity('date',a),l.$setValidity('min',t),l.$setValidity('max',n),a&&(l.$dateValue=e)}}function c(){return!l.$dateValue||isNaN(l.$dateValue.getTime())?'':m(l.$dateValue,d.timeFormat)}var d={scope:e,controller:l};angular.forEach(['placement','container','delay','trigger','keyboard','html','animation','template','autoclose','timeType','timeFormat','timezone','modelTimeFormat','useNative','hourStep','minuteStep','secondStep','length','arrowBehavior','iconUp','iconDown','roundDisplay','id','prefixClass','prefixEvent'],function(e){angular.isDefined(n[e])&&(d[e]=n[e])});var f=/^(false|0|)$/i;angular.forEach(['html','container','autoclose','useNative','roundDisplay'],function(e){angular.isDefined(n[e])&&f.test(n[e])&&(d[e]=!1)}),n.bsShow&&e.$watch(n.bsShow,function(e,t){p&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(timepicker),?/i)),e===!0?p.show():p.hide())}),s&&(d.useNative||r.useNative)&&(d.timeFormat='HH:mm');var p=i(t,l,d);d=p.$options;var g=d.lang,m=function(e,t,n){return a.formatDate(e,t,g,n)},$=o({format:d.timeFormat,lang:g});angular.forEach(['minTime','maxTime'],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){p.$options[e]=$.getTimeForAttribute(e,t),!isNaN(p.$options[e])&&p.$build(),u(l.$dateValue)})}),e.$watch(n.ngModel,function(e,t){p.update(l.$dateValue)},!0),l.$parsers.unshift(function(e){var t;if(!e)return l.$setValidity('date',!0),null;var n=angular.isDate(e)?e:$.parse(e,l.$dateValue);return!n||isNaN(n.getTime())?void l.$setValidity('date',!1):(u(n),'string'===d.timeType?(t=$.timezoneOffsetAdjust(n,d.timezone,!0),m(t,d.modelTimeFormat||d.timeFormat)):(t=$.timezoneOffsetAdjust(l.$dateValue,d.timezone,!0),'number'===d.timeType?t.getTime():'unix'===d.timeType?t.getTime()/1e3:'iso'===d.timeType?t.toISOString():new Date(t)))}),l.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?0/0:angular.isDate(e)?e:'string'===d.timeType?$.parse(e,null,d.modelTimeFormat):new Date('unix'===d.timeType?1e3*e:e),l.$dateValue=$.timezoneOffsetAdjust(t,d.timezone),c()}),l.$render=function(){t.val(c())},e.$on('$destroy',function(){p&&p.destroy(),d=null,p=null})}}}]),angular.module('mgcrea.ngStrap.tab',[]).provider('$tab',function(){var e=this.defaults={animation:'am-fade',template:'tab/tab.tpl.html',navClass:'nav-tabs',activeClass:'active'},t=this.controller=function(t,n,a){var o=this;o.$options=angular.copy(e),angular.forEach(['animation','navClass','activeClass'],function(e){angular.isDefined(a[e])&&(o.$options[e]=a[e])}),t.$navClass=o.$options.navClass,t.$activeClass=o.$options.activeClass,o.$panes=t.$panes=[],o.$activePaneChangeListeners=o.$viewChangeListeners=[],o.$push=function(e){o.$panes.push(e)},o.$remove=function(e){var t=o.$panes.indexOf(e),n=o.$panes.$active;o.$panes.splice(t,1),n>t?n--:t===n&&n===o.$panes.length&&n--,o.$setActive(n)},o.$panes.$active=0,o.$setActive=t.$setActive=function(e){o.$panes.$active=e,o.$activePaneChangeListeners.forEach(function(e){e()})}};this.$get=function(){var n={};return n.defaults=e,n.controller=t,n}}).directive('bsTabs',['$window','$animate','$tab','$parse',function(e,t,n,a){var o=n.defaults;return{require:['?ngModel','bsTabs'],transclude:!0,scope:!0,controller:['$scope','$element','$attrs',n.controller],templateUrl:function(e,t){return t.template||o.template},link:function(e,t,n,o){var i=o[0],r=o[1];if(i&&(r.$activePaneChangeListeners.push(function(){i.$setViewValue(r.$panes.$active)}),i.$formatters.push(function(e){return r.$setActive(1*e),e})),n.bsActivePane){var s=a(n.bsActivePane);r.$activePaneChangeListeners.push(function(){s.assign(e,r.$panes.$active)}),e.$watch(n.bsActivePane,function(e,t){r.$setActive(1*e)},!0)}}}}]).directive('bsPane',['$window','$animate','$sce',function(e,t,n){return{require:['^?ngModel','^bsTabs'],scope:!0,link:function(e,a,o,i){function r(){var n=s.$panes.indexOf(e),o=s.$panes.$active;t[n===o?'addClass':'removeClass'](a,s.$options.activeClass)}var s=(i[0],i[1]);a.addClass('tab-pane'),o.$observe('title',function(t,a){e.title=n.trustAsHtml(t)}),s.$options.animation&&a.addClass(s.$options.animation),o.$observe('disabled',function(t,n){e.disabled=e.$eval(t)}),s.$push(e),e.$on('$destroy',function(){s.$remove(e)}),s.$activePaneChangeListeners.push(function(){r()}),r()}}}]),angular.module('mgcrea.ngStrap.tooltip',['mgcrea.ngStrap.helpers.dimensions']).provider('$tooltip',function(){var e=this.defaults={animation:'am-fade',customClass:'',prefixClass:'tooltip',prefixEvent:'tooltip',container:!1,target:!1,placement:'top',template:'tooltip/tooltip.tpl.html',contentTemplate:!1,trigger:'hover focus',keyboard:!1,html:!1,show:!1,title:'',type:'',delay:0,autoClose:!1,bsEnabled:!0,viewport:{selector:'body',padding:0}};this.$get=['$window','$rootScope','$compile','$q','$templateCache','$http','$animate','$sce','dimensions','$$rAF','$timeout',function(n,a,o,i,r,s,l,u,c,d,f){function p(i,r){function s(){N.$emit(H.prefixEvent+'.show',I)}function p(){if(N.$emit(H.prefixEvent+'.hide',I),z===B){if(W&&'focus'===H.trigger)return i[0].blur();O()}}function b(){var e=H.trigger.split(' ');angular.forEach(e,function(e){'click'===e?i.on('click',I.toggle):'manual'!==e&&(i.on('hover'===e?'mouseenter':'focus',I.enter),i.on('hover'===e?'mouseleave':'blur',I.leave),'button'===P&&'hover'!==e&&i.on(v?'touchstart':'mousedown',I.$onFocusElementMouseDown))})}function D(){for(var e=H.trigger.split(' '),t=e.length;t--;){var n=e[t];'click'===n?i.off('click',I.toggle):'manual'!==n&&(i.off('hover'===n?'mouseenter':'focus',I.enter),i.off('hover'===n?'mouseleave':'blur',I.leave),'button'===P&&'hover'!==n&&i.off(v?'touchstart':'mousedown',I.$onFocusElementMouseDown))}}function k(){'focus'!==H.trigger?z.on('keyup',I.$onKeyUp):i.on('keyup',I.$onFocusKeyUp)}function S(){'focus'!==H.trigger?z.off('keyup',I.$onKeyUp):i.off('keyup',I.$onFocusKeyUp)}function x(){f(function(){z.on('click',C),y.on('click',I.hide),_=!0},0,!1)}function T(){_&&(z.off('click',C),y.off('click',I.hide),_=!1)}function C(e){e.stopPropagation()}function M(e){e=e||H.target||i;var a=e[0],o='BODY'===a.tagName,r=a.getBoundingClientRect(),s={};for(var l in r)s[l]=r[l];null===s.width&&(s=angular.extend({},s,{width:r.right-r.left,height:r.bottom-r.top}));var u=o?{top:0,left:0}:c.offset(a),d={scroll:o?t.documentElement.scrollTop||t.body.scrollTop:e.prop('scrollTop')||0},f=o?{width:t.documentElement.clientWidth,height:n.innerHeight}:null;return angular.extend({},s,d,f,u)}function E(e,t,n,a){var o,i=e.split('-');switch(i[0]){case'right':o={top:t.top+t.height/2-a/2,left:t.left+t.width};break;case'bottom':o={top:t.top+t.height,left:t.left+t.width/2-n/2};break;case'left':o={top:t.top+t.height/2-a/2,left:t.left-n};break;default:o={top:t.top-a,left:t.left+t.width/2-n/2}}if(!i[1])return o;if('top'===i[0]||'bottom'===i[0])switch(i[1]){case'left':o.left=t.left;break;case'right':o.left=t.left+t.width-n}else if('left'===i[0]||'right'===i[0])switch(i[1]){case'top': -o.top=t.top-a;break;case'bottom':o.top=t.top+t.height}return o}function A(e,t){var n=z[0],a=n.offsetWidth,o=n.offsetHeight,i=parseInt(c.css(n,'margin-top'),10),r=parseInt(c.css(n,'margin-left'),10);isNaN(i)&&(i=0),isNaN(r)&&(r=0),e.top=e.top+i,e.left=e.left+r,c.setOffset(n,angular.extend({using:function(e){z.css({top:Math.round(e.top)+'px',left:Math.round(e.left)+'px',right:''})}},e),0);var s=n.offsetWidth,l=n.offsetHeight;if('top'===t&&l!==o&&(e.top=e.top+o-l),!/top-left|top-right|bottom-left|bottom-right/.test(t)){var u=F(t,e,s,l);if(u.left?e.left+=u.left:e.top+=u.top,c.setOffset(n,e),/top|right|bottom|left/.test(t)){var d=/top|bottom/.test(t),f=d?2*u.left-a+s:2*u.top-o+l,p=d?'offsetWidth':'offsetHeight';V(f,n[p],d)}}}function F(e,t,n,a){var o={top:0,left:0},i=H.viewport&&m(H.viewport.selector||H.viewport);if(!i)return o;var r=H.viewport&&H.viewport.padding||0,s=M(i);if(/right|left/.test(e)){var l=t.top-r-s.scroll,u=t.top+r-s.scroll+a;ls.top+s.height&&(o.top=s.top+s.height-u)}else{var c=t.left-r,d=t.left+r+n;cs.width&&(o.left=s.left+s.width-d)}return o}function V(e,t,n){var a=m('.tooltip-arrow, .arrow',z[0]);a.css(n?'left':'top',50*(1-e/t)+'%').css(n?'top':'left','')}function O(){clearTimeout(R),I.$isShown&&null!==z&&(H.autoClose&&T(),H.keyboard&&S()),j&&(j.$destroy(),j=null),z&&(z.remove(),z=I.$element=null)}var I={},P=i[0].nodeName.toLowerCase(),H=I.$options=angular.extend({},e,r);I.$promise=$(H.template);var N=I.$scope=H.scope&&H.scope.$new()||a.$new();if(H.delay&&angular.isString(H.delay)){var L=H.delay.split(',').map(parseFloat);H.delay=L.length>1?{show:L[0],hide:L[1]}:L[0]}I.$id=H.id||i.attr('id')||'',H.title&&(N.title=u.trustAsHtml(H.title)),N.$setEnabled=function(e){N.$$postDigest(function(){I.setEnabled(e)})},N.$hide=function(){N.$$postDigest(function(){I.hide()})},N.$show=function(){N.$$postDigest(function(){I.show()})},N.$toggle=function(){N.$$postDigest(function(){I.toggle()})},I.$isShown=N.$isShown=!1;var R,Y;H.contentTemplate&&(I.$promise=I.$promise.then(function(e){var t=angular.element(e);return $(H.contentTemplate).then(function(e){var n=m('[ng-bind="content"]',t[0]);return n.length||(n=m('[ng-bind="title"]',t[0])),n.removeAttr('ng-bind').html(e),t[0].outerHTML})}));var q,z,K,U,j;I.$promise.then(function(e){angular.isObject(e)&&(e=e.data),H.html&&(e=e.replace(w,'ng-bind-html="')),e=h.apply(e),K=e,q=o(e),I.init()}),I.init=function(){H.delay&&angular.isNumber(H.delay)&&(H.delay={show:H.delay,hide:H.delay}),'self'===H.container?U=i:angular.isElement(H.container)?U=H.container:H.container&&(U=m(H.container)),b(),H.target&&(H.target=angular.isElement(H.target)?H.target:m(H.target)),H.show&&N.$$postDigest(function(){'focus'===H.trigger?i[0].focus():I.show()})},I.destroy=function(){D(),O(),N.$destroy()},I.enter=function(){return clearTimeout(R),Y='in',H.delay&&H.delay.show?void(R=setTimeout(function(){'in'===Y&&I.show()},H.delay.show)):I.show()},I.show=function(){if(H.bsEnabled&&!I.$isShown){N.$emit(H.prefixEvent+'.show.before',I);var e,t;H.container?(e=U,t=U[0].lastChild?angular.element(U[0].lastChild):null):(e=null,t=i),z&&O(),j=I.$scope.$new(),z=I.$element=q(j,function(e,t){}),z.css({top:'-9999px',left:'-9999px',right:'auto',display:'block',visibility:'hidden'}),H.animation&&z.addClass(H.animation),H.type&&z.addClass(H.prefixClass+'-'+H.type),H.customClass&&z.addClass(H.customClass),t?t.after(z):e.prepend(z),I.$isShown=N.$isShown=!0,g(N),I.$applyPlacement();var n=l.enter(z,e,t,s);n&&n.then&&n.then(s),g(N),d(function(){z&&z.css({visibility:'visible'})}),H.keyboard&&('focus'!==H.trigger&&I.focus(),k()),H.autoClose&&x()}},I.leave=function(){return clearTimeout(R),Y='out',H.delay&&H.delay.hide?void(R=setTimeout(function(){'out'===Y&&I.hide()},H.delay.hide)):I.hide()};var W,B;I.hide=function(e){if(I.$isShown){N.$emit(H.prefixEvent+'.hide.before',I),W=e,B=z;var t=l.leave(z,p);t&&t.then&&t.then(p),I.$isShown=N.$isShown=!1,g(N),H.keyboard&&null!==z&&S(),H.autoClose&&null!==z&&T()}},I.toggle=function(){I.$isShown?I.leave():I.enter()},I.focus=function(){z[0].focus()},I.setEnabled=function(e){H.bsEnabled=e},I.setViewport=function(e){H.viewport=e},I.$applyPlacement=function(){if(z){var t=H.placement,n=/\s?auto?\s?/i,a=n.test(t);a&&(t=t.replace(n,'')||e.placement),z.addClass(H.placement);var o=M(),r=z.prop('offsetWidth'),s=z.prop('offsetHeight');if(a){var l=t,u=H.container?m(H.container):i.parent(),c=M(u);l.indexOf('bottom')>=0&&o.bottom+s>c.bottom?t=l.replace('bottom','top'):l.indexOf('top')>=0&&o.top-sc.width?t='right'===l?'left':t.replace('left','right'):('left'===l||'bottom-right'===l||'top-right'===l)&&o.left-r=e.length&&(u.$activeIndex=s.autoSelect?0:-1),/^(bottom|bottom-left|bottom-right)$/.test(s.placement)||o(r.$applyPlacement)},r.activate=function(e){u.$activeIndex=e},r.select=function(e){if(-1!==e){var t=u.$matches[e].value;n.$setViewValue(t),n.$render(),u.$resetMatches(),l&&l.$digest(),u.$emit(s.prefixEvent+'.select',t,e,r)}},r.$isVisible=function(){return s.minLength&&n?u.$matches.length&&angular.isString(n.$viewValue)&&n.$viewValue.length>=s.minLength:!!u.$matches.length},r.$getIndex=function(e){var t=u.$matches.length,n=t;if(t){for(n=t;n--&&u.$matches[n].value!==e;);if(!(0>n))return n}},r.$onMouseDown=function(e){e.preventDefault(),e.stopPropagation()},r.$onKeyDown=function(e){/(38|40|13)/.test(e.keyCode)&&(!r.$isVisible()||13===e.keyCode&&-1===u.$activeIndex||(e.preventDefault(),e.stopPropagation()),13===e.keyCode&&u.$matches.length?r.select(u.$activeIndex):38===e.keyCode&&u.$activeIndex>0?u.$activeIndex--:40===e.keyCode&&u.$activeIndex0)return void s.$setViewValue(s.$viewValue.substring(0,s.$viewValue.length-1));e.length>d&&(e=e.slice(0,d));var n=m.$isVisible();n&&m.update(e),(1!==e.length||e[0].value!==t)&&(!n&&m.update(e),s.$render())})}),s.$formatters.push(function(e){var t=g.displayValue(e);return t===n?'':t}),s.$render=function(){if(s.$isEmpty(s.$viewValue))return t.val('');var e=m.$getIndex(s.$modelValue),n=angular.isDefined(e)?m.$scope.$matches[e].label:s.$viewValue;n=angular.isObject(n)?g.displayValue(n):n;var a=n?n.toString().replace(/<(?:.|\n)*?>/gm,''):'';t.val(l.trimValue===!1?a:a.trim())},e.$on('$destroy',function(){m&&m.destroy(),l=null,m=null})}}}])}(window,document); -//# sourceMappingURL=angular-strap.min.js.map \ No newline at end of file +!function (e, t, n) { + 'use strict'; + angular.module('mgcrea.ngStrap', ['mgcrea.ngStrap.modal', 'mgcrea.ngStrap.aside', 'mgcrea.ngStrap.alert', 'mgcrea.ngStrap.button', 'mgcrea.ngStrap.select', 'mgcrea.ngStrap.datepicker', 'mgcrea.ngStrap.timepicker', 'mgcrea.ngStrap.navbar', 'mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.popover', 'mgcrea.ngStrap.dropdown', 'mgcrea.ngStrap.typeahead', 'mgcrea.ngStrap.scrollspy', 'mgcrea.ngStrap.affix', 'mgcrea.ngStrap.tab', 'mgcrea.ngStrap.collapse']), angular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions', 'mgcrea.ngStrap.helpers.debounce']).provider('$affix', function () { + var e = this.defaults = {offsetTop: 'auto', inlineStyles: !0}; + this.$get = ['$window', 'debounce', 'dimensions', function (t, n, a) { + function o(o, s) { + function l(e, t, n) { + var a = u(), o = c(); + return v >= a ? 'top' : null !== e && a + e <= t.top ? 'middle' : null !== w && t.top + n + $ >= o - w ? 'bottom' : 'middle' + } + + function u() { + return p[0] === t ? t.pageYOffset : p[0].scrollTop + } + + function c() { + return p[0] === t ? t.document.body.scrollHeight : p[0].scrollHeight + } + + var d = {}, f = angular.extend({}, e, s), p = f.target, g = 'affix affix-top affix-bottom', m = !1, $ = 0, h = 0, v = 0, w = 0, y = null, b = null, D = o.parent(); + if (f.offsetParent)if (f.offsetParent.match(/^\d+$/))for (var k = 0; k < 1 * f.offsetParent - 1; k++)D = D.parent(); else D = angular.element(f.offsetParent); + return d.init = function () { + this.$parseOffsets(), h = a.offset(o[0]).top + $, m = !o[0].style.width, p.on('scroll', this.checkPosition), p.on('click', this.checkPositionWithEventLoop), r.on('resize', this.$debouncedOnResize), this.checkPosition(), this.checkPositionWithEventLoop() + }, d.destroy = function () { + p.off('scroll', this.checkPosition), p.off('click', this.checkPositionWithEventLoop), r.off('resize', this.$debouncedOnResize) + }, d.checkPositionWithEventLoop = function () { + setTimeout(d.checkPosition, 1) + }, d.checkPosition = function () { + var e = u(), t = a.offset(o[0]), n = a.height(o[0]), r = l(b, t, n); + y !== r && (y = r, o.removeClass(g).addClass('affix' + ('middle' !== r ? '-' + r : '')), 'top' === r ? (b = null, m && o.css('width', ''), f.inlineStyles && (o.css('position', f.offsetParent ? '' : 'relative'), o.css('top', ''))) : 'bottom' === r ? (b = f.offsetUnpin ? -(1 * f.offsetUnpin) : t.top - e, m && o.css('width', ''), f.inlineStyles && (o.css('position', f.offsetParent ? '' : 'relative'), o.css('top', f.offsetParent ? '' : i[0].offsetHeight - w - n - h + 'px'))) : (b = null, m && o.css('width', o[0].offsetWidth + 'px'), f.inlineStyles && (o.css('position', 'fixed'), o.css('top', $ + 'px')))) + }, d.$onResize = function () { + d.$parseOffsets(), d.checkPosition() + }, d.$debouncedOnResize = n(d.$onResize, 50), d.$parseOffsets = function () { + var e = o.css('position'); + f.inlineStyles && o.css('position', f.offsetParent ? '' : 'relative'), f.offsetTop && ('auto' === f.offsetTop && (f.offsetTop = '+0'), f.offsetTop.match(/^[-+]\d+$/) ? ($ = 1 * -f.offsetTop, v = f.offsetParent ? a.offset(D[0]).top + 1 * f.offsetTop : a.offset(o[0]).top - a.css(o[0], 'marginTop', !0) + 1 * f.offsetTop) : v = 1 * f.offsetTop), f.offsetBottom && (w = f.offsetParent && f.offsetBottom.match(/^[-+]\d+$/) ? c() - (a.offset(D[0]).top + a.height(D[0])) + 1 * f.offsetBottom + 1 : 1 * f.offsetBottom), f.inlineStyles && o.css('position', e) + }, d.init(), d + } + + var i = angular.element(t.document.body), r = angular.element(t); + return o + }] + }).directive('bsAffix', ['$affix', '$window', function (e, t) { + return { + restrict: 'EAC', require: '^?bsAffixTarget', link: function (n, a, o, i) { + var r = {scope: n, target: i ? i.$element : angular.element(t)}; + angular.forEach(['offsetTop', 'offsetBottom', 'offsetParent', 'offsetUnpin', 'inlineStyles'], function (e) { + if (angular.isDefined(o[e])) { + var t = o[e]; + /true/i.test(t) && (t = !0), /false/i.test(t) && (t = !1), r[e] = t + } + }); + var s = e(a, r); + n.$on('$destroy', function () { + s && s.destroy(), r = null, s = null + }) + } + } + }]).directive('bsAffixTarget', function () { + return { + controller: ['$element', function (e) { + this.$element = e + }] + } + }), angular.module('mgcrea.ngStrap.alert', ['mgcrea.ngStrap.modal']).provider('$alert', function () { + var e = this.defaults = { + animation: 'am-fade', + prefixClass: 'alert', + prefixEvent: 'alert', + placement: null, + template: 'alert/alert.tpl.html', + container: !1, + element: null, + backdrop: !1, + keyboard: !0, + show: !0, + duration: !1, + type: !1, + dismissable: !0 + }; + this.$get = ['$modal', '$timeout', function (t, n) { + function a(a) { + var o = {}, i = angular.extend({}, e, a); + o = t(i), o.$scope.dismissable = !!i.dismissable, i.type && (o.$scope.type = i.type); + var r = o.show; + return i.duration && (o.show = function () { + r(), n(function () { + o.hide() + }, 1e3 * i.duration) + }), o + } + + return a + }] + }).directive('bsAlert', ['$window', '$sce', '$alert', function (e, t, n) { + e.requestAnimationFrame || e.setTimeout; + return { + restrict: 'EAC', scope: !0, link: function (e, a, o, i) { + var r = {scope: e, element: a, show: !1}; + angular.forEach(['template', 'placement', 'keyboard', 'html', 'container', 'animation', 'duration', 'dismissable'], function (e) { + angular.isDefined(o[e]) && (r[e] = o[e]) + }); + var s = /^(false|0|)$/i; + angular.forEach(['keyboard', 'html', 'container', 'dismissable'], function (e) { + angular.isDefined(o[e]) && s.test(o[e]) && (r[e] = !1) + }), e.hasOwnProperty('title') || (e.title = ''), angular.forEach(['title', 'content', 'type'], function (n) { + o[n] && o.$observe(n, function (a, o) { + e[n] = t.trustAsHtml(a) + }) + }), o.bsAlert && e.$watch(o.bsAlert, function (t, n) { + angular.isObject(t) ? angular.extend(e, t) : e.content = t + }, !0); + var l = n(r); + a.on(o.trigger || 'click', l.toggle), e.$on('$destroy', function () { + l && l.destroy(), r = null, l = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.aside', ['mgcrea.ngStrap.modal']).provider('$aside', function () { + var e = this.defaults = { + animation: 'am-fade-and-slide-right', + prefixClass: 'aside', + prefixEvent: 'aside', + placement: 'right', + template: 'aside/aside.tpl.html', + contentTemplate: !1, + container: !1, + element: null, + backdrop: !0, + keyboard: !0, + html: !1, + show: !0 + }; + this.$get = ['$modal', function (t) { + function n(n) { + var a = {}, o = angular.extend({}, e, n); + return a = t(o) + } + + return n + }] + }).directive('bsAside', ['$window', '$sce', '$aside', function (e, t, n) { + e.requestAnimationFrame || e.setTimeout; + return { + restrict: 'EAC', scope: !0, link: function (e, a, o, i) { + var r = {scope: e, element: a, show: !1}; + angular.forEach(['template', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation'], function (e) { + angular.isDefined(o[e]) && (r[e] = o[e]) + }); + var s = /^(false|0|)$/i; + angular.forEach(['backdrop', 'keyboard', 'html', 'container'], function (e) { + angular.isDefined(o[e]) && s.test(o[e]) && (r[e] = !1) + }), angular.forEach(['title', 'content'], function (n) { + o[n] && o.$observe(n, function (a, o) { + e[n] = t.trustAsHtml(a) + }) + }), o.bsAside && e.$watch(o.bsAside, function (t, n) { + angular.isObject(t) ? angular.extend(e, t) : e.content = t + }, !0); + var l = n(r); + a.on(o.trigger || 'click', l.toggle), e.$on('$destroy', function () { + l && l.destroy(), r = null, l = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.button', []).provider('$button', function () { + var e = this.defaults = {activeClass: 'active', toggleEvent: 'click'}; + this.$get = function () { + return {defaults: e} + } + }).directive('bsCheckboxGroup', function () { + return { + restrict: 'A', require: 'ngModel', compile: function (e, t) { + e.attr('data-toggle', 'buttons'), e.removeAttr('ng-model'); + var n = e[0].querySelectorAll('input[type="checkbox"]'); + angular.forEach(n, function (e) { + var n = angular.element(e); + n.attr('bs-checkbox', ''), n.attr('ng-model', t.ngModel + '.' + n.attr('value')) + }) + } + } + }).directive('bsCheckbox', ['$button', '$$rAF', function (e, t) { + var n = e.defaults, a = /^(true|false|\d+)$/; + return { + restrict: 'A', require: 'ngModel', link: function (e, o, i, r) { + var s = n, l = 'INPUT' === o[0].nodeName, u = l ? o.parent() : o, c = angular.isDefined(i.trueValue) ? i.trueValue : !0; + a.test(i.trueValue) && (c = e.$eval(i.trueValue)); + var d = angular.isDefined(i.falseValue) ? i.falseValue : !1; + a.test(i.falseValue) && (d = e.$eval(i.falseValue)); + var f = 'boolean' != typeof c || 'boolean' != typeof d; + f && (r.$parsers.push(function (e) { + return e ? c : d + }), r.$formatters.push(function (e) { + return angular.equals(e, c) + }), e.$watch(i.ngModel, function (e, t) { + r.$render() + })), r.$render = function () { + var e = angular.equals(r.$modelValue, c); + t(function () { + l && (o[0].checked = e), u.toggleClass(s.activeClass, e) + }) + }, o.bind(s.toggleEvent, function () { + e.$apply(function () { + l || r.$setViewValue(!u.hasClass('active')), f || r.$render() + }) + }) + } + } + }]).directive('bsRadioGroup', function () { + return { + restrict: 'A', require: 'ngModel', compile: function (e, t) { + e.attr('data-toggle', 'buttons'), e.removeAttr('ng-model'); + var n = e[0].querySelectorAll('input[type="radio"]'); + angular.forEach(n, function (e) { + angular.element(e).attr('bs-radio', ''), angular.element(e).attr('ng-model', t.ngModel) + }) + } + } + }).directive('bsRadio', ['$button', '$$rAF', function (e, t) { + var n = e.defaults, a = /^(true|false|\d+)$/; + return { + restrict: 'A', require: 'ngModel', link: function (e, o, i, r) { + var s, l = n, u = 'INPUT' === o[0].nodeName, c = u ? o.parent() : o; + i.$observe('value', function (t) { + s = a.test(t) ? e.$eval(t) : t, r.$render() + }), r.$render = function () { + var e = angular.equals(r.$modelValue, s); + t(function () { + u && (o[0].checked = e), c.toggleClass(l.activeClass, e) + }) + }, o.bind(l.toggleEvent, function () { + e.$apply(function () { + r.$setViewValue(s), r.$render() + }) + }) + } + } + }]), angular.module('mgcrea.ngStrap.collapse', []).provider('$collapse', function () { + var e = this.defaults = { + animation: 'am-collapse', + disallowToggle: !1, + activeClass: 'in', + startCollapsed: !1, + allowMultiple: !1 + }, t = this.controller = function (t, n, a) { + function o(e) { + for (var t = l.$targets.$active, n = 0; n < t.length; n++)e < t[n] && (t[n] = t[n] - 1), t[n] === l.$targets.length && (t[n] = l.$targets.length - 1) + } + + function i(e) { + var t = l.$targets.$active; + return -1 === t.indexOf(e) ? !1 : !0 + } + + function r(e) { + var t = l.$targets.$active.indexOf(e); + -1 !== t && l.$targets.$active.splice(t, 1) + } + + function s(e) { + l.$options.allowMultiple || l.$targets.$active.splice(0, 1), -1 === l.$targets.$active.indexOf(e) && l.$targets.$active.push(e) + } + + var l = this; + l.$options = angular.copy(e), angular.forEach(['animation', 'disallowToggle', 'activeClass', 'startCollapsed', 'allowMultiple'], function (e) { + angular.isDefined(a[e]) && (l.$options[e] = a[e]) + }); + var u = /^(false|0|)$/i; + angular.forEach(['disallowToggle', 'startCollapsed', 'allowMultiple'], function (e) { + angular.isDefined(a[e]) && u.test(a[e]) && (l.$options[e] = !1) + }), l.$toggles = [], l.$targets = [], l.$viewChangeListeners = [], l.$registerToggle = function (e) { + l.$toggles.push(e) + }, l.$registerTarget = function (e) { + l.$targets.push(e) + }, l.$unregisterToggle = function (e) { + var t = l.$toggles.indexOf(e); + l.$toggles.splice(t, 1) + }, l.$unregisterTarget = function (e) { + var t = l.$targets.indexOf(e); + l.$targets.splice(t, 1), l.$options.allowMultiple && r(e), o(t), l.$viewChangeListeners.forEach(function (e) { + e() + }) + }, l.$targets.$active = l.$options.startCollapsed ? [] : [0], l.$setActive = t.$setActive = function (e) { + angular.isArray(e) ? l.$targets.$active = angular.copy(e) : l.$options.disallowToggle ? s(e) : i(e) ? r(e) : s(e), l.$viewChangeListeners.forEach(function (e) { + e() + }) + }, l.$activeIndexes = function () { + return l.$options.allowMultiple ? l.$targets.$active : 1 === l.$targets.$active.length ? l.$targets.$active[0] : -1 + } + }; + this.$get = function () { + var n = {}; + return n.defaults = e, n.controller = t, n + } + }).directive('bsCollapse', ['$window', '$animate', '$collapse', function (e, t, n) { + n.defaults; + return { + require: ['?ngModel', 'bsCollapse'], + controller: ['$scope', '$element', '$attrs', n.controller], + link: function (e, t, n, a) { + var o = a[0], i = a[1]; + o && (i.$viewChangeListeners.push(function () { + o.$setViewValue(i.$activeIndexes()) + }), o.$formatters.push(function (e) { + if (angular.isArray(e))i.$setActive(e); else { + var t = i.$activeIndexes(); + angular.isArray(t) ? -1 === t.indexOf(1 * e) && i.$setActive(1 * e) : t !== 1 * e && i.$setActive(1 * e) + } + return e + })) + } + } + }]).directive('bsCollapseToggle', function () { + return { + require: ['^?ngModel', '^bsCollapse'], link: function (e, t, n, a) { + var o = (a[0], a[1]); + t.attr('data-toggle', 'collapse'), o.$registerToggle(t), e.$on('$destroy', function () { + o.$unregisterToggle(t) + }), t.on('click', function () { + var a = n.bsCollapseToggle || o.$toggles.indexOf(t); + o.$setActive(1 * a), e.$apply() + }) + } + } + }).directive('bsCollapseTarget', ['$animate', function (e) { + return { + require: ['^?ngModel', '^bsCollapse'], link: function (t, n, a, o) { + function i() { + var t = r.$targets.indexOf(n), a = r.$activeIndexes(), o = 'removeClass'; + angular.isArray(a) ? -1 !== a.indexOf(t) && (o = 'addClass') : t === a && (o = 'addClass'), e[o](n, r.$options.activeClass) + } + + var r = (o[0], o[1]); + n.addClass('collapse'), r.$options.animation && n.addClass(r.$options.animation), r.$registerTarget(n), t.$on('$destroy', function () { + r.$unregisterTarget(n) + }), r.$viewChangeListeners.push(function () { + i() + }), i() + } + } + }]), angular.module('mgcrea.ngStrap.datepicker', ['mgcrea.ngStrap.helpers.dateParser', 'mgcrea.ngStrap.helpers.dateFormatter', 'mgcrea.ngStrap.tooltip']).provider('$datepicker', function () { + var e = this.defaults = { + animation: 'am-fade', + prefixClass: 'datepicker', + placement: 'bottom-left', + template: 'datepicker/datepicker.tpl.html', + trigger: 'focus', + container: !1, + keyboard: !0, + html: !1, + delay: 0, + useNative: !1, + dateType: 'date', + dateFormat: 'shortDate', + timezone: null, + modelDateFormat: null, + dayFormat: 'dd', + monthFormat: 'MMM', + yearFormat: 'yyyy', + monthTitleFormat: 'MMMM yyyy', + yearTitleFormat: 'yyyy', + strictFormat: !1, + autoclose: !1, + minDate: -(1 / 0), + maxDate: +(1 / 0), + startView: 0, + minView: 0, + startWeek: 0, + daysOfWeekDisabled: '', + iconLeft: 'glyphicon glyphicon-chevron-left', + iconRight: 'glyphicon glyphicon-chevron-right' + }; + this.$get = ['$window', '$document', '$rootScope', '$sce', '$dateFormatter', 'datepickerViews', '$tooltip', '$timeout', function (t, n, a, o, i, r, s, l) { + function u(t, n, a) { + function o(e) { + e.selected = u.$isSelected(e.date) + } + + function i() { + t[0].focus() + } + + var u = s(t, angular.extend({}, e, a)), f = a.scope, p = u.$options, g = u.$scope; + p.startView && (p.startView -= p.minView); + var m = r(u); + u.$views = m.views; + var $ = m.viewDate; + g.$mode = p.startView, g.$iconLeft = p.iconLeft, g.$iconRight = p.iconRight; + var h = u.$views[g.$mode]; + g.$select = function (e) { + u.select(e) + }, g.$selectPane = function (e) { + u.$selectPane(e) + }, g.$toggleMode = function () { + u.setMode((g.$mode + 1) % u.$views.length) + }, u.update = function (e) { + angular.isDate(e) && !isNaN(e.getTime()) && (u.$date = e, h.update.call(h, e)), u.$build(!0) + }, u.updateDisabledDates = function (e) { + p.disabledDateRanges = e; + for (var t = 0, n = g.rows.length; n > t; t++)angular.forEach(g.rows[t], u.$setDisabledEl) + }, u.select = function (e, t) { + angular.isDate(n.$dateValue) || (n.$dateValue = new Date(e)), !g.$mode || t ? (n.$setViewValue(angular.copy(e)), n.$render(), p.autoclose && !t && l(function () { + u.hide(!0) + })) : (angular.extend($, { + year: e.getFullYear(), + month: e.getMonth(), + date: e.getDate() + }), u.setMode(g.$mode - 1), u.$build()) + }, u.setMode = function (e) { + g.$mode = e, h = u.$views[g.$mode], u.$build() + }, u.$build = function (e) { + e === !0 && h.built || (e !== !1 || h.built) && h.build.call(h) + }, u.$updateSelected = function () { + for (var e = 0, t = g.rows.length; t > e; e++)angular.forEach(g.rows[e], o) + }, u.$isSelected = function (e) { + return h.isSelected(e) + }, u.$setDisabledEl = function (e) { + e.disabled = h.isDisabled(e.date) + }, u.$selectPane = function (e) { + var t = h.steps, n = new Date(Date.UTC($.year + (t.year || 0) * e, $.month + (t.month || 0) * e, 1)); + angular.extend($, { + year: n.getUTCFullYear(), + month: n.getUTCMonth(), + date: n.getUTCDate() + }), u.$build() + }, u.$onMouseDown = function (e) { + if (e.preventDefault(), e.stopPropagation(), d) { + var t = angular.element(e.target); + 'button' !== t[0].nodeName.toLowerCase() && (t = t.parent()), t.triggerHandler('click') + } + }, u.$onKeyDown = function (e) { + if (/(38|37|39|40|13)/.test(e.keyCode) && !e.shiftKey && !e.altKey) { + if (e.preventDefault(), e.stopPropagation(), 13 === e.keyCode)return g.$mode ? g.$apply(function () { + u.setMode(g.$mode - 1) + }) : u.hide(!0); + h.onKeyDown(e), f.$digest() + } + }; + var v = u.init; + u.init = function () { + return c && p.useNative ? (t.prop('type', 'date'), void t.css('-webkit-appearance', 'textfield')) : (d && (t.prop('type', 'text'), t.attr('readonly', 'true'), t.on('click', i)), void v()) + }; + var w = u.destroy; + u.destroy = function () { + c && p.useNative && t.off('click', i), w() + }; + var y = u.show; + u.show = function () { + y(), l(function () { + u.$isShown && (u.$element.on(d ? 'touchstart' : 'mousedown', u.$onMouseDown), p.keyboard && t.on('keydown', u.$onKeyDown)) + }, 0, !1) + }; + var b = u.hide; + return u.hide = function (e) { + u.$isShown && (u.$element.off(d ? 'touchstart' : 'mousedown', u.$onMouseDown), p.keyboard && t.off('keydown', u.$onKeyDown), b(e)) + }, u + } + + var c = (angular.element(t.document.body), /(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)), d = 'createTouch' in t.document && c; + return e.lang || (e.lang = i.getDefaultLocale()), u.defaults = e, u + }] + }).directive('bsDatepicker', ['$window', '$parse', '$q', '$dateFormatter', '$dateParser', '$datepicker', function (e, t, n, a, o, i) { + var r = (i.defaults, /(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent)); + return { + restrict: 'EAC', require: 'ngModel', link: function (e, t, n, s) { + function l(e) { + return e && e.length ? e : null + } + + function u(e) { + if (angular.isDate(e)) { + var t = isNaN(p.$options.minDate) || e.getTime() >= p.$options.minDate, n = isNaN(p.$options.maxDate) || e.getTime() <= p.$options.maxDate, a = t && n; + s.$setValidity('date', a), s.$setValidity('min', t), s.$setValidity('max', n), a && (s.$dateValue = e) + } + } + + function c() { + return !s.$dateValue || isNaN(s.$dateValue.getTime()) ? '' : m(s.$dateValue, d.dateFormat) + } + + var d = {scope: e, controller: s}; + angular.forEach(['placement', 'container', 'delay', 'trigger', 'html', 'animation', 'template', 'autoclose', 'dateType', 'dateFormat', 'timezone', 'modelDateFormat', 'dayFormat', 'strictFormat', 'startWeek', 'startDate', 'useNative', 'lang', 'startView', 'minView', 'iconLeft', 'iconRight', 'daysOfWeekDisabled', 'id', 'prefixClass', 'prefixEvent'], function (e) { + angular.isDefined(n[e]) && (d[e] = n[e]) + }); + var f = /^(false|0|)$/i; + angular.forEach(['html', 'container', 'autoclose', 'useNative'], function (e) { + angular.isDefined(n[e]) && f.test(n[e]) && (d[e] = !1) + }), n.bsShow && e.$watch(n.bsShow, function (e, t) { + p && angular.isDefined(e) && (angular.isString(e) && (e = !!e.match(/true|,?(datepicker),?/i)), e === !0 ? p.show() : p.hide()) + }); + var p = i(t, s, d); + d = p.$options, r && d.useNative && (d.dateFormat = 'yyyy-MM-dd'); + var g = d.lang, m = function (e, t) { + return a.formatDate(e, t, g) + }, $ = o({format: d.dateFormat, lang: g, strict: d.strictFormat}); + angular.forEach(['minDate', 'maxDate'], function (e) { + angular.isDefined(n[e]) && n.$observe(e, function (t) { + p.$options[e] = $.getDateForAttribute(e, t), !isNaN(p.$options[e]) && p.$build(!1), u(s.$dateValue) + }) + }), e.$watch(n.ngModel, function (e, t) { + p.update(s.$dateValue) + }, !0), angular.isDefined(n.disabledDates) && e.$watch(n.disabledDates, function (e, t) { + e = l(e), t = l(t), e && p.updateDisabledDates(e) + }), s.$parsers.unshift(function (e) { + var t; + if (!e)return s.$setValidity('date', !0), null; + var n = $.parse(e, s.$dateValue); + return !n || isNaN(n.getTime()) ? void s.$setValidity('date', !1) : (u(n), 'string' === d.dateType ? (t = $.timezoneOffsetAdjust(n, d.timezone, !0), m(t, d.modelDateFormat || d.dateFormat)) : (t = $.timezoneOffsetAdjust(s.$dateValue, d.timezone, !0), 'number' === d.dateType ? t.getTime() : 'unix' === d.dateType ? t.getTime() / 1e3 : 'iso' === d.dateType ? t.toISOString() : new Date(t))) + }), s.$formatters.push(function (e) { + var t; + return t = angular.isUndefined(e) || null === e ? 0 / 0 : angular.isDate(e) ? e : 'string' === d.dateType ? $.parse(e, null, d.modelDateFormat) : new Date('unix' === d.dateType ? 1e3 * e : e), s.$dateValue = $.timezoneOffsetAdjust(t, d.timezone), c() + }), s.$render = function () { + t.val(c()) + }, e.$on('$destroy', function () { + p && p.destroy(), d = null, p = null + }) + } + } + }]).provider('datepickerViews', function () { + function e(e, t) { + for (var n = []; e.length > 0;)n.push(e.splice(0, t)); + return n + } + + function t(e, t) { + return (e % t + t) % t + } + + this.defaults = {dayFormat: 'dd', daySplit: 7}; + this.$get = ['$dateFormatter', '$dateParser', '$sce', function (n, a, o) { + return function (i) { + var r = i.$scope, s = i.$options, l = s.lang, u = function (e, t) { + return n.formatDate(e, t, l) + }, c = a({ + format: s.dateFormat, + lang: l, + strict: s.strictFormat + }), d = n.weekdaysShort(l), f = d.slice(s.startWeek).concat(d.slice(0, s.startWeek)), p = o.trustAsHtml('' + f.join('') + ''), g = i.$date || (s.startDate ? c.getDateForAttribute('startDate', s.startDate) : new Date), m = { + year: g.getFullYear(), + month: g.getMonth(), + date: g.getDate() + }, $ = [{ + format: s.dayFormat, split: 7, steps: {month: 1}, update: function (e, t) { + !this.built || t || e.getFullYear() !== m.year || e.getMonth() !== m.month ? (angular.extend(m, { + year: i.$date.getFullYear(), + month: i.$date.getMonth(), + date: i.$date.getDate() + }), i.$build()) : (e.getDate() !== m.date || 1 === e.getDate()) && (m.date = i.$date.getDate(), i.$updateSelected()) + }, build: function () { + var n = new Date(m.year, m.month, 1), a = n.getTimezoneOffset(), o = new Date(+n - 864e5 * t(n.getDay() - s.startWeek, 7)), l = o.getTimezoneOffset(), d = c.timezoneOffsetAdjust(new Date, s.timezone).toDateString(); + l !== a && (o = new Date(+o + 6e4 * (l - a))); + for (var f, g = [], $ = 0; 42 > $; $++)f = c.daylightSavingAdjust(new Date(o.getFullYear(), o.getMonth(), o.getDate() + $)), g.push({ + date: f, + isToday: f.toDateString() === d, + label: u(f, this.format), + selected: i.$date && this.isSelected(f), + muted: f.getMonth() !== m.month, + disabled: this.isDisabled(f) + }); + r.title = u(n, s.monthTitleFormat), r.showLabels = !0, r.labels = p, r.rows = e(g, this.split), this.built = !0 + }, isSelected: function (e) { + return i.$date && e.getFullYear() === i.$date.getFullYear() && e.getMonth() === i.$date.getMonth() && e.getDate() === i.$date.getDate() + }, isDisabled: function (e) { + var t = e.getTime(); + if (t < s.minDate || t > s.maxDate)return !0; + if (-1 !== s.daysOfWeekDisabled.indexOf(e.getDay()))return !0; + if (s.disabledDateRanges)for (var n = 0; n < s.disabledDateRanges.length; n++)if (t >= s.disabledDateRanges[n].start && t <= s.disabledDateRanges[n].end)return !0; + return !1 + }, onKeyDown: function (e) { + if (i.$date) { + var t, n = i.$date.getTime(); + 37 === e.keyCode ? t = new Date(n - 864e5) : 38 === e.keyCode ? t = new Date(n - 6048e5) : 39 === e.keyCode ? t = new Date(n + 864e5) : 40 === e.keyCode && (t = new Date(n + 6048e5)), this.isDisabled(t) || i.select(t, !0) + } + } + }, { + name: 'month', format: s.monthFormat, split: 4, steps: {year: 1}, update: function (e, t) { + this.built && e.getFullYear() === m.year ? e.getMonth() !== m.month && (angular.extend(m, { + month: i.$date.getMonth(), + date: i.$date.getDate() + }), i.$updateSelected()) : (angular.extend(m, { + year: i.$date.getFullYear(), + month: i.$date.getMonth(), + date: i.$date.getDate() + }), i.$build()) + }, build: function () { + for (var t, n = (new Date(m.year, 0, 1), []), a = 0; 12 > a; a++)t = new Date(m.year, a, 1), n.push({ + date: t, + label: u(t, this.format), + selected: i.$isSelected(t), + disabled: this.isDisabled(t) + }); + r.title = u(t, s.yearTitleFormat), r.showLabels = !1, r.rows = e(n, this.split), this.built = !0 + }, isSelected: function (e) { + return i.$date && e.getFullYear() === i.$date.getFullYear() && e.getMonth() === i.$date.getMonth() + }, isDisabled: function (e) { + var t = +new Date(e.getFullYear(), e.getMonth() + 1, 0); + return t < s.minDate || e.getTime() > s.maxDate + }, onKeyDown: function (e) { + if (i.$date) { + var t = i.$date.getMonth(), n = new Date(i.$date); + 37 === e.keyCode ? n.setMonth(t - 1) : 38 === e.keyCode ? n.setMonth(t - 4) : 39 === e.keyCode ? n.setMonth(t + 1) : 40 === e.keyCode && n.setMonth(t + 4), this.isDisabled(n) || i.select(n, !0) + } + } + }, { + name: 'year', format: s.yearFormat, split: 4, steps: {year: 12}, update: function (e, t) { + !this.built || t || parseInt(e.getFullYear() / 20, 10) !== parseInt(m.year / 20, 10) ? (angular.extend(m, { + year: i.$date.getFullYear(), + month: i.$date.getMonth(), + date: i.$date.getDate() + }), i.$build()) : e.getFullYear() !== m.year && (angular.extend(m, { + year: i.$date.getFullYear(), + month: i.$date.getMonth(), + date: i.$date.getDate() + }), i.$updateSelected()) + }, build: function () { + for (var t, n = m.year - m.year % (3 * this.split), a = [], o = 0; 12 > o; o++)t = new Date(n + o, 0, 1), a.push({ + date: t, + label: u(t, this.format), + selected: i.$isSelected(t), + disabled: this.isDisabled(t) + }); + r.title = a[0].label + '-' + a[a.length - 1].label, r.showLabels = !1, r.rows = e(a, this.split), this.built = !0 + }, isSelected: function (e) { + return i.$date && e.getFullYear() === i.$date.getFullYear() + }, isDisabled: function (e) { + var t = +new Date(e.getFullYear() + 1, 0, 0); + return t < s.minDate || e.getTime() > s.maxDate + }, onKeyDown: function (e) { + if (i.$date) { + var t = i.$date.getFullYear(), n = new Date(i.$date); + 37 === e.keyCode ? n.setYear(t - 1) : 38 === e.keyCode ? n.setYear(t - 4) : 39 === e.keyCode ? n.setYear(t + 1) : 40 === e.keyCode && n.setYear(t + 4), this.isDisabled(n) || i.select(n, !0) + } + } + }]; + return {views: s.minView ? Array.prototype.slice.call($, s.minView) : $, viewDate: m} + } + }] + }), angular.module('mgcrea.ngStrap.dropdown', ['mgcrea.ngStrap.tooltip']).provider('$dropdown', function () { + var e = this.defaults = { + animation: 'am-fade', + prefixClass: 'dropdown', + prefixEvent: 'dropdown', + placement: 'bottom-left', + template: 'dropdown/dropdown.tpl.html', + trigger: 'click', + container: !1, + keyboard: !0, + html: !1, + delay: 0 + }; + this.$get = ['$window', '$rootScope', '$tooltip', '$timeout', function (t, n, a, o) { + function i(t, i) { + function l(e) { + return e.target !== t[0] ? e.target !== t[0] && u.hide() : void 0 + } + + { + var u = {}, c = angular.extend({}, e, i); + u.$scope = c.scope && c.scope.$new() || n.$new() + } + u = a(t, c); + var d = t.parent(); + u.$onKeyDown = function (e) { + if (/(38|40)/.test(e.keyCode)) { + e.preventDefault(), e.stopPropagation(); + var t = angular.element(u.$element[0].querySelectorAll('li:not(.divider) a')); + if (t.length) { + var n; + angular.forEach(t, function (e, t) { + s && s.call(e, ':focus') && (n = t) + }), 38 === e.keyCode && n > 0 ? n-- : 40 === e.keyCode && n < t.length - 1 ? n++ : angular.isUndefined(n) && (n = 0), t.eq(n)[0].focus() + } + } + }; + var f = u.show; + u.show = function () { + f(), o(function () { + c.keyboard && u.$element.on('keydown', u.$onKeyDown), r.on('click', l) + }, 0, !1), d.hasClass('dropdown') && d.addClass('open') + }; + var p = u.hide; + u.hide = function () { + u.$isShown && (c.keyboard && u.$element.off('keydown', u.$onKeyDown), r.off('click', l), d.hasClass('dropdown') && d.removeClass('open'), p()) + }; + var g = u.destroy; + return u.destroy = function () { + r.off('click', l), g() + }, u + } + + var r = angular.element(t.document.body), s = Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector; + return i + }] + }).directive('bsDropdown', ['$window', '$sce', '$dropdown', function (e, t, n) { + return { + restrict: 'EAC', scope: !0, link: function (e, t, a, o) { + var i = {scope: e}; + angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'id'], function (e) { + angular.isDefined(a[e]) && (i[e] = a[e]) + }); + var r = /^(false|0|)$/i; + angular.forEach(['html', 'container'], function (e) { + angular.isDefined(a[e]) && r.test(a[e]) && (i[e] = !1) + }), a.bsDropdown && e.$watch(a.bsDropdown, function (t, n) { + e.content = t + }, !0), a.bsShow && e.$watch(a.bsShow, function (e, t) { + s && angular.isDefined(e) && (angular.isString(e) && (e = !!e.match(/true|,?(dropdown),?/i)), e === !0 ? s.show() : s.hide()) + }); + var s = n(t, i); + e.$on('$destroy', function () { + s && s.destroy(), i = null, s = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.helpers.dateFormatter', []).service('$dateFormatter', ['$locale', 'dateFilter', function (e, t) { + function n(e) { + return /(h+)([:\.])?(m+)([:\.])?(s*)[ ]?(a?)/i.exec(e).slice(1) + } + + this.getDefaultLocale = function () { + return e.id + }, this.getDatetimeFormat = function (t, n) { + return e.DATETIME_FORMATS[t] || t + }, this.weekdaysShort = function (t) { + return e.DATETIME_FORMATS.SHORTDAY + }, this.hoursFormat = function (e) { + return n(e)[0] + }, this.minutesFormat = function (e) { + return n(e)[2] + }, this.secondsFormat = function (e) { + return n(e)[4] + }, this.timeSeparator = function (e) { + return n(e)[1] + }, this.showSeconds = function (e) { + return !!n(e)[4] + }, this.showAM = function (e) { + return !!n(e)[5] + }, this.formatDate = function (e, n, a, o) { + return t(e, n, o) + } + }]), angular.module('mgcrea.ngStrap.helpers.dateParser', []).provider('$dateParser', ['$localeProvider', function (e) { + function t() { + this.year = 1970, this.month = 0, this.day = 1, this.hours = 0, this.minutes = 0, this.seconds = 0, this.milliseconds = 0 + } + + function n() { + } + + function a(e) { + return !isNaN(parseFloat(e)) && isFinite(e) + } + + function o(e, t) { + for (var n = e.length, a = t.toString().toLowerCase(), o = 0; n > o; o++)if (e[o].toLowerCase() === a)return o; + return -1 + } + + t.prototype.setMilliseconds = function (e) { + this.milliseconds = e + }, t.prototype.setSeconds = function (e) { + this.seconds = e + }, t.prototype.setMinutes = function (e) { + this.minutes = e + }, t.prototype.setHours = function (e) { + this.hours = e + }, t.prototype.getHours = function () { + return this.hours + }, t.prototype.setDate = function (e) { + this.day = e + }, t.prototype.setMonth = function (e) { + this.month = e + }, t.prototype.setFullYear = function (e) { + this.year = e + }, t.prototype.fromDate = function (e) { + return this.year = e.getFullYear(), this.month = e.getMonth(), this.day = e.getDate(), this.hours = e.getHours(), this.minutes = e.getMinutes(), this.seconds = e.getSeconds(), this.milliseconds = e.getMilliseconds(), this + }, t.prototype.toDate = function () { + return new Date(this.year, this.month, this.day, this.hours, this.minutes, this.seconds, this.milliseconds) + }; + var i = t.prototype, r = this.defaults = {format: 'shortDate', strict: !1}; + this.$get = ['$locale', 'dateFilter', function (e, s) { + var l = function (l) { + function u(e) { + var t, n = Object.keys(h), a = [], o = [], i = e; + for (t = 0; t < n.length; t++)if (e.split(n[t]).length > 1) { + var r = i.search(n[t]); + e = e.split(n[t]).join(''), h[n[t]] && (a[r] = h[n[t]]) + } + return angular.forEach(a, function (e) { + e && o.push(e) + }), o + } + + function c(e) { + return e.replace(/\//g, '[\\/]').replace('/-/g', '[-]').replace(/\./g, '[.]').replace(/\\s/g, '[\\s]') + } + + function d(e) { + var t, n = Object.keys($), a = e; + for (t = 0; t < n.length; t++)a = a.split(n[t]).join('${' + t + '}'); + for (t = 0; t < n.length; t++)a = a.split('${' + t + '}').join('(' + $[n[t]] + ')'); + return e = c(e), new RegExp('^' + a + '$', ['i']) + } + + var f, p, g = angular.extend({}, r, l), m = {}, $ = { + sss: '[0-9]{3}', + ss: '[0-5][0-9]', + s: g.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]', + mm: '[0-5][0-9]', + m: g.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]', + HH: '[01][0-9]|2[0-3]', + H: g.strict ? '1?[0-9]|2[0-3]' : '[01]?[0-9]|2[0-3]', + hh: '[0][1-9]|[1][012]', + h: g.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]', + a: 'AM|PM', + EEEE: e.DATETIME_FORMATS.DAY.join('|'), + EEE: e.DATETIME_FORMATS.SHORTDAY.join('|'), + dd: '0[1-9]|[12][0-9]|3[01]', + d: g.strict ? '[1-9]|[1-2][0-9]|3[01]' : '0?[1-9]|[1-2][0-9]|3[01]', + MMMM: e.DATETIME_FORMATS.MONTH.join('|'), + MMM: e.DATETIME_FORMATS.SHORTMONTH.join('|'), + MM: '0[1-9]|1[012]', + M: g.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]', + yyyy: '[1]{1}[0-9]{3}|[2]{1}[0-9]{3}', + yy: '[0-9]{2}', + y: g.strict ? '-?(0|[1-9][0-9]{0,3})' : '-?0*[0-9]{1,4}' + }, h = { + sss: i.setMilliseconds, + ss: i.setSeconds, + s: i.setSeconds, + mm: i.setMinutes, + m: i.setMinutes, + HH: i.setHours, + H: i.setHours, + hh: i.setHours, + h: i.setHours, + EEEE: n, + EEE: n, + dd: i.setDate, + d: i.setDate, + a: function (e) { + var t = this.getHours() % 12; + return this.setHours(e.match(/pm/i) ? t + 12 : t) + }, + MMMM: function (t) { + return this.setMonth(o(e.DATETIME_FORMATS.MONTH, t)) + }, + MMM: function (t) { + return this.setMonth(o(e.DATETIME_FORMATS.SHORTMONTH, t)) + }, + MM: function (e) { + return this.setMonth(1 * e - 1) + }, + M: function (e) { + return this.setMonth(1 * e - 1) + }, + yyyy: i.setFullYear, + yy: function (e) { + return this.setFullYear(2e3 + 1 * e) + }, + y: i.setFullYear + }; + return m.init = function () { + m.$format = e.DATETIME_FORMATS[g.format] || g.format, f = d(m.$format), p = u(m.$format) + }, m.isValid = function (e) { + return angular.isDate(e) ? !isNaN(e.getTime()) : f.test(e) + }, m.parse = function (n, a, o, i) { + o && (o = e.DATETIME_FORMATS[o] || o), angular.isDate(n) && (n = s(n, o || m.$format, i)); + var r = o ? d(o) : f, l = o ? u(o) : p, c = r.exec(n); + if (!c)return !1; + for (var g = (new t).fromDate(a && !isNaN(a.getTime()) ? a : new Date(1970, 0, 1, 0)), $ = 0; $ < c.length - 1; $++)l[$] && l[$].call(g, c[$ + 1]); + var h = g.toDate(); + return parseInt(g.day, 10) !== h.getDate() ? !1 : h + }, m.getDateForAttribute = function (e, t) { + var n; + if ('today' === t) { + var o = new Date; + n = new Date(o.getFullYear(), o.getMonth(), o.getDate() + ('maxDate' === e ? 1 : 0), 0, 0, 0, 'minDate' === e ? 0 : -1) + } else n = angular.isString(t) && t.match(/^".+"$/) ? new Date(t.substr(1, t.length - 2)) : a(t) ? new Date(parseInt(t, 10)) : angular.isString(t) && 0 === t.length ? 'minDate' === e ? -(1 / 0) : +(1 / 0) : new Date(t); + return n + }, m.getTimeForAttribute = function (e, t) { + var n; + return n = 'now' === t ? (new Date).setFullYear(1970, 0, 1) : angular.isString(t) && t.match(/^".+"$/) ? new Date(t.substr(1, t.length - 2)).setFullYear(1970, 0, 1) : a(t) ? new Date(parseInt(t, 10)).setFullYear(1970, 0, 1) : angular.isString(t) && 0 === t.length ? 'minTime' === e ? -(1 / 0) : +(1 / 0) : m.parse(t, new Date(1970, 0, 1, 0)) + }, m.daylightSavingAdjust = function (e) { + return e ? (e.setHours(e.getHours() > 12 ? e.getHours() + 2 : 0), e) : null + }, m.timezoneOffsetAdjust = function (e, t, n) { + return e ? (t && 'UTC' === t && (e = new Date(e.getTime()), e.setMinutes(e.getMinutes() + (n ? -1 : 1) * e.getTimezoneOffset())), e) : null + }, m.init(), m + }; + return l + }] + }]), angular.module('mgcrea.ngStrap.helpers.debounce', []).factory('debounce', ['$timeout', function (e) { + return function (t, n, a) { + var o = null; + return function () { + var i = this, r = arguments, s = a && !o; + return o && e.cancel(o), o = e(function () { + o = null, a || t.apply(i, r) + }, n, !1), s && t.apply(i, r), o + } + } + }]).factory('throttle', ['$timeout', function (e) { + return function (t, n, a) { + var o = null; + return a || (a = {}), function () { + var i = this, r = arguments; + o || (a.leading !== !1 && t.apply(i, r), o = e(function () { + o = null, a.trailing !== !1 && t.apply(i, r) + }, n, !1)) + } + } + }]), angular.module('mgcrea.ngStrap.helpers.dimensions', []).factory('dimensions', ['$document', '$window', function (t, n) { + var a = (angular.element, {}), o = a.nodeName = function (e, t) { + return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() + }; + a.css = function (t, n, a) { + var o; + return o = t.currentStyle ? t.currentStyle[n] : e.getComputedStyle ? e.getComputedStyle(t)[n] : t.style[n], a === !0 ? parseFloat(o) || 0 : o + }, a.offset = function (t) { + var n = t.getBoundingClientRect(), a = t.ownerDocument; + return { + width: n.width || t.offsetWidth, + height: n.height || t.offsetHeight, + top: n.top + (e.pageYOffset || a.documentElement.scrollTop) - (a.documentElement.clientTop || 0), + left: n.left + (e.pageXOffset || a.documentElement.scrollLeft) - (a.documentElement.clientLeft || 0) + } + }, a.setOffset = function (e, t, n) { + var o, i, r, s, l, u, c, d = a.css(e, 'position'), f = angular.element(e), p = {}; + 'static' === d && (e.style.position = 'relative'), l = a.offset(e), r = a.css(e, 'top'), u = a.css(e, 'left'), c = ('absolute' === d || 'fixed' === d) && (r + u).indexOf('auto') > -1, c ? (o = a.position(e), s = o.top, i = o.left) : (s = parseFloat(r) || 0, i = parseFloat(u) || 0), angular.isFunction(t) && (t = t.call(e, n, l)), + null !== t.top && (p.top = t.top - l.top + s), null !== t.left && (p.left = t.left - l.left + i), 'using' in t ? t.using.call(f, p) : f.css({ + top: p.top + 'px', + left: p.left + 'px' + }) + }, a.position = function (e) { + var t, n, r = {top: 0, left: 0}; + return 'fixed' === a.css(e, 'position') ? n = e.getBoundingClientRect() : (t = i(e), n = a.offset(e), o(t, 'html') || (r = a.offset(t)), r.top += a.css(t, 'borderTopWidth', !0), r.left += a.css(t, 'borderLeftWidth', !0)), { + width: e.offsetWidth, + height: e.offsetHeight, + top: n.top - r.top - a.css(e, 'marginTop', !0), + left: n.left - r.left - a.css(e, 'marginLeft', !0) + } + }; + var i = function (e) { + var t = e.ownerDocument, n = e.offsetParent || t; + if (o(n, '#document'))return t.documentElement; + for (; n && !o(n, 'html') && 'static' === a.css(n, 'position');)n = n.offsetParent; + return n || t.documentElement + }; + return a.height = function (e, t) { + var n = e.offsetHeight; + return t ? n += a.css(e, 'marginTop', !0) + a.css(e, 'marginBottom', !0) : n -= a.css(e, 'paddingTop', !0) + a.css(e, 'paddingBottom', !0) + a.css(e, 'borderTopWidth', !0) + a.css(e, 'borderBottomWidth', !0), n + }, a.width = function (e, t) { + var n = e.offsetWidth; + return t ? n += a.css(e, 'marginLeft', !0) + a.css(e, 'marginRight', !0) : n -= a.css(e, 'paddingLeft', !0) + a.css(e, 'paddingRight', !0) + a.css(e, 'borderLeftWidth', !0) + a.css(e, 'borderRightWidth', !0), n + }, a + }]), angular.module('mgcrea.ngStrap.helpers.parseOptions', []).provider('$parseOptions', function () { + var e = this.defaults = {regexp: /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/}; + this.$get = ['$parse', '$q', function (t, n) { + function a(a, o) { + function i(e, t) { + return e.map(function (e, n) { + var a, o, i = {}; + return i[c] = e, a = u(t, i), o = p(t, i), {label: a, value: o, index: n} + }) + } + + var r = {}, s = angular.extend({}, e, o); + r.$values = []; + var l, u, c, d, f, p, g; + return r.init = function () { + r.$match = l = a.match(s.regexp), u = t(l[2] || l[1]), c = l[4] || l[6], d = l[5], f = t(l[3] || ''), p = t(l[2] ? l[1] : c), g = t(l[7]) + }, r.valuesFn = function (e, t) { + return n.when(g(e, t)).then(function (t) { + return r.$values = t ? i(t, e) : {}, r.$values + }) + }, r.displayValue = function (e) { + var t = {}; + return t[c] = e, u(t) + }, r.init(), r + } + + return a + }] + }), angular.version.minor < 3 && angular.version.dot < 14 && angular.module('ng').factory('$$rAF', ['$window', '$timeout', function (e, t) { + var n = e.requestAnimationFrame || e.webkitRequestAnimationFrame || e.mozRequestAnimationFrame, a = e.cancelAnimationFrame || e.webkitCancelAnimationFrame || e.mozCancelAnimationFrame || e.webkitCancelRequestAnimationFrame, o = !!n, i = o ? function (e) { + var t = n(e); + return function () { + a(t) + } + } : function (e) { + var n = t(e, 16.66, !1); + return function () { + t.cancel(n) + } + }; + return i.supported = o, i + }]), angular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.helpers.dimensions']).provider('$modal', function () { + var e = this.defaults = { + animation: 'am-fade', + backdropAnimation: 'am-fade', + prefixClass: 'modal', + prefixEvent: 'modal', + placement: 'top', + template: 'modal/modal.tpl.html', + contentTemplate: !1, + container: !1, + element: null, + backdrop: !0, + keyboard: !0, + html: !1, + show: !0 + }; + this.$get = ['$window', '$rootScope', '$compile', '$q', '$templateCache', '$http', '$animate', '$timeout', '$sce', 'dimensions', function (n, a, o, i, r, s, l, u, c, d) { + function f(t) { + function n() { + f.$emit(d.prefixEvent + '.show', u) + } + + function i() { + f.$emit(d.prefixEvent + '.hide', u), w.removeClass(d.prefixClass + '-open'), d.animation && w.removeClass(d.prefixClass + '-with-' + d.animation) + } + + function r(e) { + e.target === e.currentTarget && ('static' === d.backdrop ? u.focus() : u.hide()) + } + + function s(e) { + e.preventDefault() + } + + var u = {}, d = u.$options = angular.extend({}, e, t); + u.$promise = m(d.template); + var f = u.$scope = d.scope && d.scope.$new() || a.$new(); + d.element || d.container || (d.container = 'body'), u.$id = d.id || d.element && d.element.attr('id') || '', $(['title', 'content'], function (e) { + d[e] && (f[e] = c.trustAsHtml(d[e])) + }), f.$hide = function () { + f.$$postDigest(function () { + u.hide() + }) + }, f.$show = function () { + f.$$postDigest(function () { + u.show() + }) + }, f.$toggle = function () { + f.$$postDigest(function () { + u.toggle() + }) + }, u.$isShown = f.$isShown = !1, d.contentTemplate && (u.$promise = u.$promise.then(function (e) { + var n = angular.element(e); + return m(d.contentTemplate).then(function (e) { + var a = g('[ng-bind="content"]', n[0]).removeAttr('ng-bind').html(e); + return t.template || a.next().remove(), n[0].outerHTML + }) + })); + var b, D, k = angular.element('
    '); + return k.css({ + position: 'fixed', + top: '0px', + left: '0px', + bottom: '0px', + right: '0px', + 'z-index': 1038 + }), u.$promise.then(function (e) { + angular.isObject(e) && (e = e.data), d.html && (e = e.replace(y, 'ng-bind-html="')), e = h.apply(e), b = o(e), u.init() + }), u.init = function () { + d.show && f.$$postDigest(function () { + u.show() + }) + }, u.destroy = function () { + D && (D.remove(), D = null), k && (k.remove(), k = null), f.$destroy() + }, u.show = function () { + if (!u.$isShown) { + var e, t; + if (angular.isElement(d.container) ? (e = d.container, t = d.container[0].lastChild ? angular.element(d.container[0].lastChild) : null) : d.container ? (e = g(d.container), t = e[0] && e[0].lastChild ? angular.element(e[0].lastChild) : null) : (e = null, t = d.element), D = u.$element = b(f, function (e, t) { + }), !f.$emit(d.prefixEvent + '.show.before', u).defaultPrevented) { + D.css({display: 'block'}).addClass(d.placement), d.animation && (d.backdrop && k.addClass(d.backdropAnimation), D.addClass(d.animation)), d.backdrop && l.enter(k, w, null); + var a = l.enter(D, e, t, n); + a && a.then && a.then(n), u.$isShown = f.$isShown = !0, p(f); + var o = D[0]; + v(function () { + o.focus() + }), w.addClass(d.prefixClass + '-open'), d.animation && w.addClass(d.prefixClass + '-with-' + d.animation), d.backdrop && (D.on('click', r), k.on('click', r), k.on('wheel', s)), d.keyboard && D.on('keyup', u.$onKeyUp) + } + } + }, u.hide = function () { + if (u.$isShown && !f.$emit(d.prefixEvent + '.hide.before', u).defaultPrevented) { + var e = l.leave(D, i); + e && e.then && e.then(i), d.backdrop && l.leave(k), u.$isShown = f.$isShown = !1, p(f), d.backdrop && (D.off('click', r), k.off('click', r), k.off('wheel', s)), d.keyboard && D.off('keyup', u.$onKeyUp) + } + }, u.toggle = function () { + u.$isShown ? u.hide() : u.show() + }, u.focus = function () { + D[0].focus() + }, u.$onKeyUp = function (e) { + 27 === e.which && u.$isShown && (u.hide(), e.stopPropagation()) + }, u + } + + function p(e) { + e.$$phase || e.$root && e.$root.$$phase || e.$digest() + } + + function g(e, n) { + return angular.element((n || t).querySelectorAll(e)) + } + + function m(e) { + return b[e] ? b[e] : b[e] = s.get(e, {cache: r}).then(function (e) { + return e.data + }) + } + + var $ = angular.forEach, h = String.prototype.trim, v = n.requestAnimationFrame || n.setTimeout, w = angular.element(n.document.body), y = /ng-bind="/gi, b = {}; + return f + }] + }).directive('bsModal', ['$window', '$sce', '$modal', function (e, t, n) { + return { + restrict: 'EAC', scope: !0, link: function (e, a, o, i) { + var r = {scope: e, element: a, show: !1}; + angular.forEach(['template', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation', 'id', 'prefixEvent', 'prefixClass'], function (e) { + angular.isDefined(o[e]) && (r[e] = o[e]) + }); + var s = /^(false|0|)$/i; + angular.forEach(['backdrop', 'keyboard', 'html', 'container'], function (e) { + angular.isDefined(o[e]) && s.test(o[e]) && (r[e] = !1) + }), angular.forEach(['title', 'content'], function (n) { + o[n] && o.$observe(n, function (a, o) { + e[n] = t.trustAsHtml(a) + }) + }), o.bsModal && e.$watch(o.bsModal, function (t, n) { + angular.isObject(t) ? angular.extend(e, t) : e.content = t + }, !0); + var l = n(r); + a.on(o.trigger || 'click', l.toggle), e.$on('$destroy', function () { + l && l.destroy(), r = null, l = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.navbar', []).provider('$navbar', function () { + var e = this.defaults = {activeClass: 'active', routeAttr: 'data-match-route', strict: !1}; + this.$get = function () { + return {defaults: e} + } + }).directive('bsNavbar', ['$window', '$location', '$navbar', function (e, t, n) { + var a = n.defaults; + return { + restrict: 'A', link: function (e, n, o, i) { + var r = angular.copy(a); + angular.forEach(Object.keys(a), function (e) { + angular.isDefined(o[e]) && (r[e] = o[e]) + }), e.$watch(function () { + return t.path() + }, function (e, t) { + var a = n[0].querySelectorAll('li[' + r.routeAttr + ']'); + angular.forEach(a, function (t) { + var n = angular.element(t), a = n.attr(r.routeAttr).replace('/', '\\/'); + r.strict && (a = '^' + a + '$'); + var o = new RegExp(a, 'i'); + o.test(e) ? n.addClass(r.activeClass) : n.removeClass(r.activeClass) + }) + }) + } + } + }]), angular.module('mgcrea.ngStrap.popover', ['mgcrea.ngStrap.tooltip']).provider('$popover', function () { + var e = this.defaults = { + animation: 'am-fade', + customClass: '', + container: !1, + target: !1, + placement: 'right', + template: 'popover/popover.tpl.html', + contentTemplate: !1, + trigger: 'click', + keyboard: !0, + html: !1, + title: '', + content: '', + delay: 0, + autoClose: !1 + }; + this.$get = ['$tooltip', function (t) { + function n(n, a) { + var o = angular.extend({}, e, a), i = t(n, o); + return o.content && (i.$scope.content = o.content), i + } + + return n + }] + }).directive('bsPopover', ['$window', '$sce', '$popover', function (e, t, n) { + var a = e.requestAnimationFrame || e.setTimeout; + return { + restrict: 'EAC', scope: !0, link: function (e, o, i) { + var r = {scope: e}; + angular.forEach(['template', 'contentTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'customClass', 'autoClose', 'id', 'prefixClass', 'prefixEvent'], function (e) { + angular.isDefined(i[e]) && (r[e] = i[e]) + }); + var s = /^(false|0|)$/i; + angular.forEach(['html', 'container', 'autoClose'], function (e) { + angular.isDefined(i[e]) && s.test(i[e]) && (r[e] = !1) + }); + var l = o.attr('data-target'); + angular.isDefined(l) && (r.target = s.test(l) ? !1 : l), angular.forEach(['title', 'content'], function (n) { + i[n] && i.$observe(n, function (o, i) { + e[n] = t.trustAsHtml(o), angular.isDefined(i) && a(function () { + u && u.$applyPlacement() + }) + }) + }), i.bsPopover && e.$watch(i.bsPopover, function (t, n) { + angular.isObject(t) ? angular.extend(e, t) : e.content = t, angular.isDefined(n) && a(function () { + u && u.$applyPlacement() + }) + }, !0), i.bsShow && e.$watch(i.bsShow, function (e, t) { + u && angular.isDefined(e) && (angular.isString(e) && (e = !!e.match(/true|,?(popover),?/i)), e === !0 ? u.show() : u.hide()) + }), i.viewport && e.$watch(i.viewport, function (e) { + u && angular.isDefined(e) && u.setViewport(e) + }); + var u = n(o, r); + e.$on('$destroy', function () { + u && u.destroy(), r = null, u = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.scrollspy', ['mgcrea.ngStrap.helpers.debounce', 'mgcrea.ngStrap.helpers.dimensions']).provider('$scrollspy', function () { + var e = this.$$spies = {}, n = this.defaults = {debounce: 150, throttle: 100, offset: 100}; + this.$get = ['$window', '$document', '$rootScope', 'dimensions', 'debounce', 'throttle', function (a, o, i, r, s, l) { + function u(e, t) { + return e[0].nodeName && e[0].nodeName.toLowerCase() === t.toLowerCase() + } + + function c(o) { + var c = angular.extend({}, n, o); + c.element || (c.element = p); + var g = u(c.element, 'body'), m = g ? d : c.element, $ = g ? 'window' : c.id; + if (e[$])return e[$].$$count++, e[$]; + var h, v, w, y, b, D, k, S, x = {}, T = x.$trackedElements = [], C = []; + return x.init = function () { + this.$$count = 1, y = s(this.checkPosition, c.debounce), b = l(this.checkPosition, c.throttle), m.on('click', this.checkPositionWithEventLoop), d.on('resize', y), m.on('scroll', b), D = s(this.checkOffsets, c.debounce), h = i.$on('$viewContentLoaded', D), v = i.$on('$includeContentLoaded', D), D(), $ && (e[$] = x) + }, x.destroy = function () { + this.$$count--, this.$$count > 0 || (m.off('click', this.checkPositionWithEventLoop), d.off('resize', y), m.off('scroll', b), h(), v(), $ && delete e[$]) + }, x.checkPosition = function () { + if (C.length) { + if (S = (g ? a.pageYOffset : m.prop('scrollTop')) || 0, k = Math.max(a.innerHeight, f.prop('clientHeight')), S < C[0].offsetTop && w !== C[0].target)return x.$activateElement(C[0]); + for (var e = C.length; e--;)if (!angular.isUndefined(C[e].offsetTop) && null !== C[e].offsetTop && w !== C[e].target && !(S < C[e].offsetTop || C[e + 1] && S > C[e + 1].offsetTop))return x.$activateElement(C[e]) + } + }, x.checkPositionWithEventLoop = function () { + setTimeout(x.checkPosition, 1) + }, x.$activateElement = function (e) { + if (w) { + var t = x.$getTrackedElement(w); + t && (t.source.removeClass('active'), u(t.source, 'li') && u(t.source.parent().parent(), 'li') && t.source.parent().parent().removeClass('active')) + } + w = e.target, e.source.addClass('active'), u(e.source, 'li') && u(e.source.parent().parent(), 'li') && e.source.parent().parent().addClass('active') + }, x.$getTrackedElement = function (e) { + return T.filter(function (t) { + return t.target === e + })[0] + }, x.checkOffsets = function () { + angular.forEach(T, function (e) { + var n = t.querySelector(e.target); + e.offsetTop = n ? r.offset(n).top : null, c.offset && null !== e.offsetTop && (e.offsetTop -= 1 * c.offset) + }), C = T.filter(function (e) { + return null !== e.offsetTop + }).sort(function (e, t) { + return e.offsetTop - t.offsetTop + }), y() + }, x.trackElement = function (e, t) { + T.push({target: e, source: t}) + }, x.untrackElement = function (e, t) { + for (var n, a = T.length; a--;)if (T[a].target === e && T[a].source === t) { + n = a; + break + } + T = T.splice(n, 1) + }, x.activate = function (e) { + T[e].addClass('active') + }, x.init(), x + } + + var d = angular.element(a), f = angular.element(o.prop('documentElement')), p = angular.element(a.document.body); + return c + }] + }).directive('bsScrollspy', ['$rootScope', 'debounce', 'dimensions', '$scrollspy', function (e, t, n, a) { + return { + restrict: 'EAC', link: function (e, t, n) { + var o = {scope: e}; + angular.forEach(['offset', 'target'], function (e) { + angular.isDefined(n[e]) && (o[e] = n[e]) + }); + var i = a(o); + i.trackElement(o.target, t), e.$on('$destroy', function () { + i && (i.untrackElement(o.target, t), i.destroy()), o = null, i = null + }) + } + } + }]).directive('bsScrollspyList', ['$rootScope', 'debounce', 'dimensions', '$scrollspy', function (e, t, n, a) { + return { + restrict: 'A', compile: function (e, t) { + var n = e[0].querySelectorAll('li > a[href]'); + angular.forEach(n, function (e) { + var t = angular.element(e); + t.parent().attr('bs-scrollspy', '').attr('data-target', t.attr('href')) + }) + } + } + }]), angular.module('mgcrea.ngStrap.select', ['mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions']).provider('$select', function () { + var e = this.defaults = { + animation: 'am-fade', + prefixClass: 'select', + prefixEvent: '$select', + placement: 'bottom-left', + template: 'select/select.tpl.html', + trigger: 'focus', + container: !1, + keyboard: !0, + html: !1, + delay: 0, + multiple: !1, + allNoneButtons: !1, + sort: !0, + caretHtml: ' ', + placeholder: 'Choose among the following...', + allText: 'All', + noneText: 'None', + maxLength: 3, + maxLengthHtml: 'selected', + iconCheckmark: 'glyphicon glyphicon-ok' + }; + this.$get = ['$window', '$document', '$rootScope', '$tooltip', '$timeout', function (t, n, a, o, i) { + function r(t, n, a) { + var r = {}, s = angular.extend({}, e, a); + r = o(t, s); + var u = r.$scope; + u.$matches = [], u.$activeIndex = s.multiple ? [] : -1, u.$isMultiple = s.multiple, u.$showAllNoneButtons = s.allNoneButtons && s.multiple, u.$iconCheckmark = s.iconCheckmark, u.$allText = s.allText, u.$noneText = s.noneText, u.$activate = function (e) { + u.$$postDigest(function () { + r.activate(e) + }) + }, u.$select = function (e, t) { + u.$$postDigest(function () { + r.select(e) + }) + }, u.$isVisible = function () { + return r.$isVisible() + }, u.$isActive = function (e) { + return r.$isActive(e) + }, u.$selectAll = function () { + for (var e = 0; e < u.$matches.length; e++)u.$isActive(e) || u.$select(e) + }, u.$selectNone = function () { + for (var e = 0; e < u.$matches.length; e++)u.$isActive(e) && u.$select(e) + }, r.update = function (e) { + u.$matches = e, r.$updateActiveIndex() + }, r.activate = function (e) { + return s.multiple ? (r.$isActive(e) ? u.$activeIndex.splice(u.$activeIndex.indexOf(e), 1) : u.$activeIndex.push(e), s.sort && u.$activeIndex.sort()) : u.$activeIndex = e, u.$activeIndex + }, r.select = function (e) { + var t = u.$matches[e].value; + u.$apply(function () { + r.activate(e), s.multiple ? n.$setViewValue(u.$activeIndex.map(function (e) { + return u.$matches[e].value + })) : (n.$setViewValue(t), r.hide()) + }), u.$emit(s.prefixEvent + '.select', t, e, r) + }, r.$updateActiveIndex = function () { + n.$modelValue && u.$matches.length ? u.$activeIndex = s.multiple && angular.isArray(n.$modelValue) ? n.$modelValue.map(function (e) { + return r.$getIndex(e) + }) : r.$getIndex(n.$modelValue) : u.$activeIndex >= u.$matches.length && (u.$activeIndex = s.multiple ? [] : 0) + }, r.$isVisible = function () { + return s.minLength && n ? u.$matches.length && n.$viewValue.length >= s.minLength : u.$matches.length + }, r.$isActive = function (e) { + return s.multiple ? -1 !== u.$activeIndex.indexOf(e) : u.$activeIndex === e + }, r.$getIndex = function (e) { + var t = u.$matches.length, n = t; + if (t) { + for (n = t; n-- && u.$matches[n].value !== e;); + if (!(0 > n))return n + } + }, r.$onMouseDown = function (e) { + if (e.preventDefault(), e.stopPropagation(), l) { + var t = angular.element(e.target); + t.triggerHandler('click') + } + }, r.$onKeyDown = function (e) { + return /(9|13|38|40)/.test(e.keyCode) ? (e.preventDefault(), e.stopPropagation(), s.multiple && 9 === e.keyCode ? r.hide() : s.multiple || 13 !== e.keyCode && 9 !== e.keyCode ? void(s.multiple || (38 === e.keyCode && u.$activeIndex > 0 ? u.$activeIndex-- : 38 === e.keyCode && u.$activeIndex < 0 ? u.$activeIndex = u.$matches.length - 1 : 40 === e.keyCode && u.$activeIndex < u.$matches.length - 1 ? u.$activeIndex++ : angular.isUndefined(u.$activeIndex) && (u.$activeIndex = 0), u.$digest())) : r.select(u.$activeIndex)) : void 0 + }; + var c = r.show; + r.show = function () { + c(), s.multiple && r.$element.addClass('select-multiple'), i(function () { + r.$element.on(l ? 'touchstart' : 'mousedown', r.$onMouseDown), s.keyboard && t.on('keydown', r.$onKeyDown) + }, 0, !1) + }; + var d = r.hide; + return r.hide = function () { + s.multiple || n.$modelValue || (u.$activeIndex = -1), r.$element.off(l ? 'touchstart' : 'mousedown', r.$onMouseDown), s.keyboard && t.off('keydown', r.$onKeyDown), d(!0) + }, r + } + + var s = (angular.element(t.document.body), /(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)), l = 'createTouch' in t.document && s; + return r.defaults = e, r + }] + }).directive('bsSelect', ['$window', '$parse', '$q', '$select', '$parseOptions', function (e, t, n, a, o) { + var i = a.defaults; + return { + restrict: 'EAC', require: 'ngModel', link: function (e, t, n, r) { + var s = {scope: e, placeholder: i.placeholder}; + angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'placeholder', 'allNoneButtons', 'maxLength', 'maxLengthHtml', 'allText', 'noneText', 'iconCheckmark', 'autoClose', 'id', 'sort', 'caretHtml', 'prefixClass', 'prefixEvent'], function (e) { + angular.isDefined(n[e]) && (s[e] = n[e]) + }); + var l = /^(false|0|)$/i; + angular.forEach(['html', 'container', 'allNoneButtons', 'sort'], function (e) { + angular.isDefined(n[e]) && l.test(n[e]) && (s[e] = !1) + }); + var u = t.attr('data-multiple'); + if (angular.isDefined(u) && (s.multiple = l.test(u) ? !1 : u), 'select' === t[0].nodeName.toLowerCase()) { + var c = t; + c.css('display', 'none'), t = angular.element(''), c.after(t) + } + var d = o(n.bsOptions), f = a(t, r, s), p = d.$match[7].replace(/\|.+/, '').trim(); + e.$watchCollection(p, function (t, n) { + d.valuesFn(e, r).then(function (e) { + f.update(e), r.$render() + }) + }), e.$watch(n.ngModel, function (e, t) { + f.$updateActiveIndex(), r.$render() + }, !0), r.$render = function () { + var e, n; + s.multiple && angular.isArray(r.$modelValue) ? (e = r.$modelValue.map(function (e) { + return n = f.$getIndex(e), angular.isDefined(n) ? f.$scope.$matches[n].label : !1 + }).filter(angular.isDefined), e = e.length > (s.maxLength || i.maxLength) ? e.length + ' ' + (s.maxLengthHtml || i.maxLengthHtml) : e.join(', ')) : (n = f.$getIndex(r.$modelValue), e = angular.isDefined(n) ? f.$scope.$matches[n].label : !1), t.html((e ? e : s.placeholder) + (s.caretHtml ? s.caretHtml : i.caretHtml)) + }, s.multiple && (r.$isEmpty = function (e) { + return !e || 0 === e.length + }), e.$on('$destroy', function () { + f && f.destroy(), s = null, f = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.timepicker', ['mgcrea.ngStrap.helpers.dateParser', 'mgcrea.ngStrap.helpers.dateFormatter', 'mgcrea.ngStrap.tooltip']).provider('$timepicker', function () { + var e = this.defaults = { + animation: 'am-fade', + prefixClass: 'timepicker', + placement: 'bottom-left', + template: 'timepicker/timepicker.tpl.html', + trigger: 'focus', + container: !1, + keyboard: !0, + html: !1, + delay: 0, + useNative: !0, + timeType: 'date', + timeFormat: 'shortTime', + timezone: null, + modelTimeFormat: null, + autoclose: !1, + minTime: -(1 / 0), + maxTime: +(1 / 0), + length: 5, + hourStep: 1, + minuteStep: 5, + secondStep: 5, + roundDisplay: !1, + iconUp: 'glyphicon glyphicon-chevron-up', + iconDown: 'glyphicon glyphicon-chevron-down', + arrowBehavior: 'pager' + }; + this.$get = ['$window', '$document', '$rootScope', '$sce', '$dateFormatter', '$tooltip', '$timeout', function (t, n, a, o, i, r, s) { + function l(t, n, a) { + function o(e) { + var t = 6e4 * g.minuteStep; + return new Date(Math.floor(e.getTime() / t) * t) + } + + function l(e, n) { + var a = e + n; + if (t[0].createTextRange) { + var o = t[0].createTextRange(); + o.collapse(!0), o.moveStart('character', e), o.moveEnd('character', a), o.select() + } else t[0].setSelectionRange ? t[0].setSelectionRange(e, a) : angular.isUndefined(t[0].selectionStart) && (t[0].selectionStart = e, t[0].selectionEnd = a) + } + + function d() { + t[0].focus() + } + + var f = r(t, angular.extend({}, e, a)), p = a.scope, g = f.$options, m = f.$scope, $ = g.lang, h = function (e, t, n) { + return i.formatDate(e, t, $, n) + }, v = 0, w = g.roundDisplay ? o(new Date) : new Date, y = n.$dateValue || w, b = { + hour: y.getHours(), + meridian: y.getHours() < 12, + minute: y.getMinutes(), + second: y.getSeconds(), + millisecond: y.getMilliseconds() + }, D = i.getDatetimeFormat(g.timeFormat, $), k = i.hoursFormat(D), S = i.timeSeparator(D), x = i.minutesFormat(D), T = i.secondsFormat(D), C = i.showSeconds(D), M = i.showAM(D); + m.$iconUp = g.iconUp, m.$iconDown = g.iconDown, m.$select = function (e, t) { + f.select(e, t) + }, m.$moveIndex = function (e, t) { + f.$moveIndex(e, t) + }, m.$switchMeridian = function (e) { + f.switchMeridian(e) + }, f.update = function (e) { + angular.isDate(e) && !isNaN(e.getTime()) ? (f.$date = e, angular.extend(b, { + hour: e.getHours(), + minute: e.getMinutes(), + second: e.getSeconds(), + millisecond: e.getMilliseconds() + }), f.$build()) : f.$isBuilt || f.$build() + }, f.select = function (e, t, a) { + (!n.$dateValue || isNaN(n.$dateValue.getTime())) && (n.$dateValue = new Date(1970, 0, 1)), angular.isDate(e) || (e = new Date(e)), 0 === t ? n.$dateValue.setHours(e.getHours()) : 1 === t ? n.$dateValue.setMinutes(e.getMinutes()) : 2 === t && n.$dateValue.setSeconds(e.getSeconds()), n.$setViewValue(angular.copy(n.$dateValue)), n.$render(), g.autoclose && !a && s(function () { + f.hide(!0) + }) + }, f.switchMeridian = function (e) { + if (n.$dateValue && !isNaN(n.$dateValue.getTime())) { + var t = (e || n.$dateValue).getHours(); + n.$dateValue.setHours(12 > t ? t + 12 : t - 12), n.$setViewValue(angular.copy(n.$dateValue)), n.$render() + } + }, f.$build = function () { + var e, t, n = m.midIndex = parseInt(g.length / 2, 10), a = []; + for (e = 0; e < g.length; e++)t = new Date(1970, 0, 1, b.hour - (n - e) * g.hourStep), a.push({ + date: t, + label: h(t, k), + selected: f.$date && f.$isSelected(t, 0), + disabled: f.$isDisabled(t, 0) + }); + var o, i = []; + for (e = 0; e < g.length; e++)o = new Date(1970, 0, 1, 0, b.minute - (n - e) * g.minuteStep), i.push({ + date: o, + label: h(o, x), + selected: f.$date && f.$isSelected(o, 1), + disabled: f.$isDisabled(o, 1) + }); + var r, s = []; + for (e = 0; e < g.length; e++)r = new Date(1970, 0, 1, 0, 0, b.second - (n - e) * g.secondStep), s.push({ + date: r, + label: h(r, T), + selected: f.$date && f.$isSelected(r, 2), + disabled: f.$isDisabled(r, 2) + }); + var l = []; + for (e = 0; e < g.length; e++)l.push(C ? [a[e], i[e], s[e]] : [a[e], i[e]]); + m.rows = l, m.showSeconds = C, m.showAM = M, m.isAM = (f.$date || a[n].date).getHours() < 12, m.timeSeparator = S, f.$isBuilt = !0 + }, f.$isSelected = function (e, t) { + return f.$date ? 0 === t ? e.getHours() === f.$date.getHours() : 1 === t ? e.getMinutes() === f.$date.getMinutes() : 2 === t ? e.getSeconds() === f.$date.getSeconds() : void 0 : !1 + }, f.$isDisabled = function (e, t) { + var n; + return 0 === t ? n = e.getTime() + 6e4 * b.minute + 1e3 * b.second : 1 === t ? n = e.getTime() + 36e5 * b.hour + 1e3 * b.second : 2 === t && (n = e.getTime() + 36e5 * b.hour + 6e4 * b.minute), n < 1 * g.minTime || n > 1 * g.maxTime + }, m.$arrowAction = function (e, t) { + 'picker' === g.arrowBehavior ? f.$setTimeByStep(e, t) : f.$moveIndex(e, t) + }, f.$setTimeByStep = function (e, t) { + { + var n = new Date(f.$date), a = n.getHours(), o = (h(n, k).length, n.getMinutes()), i = (h(n, x).length, n.getSeconds()); + h(n, T).length + } + 0 === t ? n.setHours(a - parseInt(g.hourStep, 10) * e) : 1 === t ? n.setMinutes(o - parseInt(g.minuteStep, 10) * e) : 2 === t && n.setSeconds(i - parseInt(g.secondStep, 10) * e), f.select(n, t, !0) + }, f.$moveIndex = function (e, t) { + var n; + 0 === t ? (n = new Date(1970, 0, 1, b.hour + e * g.length, b.minute, b.second), angular.extend(b, {hour: n.getHours()})) : 1 === t ? (n = new Date(1970, 0, 1, b.hour, b.minute + e * g.length * g.minuteStep, b.second), angular.extend(b, {minute: n.getMinutes()})) : 2 === t && (n = new Date(1970, 0, 1, b.hour, b.minute, b.second + e * g.length * g.secondStep), angular.extend(b, {second: n.getSeconds()})), f.$build() + }, f.$onMouseDown = function (e) { + if ('input' !== e.target.nodeName.toLowerCase() && e.preventDefault(), e.stopPropagation(), c) { + var t = angular.element(e.target); + 'button' !== t[0].nodeName.toLowerCase() && (t = t.parent()), t.triggerHandler('click') + } + }, f.$onKeyDown = function (e) { + if (/(38|37|39|40|13)/.test(e.keyCode) && !e.shiftKey && !e.altKey) { + if (e.preventDefault(), e.stopPropagation(), 13 === e.keyCode)return f.hide(!0); + var t = new Date(f.$date), n = t.getHours(), a = h(t, k).length, o = t.getMinutes(), i = h(t, x).length, r = t.getSeconds(), s = h(t, T).length, u = 1, c = /(37|39)/.test(e.keyCode), d = 2 + 1 * C + 1 * M; + c && (37 === e.keyCode ? v = 1 > v ? d - 1 : v - 1 : 39 === e.keyCode && (v = d - 1 > v ? v + 1 : 0)); + var m = [0, a], $ = 0; + 38 === e.keyCode && ($ = -1), 40 === e.keyCode && ($ = 1); + var w = 2 === v && C, y = 2 === v && !C || 3 === v && C; + 0 === v ? (t.setHours(n + $ * parseInt(g.hourStep, 10)), a = h(t, k).length, m = [0, a]) : 1 === v ? (t.setMinutes(o + $ * parseInt(g.minuteStep, 10)), i = h(t, x).length, m = [a + u, i]) : w ? (t.setSeconds(r + $ * parseInt(g.secondStep, 10)), s = h(t, T).length, m = [a + u + i + u, s]) : y && (c || f.switchMeridian(), m = [a + u + i + u + (s + u) * C, 2]), f.select(t, v, !0), l(m[0], m[1]), p.$digest() + } + }; + var E = f.init; + f.init = function () { + return u && g.useNative ? (t.prop('type', 'time'), void t.css('-webkit-appearance', 'textfield')) : (c && (t.prop('type', 'text'), t.attr('readonly', 'true'), t.on('click', d)), void E()) + }; + var A = f.destroy; + f.destroy = function () { + u && g.useNative && t.off('click', d), A() + }; + var F = f.show; + f.show = function () { + F(), s(function () { + f.$element.on(c ? 'touchstart' : 'mousedown', f.$onMouseDown), g.keyboard && t.on('keydown', f.$onKeyDown) + }, 0, !1) + }; + var V = f.hide; + return f.hide = function (e) { + f.$isShown && (f.$element.off(c ? 'touchstart' : 'mousedown', f.$onMouseDown), g.keyboard && t.off('keydown', f.$onKeyDown), V(e)) + }, f + } + + var u = (angular.element(t.document.body), /(ip(a|o)d|iphone|android)/gi.test(t.navigator.userAgent)), c = 'createTouch' in t.document && u; + return e.lang || (e.lang = i.getDefaultLocale()), l.defaults = e, l + }] + }).directive('bsTimepicker', ['$window', '$parse', '$q', '$dateFormatter', '$dateParser', '$timepicker', function (e, t, n, a, o, i) { + { + var r = i.defaults, s = /(ip(a|o)d|iphone|android)/gi.test(e.navigator.userAgent); + e.requestAnimationFrame || e.setTimeout + } + return { + restrict: 'EAC', require: 'ngModel', link: function (e, t, n, l) { + function u(e) { + if (angular.isDate(e)) { + var t = isNaN(d.minTime) || new Date(e.getTime()).setFullYear(1970, 0, 1) >= d.minTime, n = isNaN(d.maxTime) || new Date(e.getTime()).setFullYear(1970, 0, 1) <= d.maxTime, a = t && n; + l.$setValidity('date', a), l.$setValidity('min', t), l.$setValidity('max', n), a && (l.$dateValue = e) + } + } + + function c() { + return !l.$dateValue || isNaN(l.$dateValue.getTime()) ? '' : m(l.$dateValue, d.timeFormat) + } + + var d = {scope: e, controller: l}; + angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'autoclose', 'timeType', 'timeFormat', 'timezone', 'modelTimeFormat', 'useNative', 'hourStep', 'minuteStep', 'secondStep', 'length', 'arrowBehavior', 'iconUp', 'iconDown', 'roundDisplay', 'id', 'prefixClass', 'prefixEvent'], function (e) { + angular.isDefined(n[e]) && (d[e] = n[e]) + }); + var f = /^(false|0|)$/i; + angular.forEach(['html', 'container', 'autoclose', 'useNative', 'roundDisplay'], function (e) { + angular.isDefined(n[e]) && f.test(n[e]) && (d[e] = !1) + }), n.bsShow && e.$watch(n.bsShow, function (e, t) { + p && angular.isDefined(e) && (angular.isString(e) && (e = !!e.match(/true|,?(timepicker),?/i)), e === !0 ? p.show() : p.hide()) + }), s && (d.useNative || r.useNative) && (d.timeFormat = 'HH:mm'); + var p = i(t, l, d); + d = p.$options; + var g = d.lang, m = function (e, t, n) { + return a.formatDate(e, t, g, n) + }, $ = o({format: d.timeFormat, lang: g}); + angular.forEach(['minTime', 'maxTime'], function (e) { + angular.isDefined(n[e]) && n.$observe(e, function (t) { + p.$options[e] = $.getTimeForAttribute(e, t), !isNaN(p.$options[e]) && p.$build(), u(l.$dateValue) + }) + }), e.$watch(n.ngModel, function (e, t) { + p.update(l.$dateValue) + }, !0), l.$parsers.unshift(function (e) { + var t; + if (!e)return l.$setValidity('date', !0), null; + var n = angular.isDate(e) ? e : $.parse(e, l.$dateValue); + return !n || isNaN(n.getTime()) ? void l.$setValidity('date', !1) : (u(n), 'string' === d.timeType ? (t = $.timezoneOffsetAdjust(n, d.timezone, !0), m(t, d.modelTimeFormat || d.timeFormat)) : (t = $.timezoneOffsetAdjust(l.$dateValue, d.timezone, !0), 'number' === d.timeType ? t.getTime() : 'unix' === d.timeType ? t.getTime() / 1e3 : 'iso' === d.timeType ? t.toISOString() : new Date(t))) + }), l.$formatters.push(function (e) { + var t; + return t = angular.isUndefined(e) || null === e ? 0 / 0 : angular.isDate(e) ? e : 'string' === d.timeType ? $.parse(e, null, d.modelTimeFormat) : new Date('unix' === d.timeType ? 1e3 * e : e), l.$dateValue = $.timezoneOffsetAdjust(t, d.timezone), c() + }), l.$render = function () { + t.val(c()) + }, e.$on('$destroy', function () { + p && p.destroy(), d = null, p = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.tab', []).provider('$tab', function () { + var e = this.defaults = { + animation: 'am-fade', + template: 'tab/tab.tpl.html', + navClass: 'nav-tabs', + activeClass: 'active' + }, t = this.controller = function (t, n, a) { + var o = this; + o.$options = angular.copy(e), angular.forEach(['animation', 'navClass', 'activeClass'], function (e) { + angular.isDefined(a[e]) && (o.$options[e] = a[e]) + }), t.$navClass = o.$options.navClass, t.$activeClass = o.$options.activeClass, o.$panes = t.$panes = [], o.$activePaneChangeListeners = o.$viewChangeListeners = [], o.$push = function (e) { + o.$panes.push(e) + }, o.$remove = function (e) { + var t = o.$panes.indexOf(e), n = o.$panes.$active; + o.$panes.splice(t, 1), n > t ? n-- : t === n && n === o.$panes.length && n--, o.$setActive(n) + }, o.$panes.$active = 0, o.$setActive = t.$setActive = function (e) { + o.$panes.$active = e, o.$activePaneChangeListeners.forEach(function (e) { + e() + }) + } + }; + this.$get = function () { + var n = {}; + return n.defaults = e, n.controller = t, n + } + }).directive('bsTabs', ['$window', '$animate', '$tab', '$parse', function (e, t, n, a) { + var o = n.defaults; + return { + require: ['?ngModel', 'bsTabs'], + transclude: !0, + scope: !0, + controller: ['$scope', '$element', '$attrs', n.controller], + templateUrl: function (e, t) { + return t.template || o.template + }, + link: function (e, t, n, o) { + var i = o[0], r = o[1]; + if (i && (r.$activePaneChangeListeners.push(function () { + i.$setViewValue(r.$panes.$active) + }), i.$formatters.push(function (e) { + return r.$setActive(1 * e), e + })), n.bsActivePane) { + var s = a(n.bsActivePane); + r.$activePaneChangeListeners.push(function () { + s.assign(e, r.$panes.$active) + }), e.$watch(n.bsActivePane, function (e, t) { + r.$setActive(1 * e) + }, !0) + } + } + } + }]).directive('bsPane', ['$window', '$animate', '$sce', function (e, t, n) { + return { + require: ['^?ngModel', '^bsTabs'], scope: !0, link: function (e, a, o, i) { + function r() { + var n = s.$panes.indexOf(e), o = s.$panes.$active; + t[n === o ? 'addClass' : 'removeClass'](a, s.$options.activeClass) + } + + var s = (i[0], i[1]); + a.addClass('tab-pane'), o.$observe('title', function (t, a) { + e.title = n.trustAsHtml(t) + }), s.$options.animation && a.addClass(s.$options.animation), o.$observe('disabled', function (t, n) { + e.disabled = e.$eval(t) + }), s.$push(e), e.$on('$destroy', function () { + s.$remove(e) + }), s.$activePaneChangeListeners.push(function () { + r() + }), r() + } + } + }]), angular.module('mgcrea.ngStrap.tooltip', ['mgcrea.ngStrap.helpers.dimensions']).provider('$tooltip', function () { + var e = this.defaults = { + animation: 'am-fade', + customClass: '', + prefixClass: 'tooltip', + prefixEvent: 'tooltip', + container: !1, + target: !1, + placement: 'top', + template: 'tooltip/tooltip.tpl.html', + contentTemplate: !1, + trigger: 'hover focus', + keyboard: !1, + html: !1, + show: !1, + title: '', + type: '', + delay: 0, + autoClose: !1, + bsEnabled: !0, + viewport: {selector: 'body', padding: 0} + }; + this.$get = ['$window', '$rootScope', '$compile', '$q', '$templateCache', '$http', '$animate', '$sce', 'dimensions', '$$rAF', '$timeout', function (n, a, o, i, r, s, l, u, c, d, f) { + function p(i, r) { + function s() { + N.$emit(H.prefixEvent + '.show', I) + } + + function p() { + if (N.$emit(H.prefixEvent + '.hide', I), z === B) { + if (W && 'focus' === H.trigger)return i[0].blur(); + O() + } + } + + function b() { + var e = H.trigger.split(' '); + angular.forEach(e, function (e) { + 'click' === e ? i.on('click', I.toggle) : 'manual' !== e && (i.on('hover' === e ? 'mouseenter' : 'focus', I.enter), i.on('hover' === e ? 'mouseleave' : 'blur', I.leave), 'button' === P && 'hover' !== e && i.on(v ? 'touchstart' : 'mousedown', I.$onFocusElementMouseDown)) + }) + } + + function D() { + for (var e = H.trigger.split(' '), t = e.length; t--;) { + var n = e[t]; + 'click' === n ? i.off('click', I.toggle) : 'manual' !== n && (i.off('hover' === n ? 'mouseenter' : 'focus', I.enter), i.off('hover' === n ? 'mouseleave' : 'blur', I.leave), 'button' === P && 'hover' !== n && i.off(v ? 'touchstart' : 'mousedown', I.$onFocusElementMouseDown)) + } + } + + function k() { + 'focus' !== H.trigger ? z.on('keyup', I.$onKeyUp) : i.on('keyup', I.$onFocusKeyUp) + } + + function S() { + 'focus' !== H.trigger ? z.off('keyup', I.$onKeyUp) : i.off('keyup', I.$onFocusKeyUp) + } + + function x() { + f(function () { + z.on('click', C), y.on('click', I.hide), _ = !0 + }, 0, !1) + } + + function T() { + _ && (z.off('click', C), y.off('click', I.hide), _ = !1) + } + + function C(e) { + e.stopPropagation() + } + + function M(e) { + e = e || H.target || i; + var a = e[0], o = 'BODY' === a.tagName, r = a.getBoundingClientRect(), s = {}; + for (var l in r)s[l] = r[l]; + null === s.width && (s = angular.extend({}, s, { + width: r.right - r.left, + height: r.bottom - r.top + })); + var u = o ? { + top: 0, + left: 0 + } : c.offset(a), d = {scroll: o ? t.documentElement.scrollTop || t.body.scrollTop : e.prop('scrollTop') || 0}, f = o ? { + width: t.documentElement.clientWidth, + height: n.innerHeight + } : null; + return angular.extend({}, s, d, f, u) + } + + function E(e, t, n, a) { + var o, i = e.split('-'); + switch (i[0]) { + case'right': + o = {top: t.top + t.height / 2 - a / 2, left: t.left + t.width}; + break; + case'bottom': + o = {top: t.top + t.height, left: t.left + t.width / 2 - n / 2}; + break; + case'left': + o = {top: t.top + t.height / 2 - a / 2, left: t.left - n}; + break; + default: + o = {top: t.top - a, left: t.left + t.width / 2 - n / 2} + } + if (!i[1])return o; + if ('top' === i[0] || 'bottom' === i[0])switch (i[1]) { + case'left': + o.left = t.left; + break; + case'right': + o.left = t.left + t.width - n + } else if ('left' === i[0] || 'right' === i[0])switch (i[1]) { + case'top': + o.top = t.top - a; + break; + case'bottom': + o.top = t.top + t.height + } + return o + } + + function A(e, t) { + var n = z[0], a = n.offsetWidth, o = n.offsetHeight, i = parseInt(c.css(n, 'margin-top'), 10), r = parseInt(c.css(n, 'margin-left'), 10); + isNaN(i) && (i = 0), isNaN(r) && (r = 0), e.top = e.top + i, e.left = e.left + r, c.setOffset(n, angular.extend({ + using: function (e) { + z.css({top: Math.round(e.top) + 'px', left: Math.round(e.left) + 'px', right: ''}) + } + }, e), 0); + var s = n.offsetWidth, l = n.offsetHeight; + if ('top' === t && l !== o && (e.top = e.top + o - l), !/top-left|top-right|bottom-left|bottom-right/.test(t)) { + var u = F(t, e, s, l); + if (u.left ? e.left += u.left : e.top += u.top, c.setOffset(n, e), /top|right|bottom|left/.test(t)) { + var d = /top|bottom/.test(t), f = d ? 2 * u.left - a + s : 2 * u.top - o + l, p = d ? 'offsetWidth' : 'offsetHeight'; + V(f, n[p], d) + } + } + } + + function F(e, t, n, a) { + var o = {top: 0, left: 0}, i = H.viewport && m(H.viewport.selector || H.viewport); + if (!i)return o; + var r = H.viewport && H.viewport.padding || 0, s = M(i); + if (/right|left/.test(e)) { + var l = t.top - r - s.scroll, u = t.top + r - s.scroll + a; + l < s.top ? o.top = s.top - l : u > s.top + s.height && (o.top = s.top + s.height - u) + } else { + var c = t.left - r, d = t.left + r + n; + c < s.left ? o.left = s.left - c : d > s.width && (o.left = s.left + s.width - d) + } + return o + } + + function V(e, t, n) { + var a = m('.tooltip-arrow, .arrow', z[0]); + a.css(n ? 'left' : 'top', 50 * (1 - e / t) + '%').css(n ? 'top' : 'left', '') + } + + function O() { + clearTimeout(R), I.$isShown && null !== z && (H.autoClose && T(), H.keyboard && S()), j && (j.$destroy(), j = null), z && (z.remove(), z = I.$element = null) + } + + var I = {}, P = i[0].nodeName.toLowerCase(), H = I.$options = angular.extend({}, e, r); + I.$promise = $(H.template); + var N = I.$scope = H.scope && H.scope.$new() || a.$new(); + if (H.delay && angular.isString(H.delay)) { + var L = H.delay.split(',').map(parseFloat); + H.delay = L.length > 1 ? {show: L[0], hide: L[1]} : L[0] + } + I.$id = H.id || i.attr('id') || '', H.title && (N.title = u.trustAsHtml(H.title)), N.$setEnabled = function (e) { + N.$$postDigest(function () { + I.setEnabled(e) + }) + }, N.$hide = function () { + N.$$postDigest(function () { + I.hide() + }) + }, N.$show = function () { + N.$$postDigest(function () { + I.show() + }) + }, N.$toggle = function () { + N.$$postDigest(function () { + I.toggle() + }) + }, I.$isShown = N.$isShown = !1; + var R, Y; + H.contentTemplate && (I.$promise = I.$promise.then(function (e) { + var t = angular.element(e); + return $(H.contentTemplate).then(function (e) { + var n = m('[ng-bind="content"]', t[0]); + return n.length || (n = m('[ng-bind="title"]', t[0])), n.removeAttr('ng-bind').html(e), t[0].outerHTML + }) + })); + var q, z, K, U, j; + I.$promise.then(function (e) { + angular.isObject(e) && (e = e.data), H.html && (e = e.replace(w, 'ng-bind-html="')), e = h.apply(e), K = e, q = o(e), I.init() + }), I.init = function () { + H.delay && angular.isNumber(H.delay) && (H.delay = { + show: H.delay, + hide: H.delay + }), 'self' === H.container ? U = i : angular.isElement(H.container) ? U = H.container : H.container && (U = m(H.container)), b(), H.target && (H.target = angular.isElement(H.target) ? H.target : m(H.target)), H.show && N.$$postDigest(function () { + 'focus' === H.trigger ? i[0].focus() : I.show() + }) + }, I.destroy = function () { + D(), O(), N.$destroy() + }, I.enter = function () { + return clearTimeout(R), Y = 'in', H.delay && H.delay.show ? void(R = setTimeout(function () { + 'in' === Y && I.show() + }, H.delay.show)) : I.show() + }, I.show = function () { + if (H.bsEnabled && !I.$isShown) { + N.$emit(H.prefixEvent + '.show.before', I); + var e, t; + H.container ? (e = U, t = U[0].lastChild ? angular.element(U[0].lastChild) : null) : (e = null, t = i), z && O(), j = I.$scope.$new(), z = I.$element = q(j, function (e, t) { + }), z.css({ + top: '-9999px', + left: '-9999px', + right: 'auto', + display: 'block', + visibility: 'hidden' + }), H.animation && z.addClass(H.animation), H.type && z.addClass(H.prefixClass + '-' + H.type), H.customClass && z.addClass(H.customClass), t ? t.after(z) : e.prepend(z), I.$isShown = N.$isShown = !0, g(N), I.$applyPlacement(); + var n = l.enter(z, e, t, s); + n && n.then && n.then(s), g(N), d(function () { + z && z.css({visibility: 'visible'}) + }), H.keyboard && ('focus' !== H.trigger && I.focus(), k()), H.autoClose && x() + } + }, I.leave = function () { + return clearTimeout(R), Y = 'out', H.delay && H.delay.hide ? void(R = setTimeout(function () { + 'out' === Y && I.hide() + }, H.delay.hide)) : I.hide() + }; + var W, B; + I.hide = function (e) { + if (I.$isShown) { + N.$emit(H.prefixEvent + '.hide.before', I), W = e, B = z; + var t = l.leave(z, p); + t && t.then && t.then(p), I.$isShown = N.$isShown = !1, g(N), H.keyboard && null !== z && S(), H.autoClose && null !== z && T() + } + }, I.toggle = function () { + I.$isShown ? I.leave() : I.enter() + }, I.focus = function () { + z[0].focus() + }, I.setEnabled = function (e) { + H.bsEnabled = e + }, I.setViewport = function (e) { + H.viewport = e + }, I.$applyPlacement = function () { + if (z) { + var t = H.placement, n = /\s?auto?\s?/i, a = n.test(t); + a && (t = t.replace(n, '') || e.placement), z.addClass(H.placement); + var o = M(), r = z.prop('offsetWidth'), s = z.prop('offsetHeight'); + if (a) { + var l = t, u = H.container ? m(H.container) : i.parent(), c = M(u); + l.indexOf('bottom') >= 0 && o.bottom + s > c.bottom ? t = l.replace('bottom', 'top') : l.indexOf('top') >= 0 && o.top - s < c.top && (t = l.replace('top', 'bottom')), ('right' === l || 'bottom-left' === l || 'top-left' === l) && o.right + r > c.width ? t = 'right' === l ? 'left' : t.replace('left', 'right') : ('left' === l || 'bottom-right' === l || 'top-right' === l) && o.left - r < c.left && (t = 'left' === l ? 'right' : t.replace('right', 'left')), z.removeClass(l).addClass(t) + } + var d = E(t, o, r, s); + A(d, t) + } + }, I.$onKeyUp = function (e) { + 27 === e.which && I.$isShown && (I.hide(), e.stopPropagation()) + }, I.$onFocusKeyUp = function (e) { + 27 === e.which && (i[0].blur(), e.stopPropagation()) + }, I.$onFocusElementMouseDown = function (e) { + e.preventDefault(), e.stopPropagation(), I.$isShown ? i[0].blur() : i[0].focus() + }; + var _ = !1; + return I + } + + function g(e) { + e.$$phase || e.$root && e.$root.$$phase || e.$digest() + } + + function m(e, n) { + return angular.element((n || t).querySelectorAll(e)) + } + + function $(e) { + return b[e] ? b[e] : b[e] = s.get(e, {cache: r}).then(function (e) { + return e.data + }) + } + + var h = String.prototype.trim, v = 'createTouch' in n.document, w = /ng-bind="/gi, y = angular.element(n.document), b = {}; + return p + }] + }).directive('bsTooltip', ['$window', '$location', '$sce', '$tooltip', '$$rAF', function (e, t, n, a, o) { + return { + restrict: 'EAC', scope: !0, link: function (e, t, i, r) { + var s = {scope: e}; + angular.forEach(['template', 'contentTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'backdropAnimation', 'type', 'customClass', 'id'], function (e) { + angular.isDefined(i[e]) && (s[e] = i[e]) + }); + var l = /^(false|0|)$/i; + angular.forEach(['html', 'container'], function (e) { + angular.isDefined(i[e]) && l.test(i[e]) && (s[e] = !1) + }); + var u = t.attr('data-target'); + angular.isDefined(u) && (s.target = l.test(u) ? !1 : u), e.hasOwnProperty('title') || (e.title = ''), i.$observe('title', function (t) { + if (angular.isDefined(t) || !e.hasOwnProperty('title')) { + var a = e.title; + e.title = n.trustAsHtml(t), angular.isDefined(a) && o(function () { + c && c.$applyPlacement() + }) + } + }), i.bsTooltip && e.$watch(i.bsTooltip, function (t, n) { + angular.isObject(t) ? angular.extend(e, t) : e.title = t, angular.isDefined(n) && o(function () { + c && c.$applyPlacement() + }) + }, !0), i.bsShow && e.$watch(i.bsShow, function (e, t) { + c && angular.isDefined(e) && (angular.isString(e) && (e = !!e.match(/true|,?(tooltip),?/i)), e === !0 ? c.show() : c.hide()) + }), i.bsEnabled && e.$watch(i.bsEnabled, function (e, t) { + c && angular.isDefined(e) && (angular.isString(e) && (e = !!e.match(/true|1|,?(tooltip),?/i)), c.setEnabled(e === !1 ? !1 : !0)) + }), i.viewport && e.$watch(i.viewport, function (e) { + c && angular.isDefined(e) && c.setViewport(e) + }); + var c = a(t, s); + e.$on('$destroy', function () { + c && c.destroy(), s = null, c = null + }) + } + } + }]), angular.module('mgcrea.ngStrap.typeahead', ['mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions']).provider('$typeahead', function () { + var e = this.defaults = { + animation: 'am-fade', + prefixClass: 'typeahead', + prefixEvent: '$typeahead', + placement: 'bottom-left', + template: 'typeahead/typeahead.tpl.html', + trigger: 'focus', + container: !1, + keyboard: !0, + html: !1, + delay: 0, + minLength: 1, + filter: 'filter', + limit: 6, + autoSelect: !1, + comparator: '', + trimValue: !0 + }; + this.$get = ['$window', '$rootScope', '$tooltip', '$timeout', function (t, n, a, o) { + function i(t, n, i) { + var r = {}, s = angular.extend({}, e, i); + r = a(t, s); + var l = i.scope, u = r.$scope; + u.$resetMatches = function () { + u.$matches = [], u.$activeIndex = s.autoSelect ? 0 : -1 + }, u.$resetMatches(), u.$activate = function (e) { + u.$$postDigest(function () { + r.activate(e) + }) + }, u.$select = function (e, t) { + u.$$postDigest(function () { + r.select(e) + }) + }, u.$isVisible = function () { + return r.$isVisible() + }, r.update = function (e) { + u.$matches = e, u.$activeIndex >= e.length && (u.$activeIndex = s.autoSelect ? 0 : -1), /^(bottom|bottom-left|bottom-right)$/.test(s.placement) || o(r.$applyPlacement) + }, r.activate = function (e) { + u.$activeIndex = e + }, r.select = function (e) { + if (-1 !== e) { + var t = u.$matches[e].value; + n.$setViewValue(t), n.$render(), u.$resetMatches(), l && l.$digest(), u.$emit(s.prefixEvent + '.select', t, e, r) + } + }, r.$isVisible = function () { + return s.minLength && n ? u.$matches.length && angular.isString(n.$viewValue) && n.$viewValue.length >= s.minLength : !!u.$matches.length + }, r.$getIndex = function (e) { + var t = u.$matches.length, n = t; + if (t) { + for (n = t; n-- && u.$matches[n].value !== e;); + if (!(0 > n))return n + } + }, r.$onMouseDown = function (e) { + e.preventDefault(), e.stopPropagation() + }, r.$onKeyDown = function (e) { + /(38|40|13)/.test(e.keyCode) && (!r.$isVisible() || 13 === e.keyCode && -1 === u.$activeIndex || (e.preventDefault(), e.stopPropagation()), 13 === e.keyCode && u.$matches.length ? r.select(u.$activeIndex) : 38 === e.keyCode && u.$activeIndex > 0 ? u.$activeIndex-- : 40 === e.keyCode && u.$activeIndex < u.$matches.length - 1 ? u.$activeIndex++ : angular.isUndefined(u.$activeIndex) && (u.$activeIndex = 0), u.$digest()) + }; + var c = r.show; + r.show = function () { + c(), o(function () { + r.$element.on('mousedown', r.$onMouseDown), s.keyboard && t.on('keydown', r.$onKeyDown) + }, 0, !1) + }; + var d = r.hide; + return r.hide = function () { + r.$element.off('mousedown', r.$onMouseDown), s.keyboard && t.off('keydown', r.$onKeyDown), s.autoSelect || r.activate(-1), d() + }, r + } + + angular.element(t.document.body); + return i.defaults = e, i + }] + }).directive('bsTypeahead', ['$window', '$parse', '$q', '$typeahead', '$parseOptions', function (e, t, a, o, i) { + var r = o.defaults; + return { + restrict: 'EAC', require: 'ngModel', link: function (e, t, a, s) { + var l = {scope: e}; + angular.forEach(['placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'template', 'filter', 'limit', 'minLength', 'watchOptions', 'selectMode', 'autoSelect', 'comparator', 'id', 'prefixEvent', 'prefixClass'], function (e) { + angular.isDefined(a[e]) && (l[e] = a[e]) + }); + var u = /^(false|0|)$/i; + angular.forEach(['html', 'container', 'trimValue'], function (e) { + angular.isDefined(a[e]) && u.test(a[e]) && (l[e] = !1) + }), t.attr('autocomplete', 'off'); + var c = l.filter || r.filter, d = l.limit || r.limit, f = l.comparator || r.comparator, p = a.bsOptions; + c && (p += ' | ' + c + ':$viewValue'), f && (p += ':' + f), d && (p += ' | limitTo:' + d); + var g = i(p), m = o(t, s, l); + if (l.watchOptions) { + var $ = g.$match[7].replace(/\|.+/, '').replace(/\(.*\)/g, '').trim(); + e.$watchCollection($, function (t, n) { + g.valuesFn(e, s).then(function (e) { + m.update(e), s.$render() + }) + }) + } + e.$watch(a.ngModel, function (t, n) { + e.$modelValue = t, g.valuesFn(e, s).then(function (e) { + if (l.selectMode && !e.length && t.length > 0)return void s.$setViewValue(s.$viewValue.substring(0, s.$viewValue.length - 1)); + e.length > d && (e = e.slice(0, d)); + var n = m.$isVisible(); + n && m.update(e), (1 !== e.length || e[0].value !== t) && (!n && m.update(e), s.$render()) + }) + }), s.$formatters.push(function (e) { + var t = g.displayValue(e); + return t === n ? '' : t + }), s.$render = function () { + if (s.$isEmpty(s.$viewValue))return t.val(''); + var e = m.$getIndex(s.$modelValue), n = angular.isDefined(e) ? m.$scope.$matches[e].label : s.$viewValue; + n = angular.isObject(n) ? g.displayValue(n) : n; + var a = n ? n.toString().replace(/<(?:.|\n)*?>/gm, '') : ''; + t.val(l.trimValue === !1 ? a : a.trim()) + }, e.$on('$destroy', function () { + m && m.destroy(), l = null, m = null + }) + } + } + }]) +}(window, document); +//# sourceMappingURL=angular-strap.min.js.map diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular-strap.tpl.min.js b/apollo-portal/src/main/resources/static/vendor/angular/angular-strap.tpl.min.js index 54f1b6b78..7c0417150 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular-strap.tpl.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular-strap.tpl.min.js @@ -5,4 +5,29 @@ * @author Olivier Louvignes (https://github.com/mgcrea) * @license MIT License, http://www.opensource.org/licenses/MIT */ -!function(t,e,n){'use strict';angular.module('mgcrea.ngStrap.alert').run(['$templateCache',function(t){t.put('alert/alert.tpl.html','
     
    ')}]),angular.module('mgcrea.ngStrap.aside').run(['$templateCache',function(t){t.put('aside/aside.tpl.html','')}]),angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache',function(t){t.put('datepicker/datepicker.tpl.html','')}]),angular.module('mgcrea.ngStrap.dropdown').run(['$templateCache',function(t){t.put('dropdown/dropdown.tpl.html','')}]),angular.module('mgcrea.ngStrap.modal').run(['$templateCache',function(t){t.put('modal/modal.tpl.html','')}]),angular.module('mgcrea.ngStrap.popover').run(['$templateCache',function(t){t.put('popover/popover.tpl.html','

    ')}]),angular.module('mgcrea.ngStrap.select').run(['$templateCache',function(t){t.put('select/select.tpl.html','')}]),angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache',function(t){t.put('timepicker/timepicker.tpl.html','')}]),angular.module('mgcrea.ngStrap.tab').run(['$templateCache',function(t){t.put('tab/tab.tpl.html','
    ')}]),angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache',function(t){t.put('tooltip/tooltip.tpl.html','
    ')}]),angular.module('mgcrea.ngStrap.typeahead').run(['$templateCache',function(t){t.put('typeahead/typeahead.tpl.html','')}])}(window,document); \ No newline at end of file +!function (t, e, n) { + 'use strict'; + angular.module('mgcrea.ngStrap.alert').run(['$templateCache', function (t) { + t.put('alert/alert.tpl.html', '
     
    ') + }]), angular.module('mgcrea.ngStrap.aside').run(['$templateCache', function (t) { + t.put('aside/aside.tpl.html', '') + }]), angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache', function (t) { + t.put('datepicker/datepicker.tpl.html', '') + }]), angular.module('mgcrea.ngStrap.dropdown').run(['$templateCache', function (t) { + t.put('dropdown/dropdown.tpl.html', '') + }]), angular.module('mgcrea.ngStrap.modal').run(['$templateCache', function (t) { + t.put('modal/modal.tpl.html', '') + }]), angular.module('mgcrea.ngStrap.popover').run(['$templateCache', function (t) { + t.put('popover/popover.tpl.html', '

    ') + }]), angular.module('mgcrea.ngStrap.select').run(['$templateCache', function (t) { + t.put('select/select.tpl.html', '') + }]), angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache', function (t) { + t.put('timepicker/timepicker.tpl.html', '') + }]), angular.module('mgcrea.ngStrap.tab').run(['$templateCache', function (t) { + t.put('tab/tab.tpl.html', '
    ') + }]), angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache', function (t) { + t.put('tooltip/tooltip.tpl.html', '
    ') + }]), angular.module('mgcrea.ngStrap.typeahead').run(['$templateCache', function (t) { + t.put('typeahead/typeahead.tpl.html', '') + }]) +}(window, document); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.min.css b/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.min.css index f3ac347b7..75c624600 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.min.css +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.min.css @@ -1 +1,233 @@ -.toast-title{font-weight:700}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}.toast{opacity:1!important}.toast.ng-enter{opacity:0!important;transition:opacity .3s linear}.toast.ng-enter.ng-enter-active{opacity:1!important}.toast.ng-leave{opacity:1;transition:opacity .3s linear}.toast.ng-leave.ng-leave-active{opacity:0!important}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px)and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px)and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}} \ No newline at end of file +.toast-title { + font-weight: 700 +} + +.toast-message { + word-wrap: break-word +} + +.toast-message a, .toast-message label { + color: #fff +} + +.toast-message a:hover { + color: #ccc; + text-decoration: none +} + +.toast-close-button { + position: relative; + right: -.3em; + top: -.3em; + float: right; + font-size: 20px; + font-weight: 700; + color: #fff; + -webkit-text-shadow: 0 1px 0 #fff; + text-shadow: 0 1px 0 #fff; + opacity: .8 +} + +.toast-close-button:focus, .toast-close-button:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .4 +} + +button.toast-close-button { + padding: 0; + cursor: pointer; + background: 0 0; + border: 0; + -webkit-appearance: none +} + +.toast-top-center { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-center { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-full-width { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-full-width { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-left { + top: 12px; + left: 12px +} + +.toast-top-right { + top: 12px; + right: 12px +} + +.toast-bottom-right { + right: 12px; + bottom: 12px +} + +.toast-bottom-left { + bottom: 12px; + left: 12px +} + +#toast-container { + position: fixed; + z-index: 999999 +} + +#toast-container * { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box +} + +#toast-container > div { + position: relative; + overflow: hidden; + margin: 0 0 6px; + padding: 15px 15px 15px 50px; + width: 300px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background-position: 15px center; + background-repeat: no-repeat; + -moz-box-shadow: 0 0 12px #999; + -webkit-box-shadow: 0 0 12px #999; + box-shadow: 0 0 12px #999; + color: #fff; + opacity: .8 +} + +#toast-container > :hover { + -moz-box-shadow: 0 0 12px #000; + -webkit-box-shadow: 0 0 12px #000; + box-shadow: 0 0 12px #000; + opacity: 1; + cursor: pointer +} + +#toast-container > .toast-info { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-error { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-success { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==) !important +} + +#toast-container > .toast-warning { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=) !important +} + +#toast-container.toast-bottom-center > div, #toast-container.toast-top-center > div { + width: 300px; + margin: auto +} + +#toast-container.toast-bottom-full-width > div, #toast-container.toast-top-full-width > div { + width: 96%; + margin: auto +} + +.toast { + background-color: #030303 +} + +.toast-success { + background-color: #51a351 +} + +.toast-error { + background-color: #bd362f +} + +.toast-info { + background-color: #2f96b4 +} + +.toast-warning { + background-color: #f89406 +} + +.toast-progress { + position: absolute; + left: 0; + bottom: 0; + height: 4px; + background-color: #000; + opacity: .4 +} + +.toast { + opacity: 1 !important +} + +.toast.ng-enter { + opacity: 0 !important; + transition: opacity .3s linear +} + +.toast.ng-enter.ng-enter-active { + opacity: 1 !important +} + +.toast.ng-leave { + opacity: 1; + transition: opacity .3s linear +} + +.toast.ng-leave.ng-leave-active { + opacity: 0 !important +} + +@media all and (max-width: 240px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 11em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 241px)and (max-width: 480px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 18em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 481px)and (max-width: 768px) { + #toast-container > div { + padding: 15px 15px 15px 50px; + width: 25em + } +} diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.tpls.min.js b/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.tpls.min.js index 5b0b8c938..ee2413ba8 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.tpls.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular-toastr-1.4.1.tpls.min.js @@ -1 +1,247 @@ -!function(){"use strict";function t(t,e,s,n,o,r,a){function i(t){if(t)d(t.toastId);else for(var e=0;e=e&&O[e-1].open.resolve(),o()&&(h.remove(),h=null,T=a.defer())}))}function g(t,e,s,n){return angular.isObject(s)&&(n=s,s=null),v({iconClass:t,message:e,optionsOverride:n,title:s})}function m(){return angular.extend({},r)}function f(e){if(h)return T.promise;h=angular.element("
    "),h.attr("id",e.containerId),h.addClass(e.positionClass),h.css({"pointer-events":"auto"});var s=angular.element(document.querySelector(e.target));if(!s||!s.length)throw"Target for toasts doesn't exist";return t.enter(h,s).then(function(){T.resolve()}),T.promise}function v(s){function r(t,e,s){s.allowHtml?(t.scope.allowHtml=!0,t.scope.title=o.trustAsHtml(e.title),t.scope.message=o.trustAsHtml(e.message)):(t.scope.title=e.title,t.scope.message=e.message),t.scope.toastType=t.iconClass,t.scope.toastId=t.toastId,t.scope.options={extendedTimeOut:s.extendedTimeOut,messageClass:s.messageClass,onHidden:s.onHidden,onShown:s.onShown,progressBar:s.progressBar,tapToDismiss:s.tapToDismiss,timeOut:s.timeOut,titleClass:s.titleClass,toastClass:s.toastClass},s.closeButton&&(t.scope.options.closeHtml=s.closeHtml)}function i(){function t(t){for(var e=["containerId","iconClasses","maxOpened","newestOnTop","positionClass","preventDuplicates","preventOpenDuplicates","templates"],s=0,n=e.length;n>s;s++)delete t[e[s]];return t}var e={toastId:C++,isOpened:!1,scope:n.$new(),open:a.defer()};return e.iconClass=s.iconClass,s.optionsOverride&&(p=angular.extend(p,t(s.optionsOverride)),e.iconClass=s.optionsOverride.iconClass||e.iconClass),r(e,s,p),e.el=l(e.scope),e}function l(t){var s=angular.element("
    "),n=e.get("$compile");return n(s)(t)}function c(){return p.maxOpened&&O.length<=p.maxOpened||!p.maxOpened}function u(){var t=p.preventDuplicates&&s.message===w,e=p.preventOpenDuplicates&&B[s.message];return t||e?!0:(w=s.message,B[s.message]=!0,!1)}var p=m();if(!u()){var g=i();if(O.push(g),p.autoDismiss&&p.maxOpened>0)for(var v=O.slice(0,O.length-p.maxOpened),T=0,$=v.length;$>T;T++)d(v[T].toastId);return c()&&g.open.resolve(),g.open.promise.then(function(){f(p).then(function(){if(g.isOpened=!0,p.newestOnTop)t.enter(g.el,h).then(function(){g.scope.init()});else{var e=h[0].lastChild?angular.element(h[0].lastChild):null;t.enter(g.el,h,e).then(function(){g.scope.init()})}})}),g}}var h,C=0,O=[],w="",B={},T=a.defer(),$={clear:i,error:l,info:c,remove:d,success:u,warning:p};return $}angular.module("toastr",[]).factory("toastr",t),t.$inject=["$animate","$injector","$document","$rootScope","$sce","toastrConfig","$q"]}(),function(){"use strict";angular.module("toastr").constant("toastrConfig",{allowHtml:!1,autoDismiss:!1,closeButton:!1,closeHtml:"",containerId:"toast-container",extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},maxOpened:0,messageClass:"toast-message",newestOnTop:!0,onHidden:null,onShown:null,positionClass:"toast-top-right",preventDuplicates:!1,preventOpenDuplicates:!1,progressBar:!1,tapToDismiss:!0,target:"body",templates:{toast:"directives/toast/toast.html",progressbar:"directives/progressbar/progressbar.html"},timeOut:5e3,titleClass:"toast-title",toastClass:"toast"})}(),function(){"use strict";function t(t){function e(t,e,s,n){function o(){var t=(i-(new Date).getTime())/a*100;e.css("width",t+"%")}var r,a,i;n.progressBar=t,t.start=function(t){r&&clearInterval(r),a=parseFloat(t),i=(new Date).getTime()+a,r=setInterval(o,10)},t.stop=function(){r&&clearInterval(r)},t.$on("$destroy",function(){clearInterval(r)})}return{replace:!0,require:"^toast",templateUrl:function(){return t.templates.progressbar},link:e}}angular.module("toastr").directive("progressBar",t),t.$inject=["toastrConfig"]}(),function(){"use strict";function t(){this.progressBar=null,this.startProgressBar=function(t){this.progressBar&&this.progressBar.start(t)},this.stopProgressBar=function(){this.progressBar&&this.progressBar.stop()}}angular.module("toastr").controller("ToastController",t)}(),function(){"use strict";function t(t,e,s,n){function o(s,o,r,a){function i(t){return a.startProgressBar(t),e(function(){a.stopProgressBar(),n.remove(s.toastId)},t,1)}function l(){s.progressBar=!1,a.stopProgressBar()}function c(){return s.options.closeHtml}var u;if(s.toastClass=s.options.toastClass,s.titleClass=s.options.titleClass,s.messageClass=s.options.messageClass,s.progressBar=s.options.progressBar,c()){var p=angular.element(s.options.closeHtml),d=t.get("$compile");p.addClass("toast-close-button"),p.attr("ng-click","close()"),d(p)(s),o.prepend(p)}s.init=function(){s.options.timeOut&&(u=i(s.options.timeOut)),s.options.onShown&&s.options.onShown()},o.on("mouseenter",function(){l(),u&&e.cancel(u)}),s.tapToast=function(){s.options.tapToDismiss&&s.close(!0)},s.close=function(t){n.remove(s.toastId,t)},o.on("mouseleave",function(){(0!==s.options.timeOut||0!==s.options.extendedTimeOut)&&(s.$apply(function(){s.progressBar=s.options.progressBar}),u=i(s.options.extendedTimeOut))})}return{replace:!0,templateUrl:function(){return s.templates.toast},controller:"ToastController",link:o}}angular.module("toastr").directive("toast",t),t.$inject=["$injector","$interval","toastrConfig","toastr"]}(),angular.module("toastr").run(["$templateCache",function(t){t.put("directives/progressbar/progressbar.html",'
    \n'),t.put("directives/toast/toast.html",'
    \n
    \n
    {{title}}
    \n
    {{message}}
    \n
    \n
    \n
    \n \n
    \n')}]); \ No newline at end of file +!function () { + "use strict"; + function t(t, e, s, n, o, r, a) { + function i(t) { + if (t)d(t.toastId); else for (var e = 0; e < O.length; e++)d(O[e].toastId) + } + + function l(t, e, s) { + var n = m().iconClasses.error; + return g(n, t, e, s) + } + + function c(t, e, s) { + var n = m().iconClasses.info; + return g(n, t, e, s) + } + + function u(t, e, s) { + var n = m().iconClasses.success; + return g(n, t, e, s) + } + + function p(t, e, s) { + var n = m().iconClasses.warning; + return g(n, t, e, s) + } + + function d(e, s) { + function n(t) { + for (var e = 0; e < O.length; e++)if (O[e].toastId === t)return O[e] + } + + function o() { + return !O.length + } + + var i = n(e); + i && !i.deleting && (i.deleting = !0, i.isOpened = !1, t.leave(i.el).then(function () { + i.scope.options.onHidden && i.scope.options.onHidden(s), i.scope.$destroy(); + var t = O.indexOf(i); + delete B[i.scope.message], O.splice(t, 1); + var e = r.maxOpened; + e && O.length >= e && O[e - 1].open.resolve(), o() && (h.remove(), h = null, T = a.defer()) + })) + } + + function g(t, e, s, n) { + return angular.isObject(s) && (n = s, s = null), v({iconClass: t, message: e, optionsOverride: n, title: s}) + } + + function m() { + return angular.extend({}, r) + } + + function f(e) { + if (h)return T.promise; + h = angular.element("
    "), h.attr("id", e.containerId), h.addClass(e.positionClass), h.css({"pointer-events": "auto"}); + var s = angular.element(document.querySelector(e.target)); + if (!s || !s.length)throw"Target for toasts doesn't exist"; + return t.enter(h, s).then(function () { + T.resolve() + }), T.promise + } + + function v(s) { + function r(t, e, s) { + s.allowHtml ? (t.scope.allowHtml = !0, t.scope.title = o.trustAsHtml(e.title), t.scope.message = o.trustAsHtml(e.message)) : (t.scope.title = e.title, t.scope.message = e.message), t.scope.toastType = t.iconClass, t.scope.toastId = t.toastId, t.scope.options = { + extendedTimeOut: s.extendedTimeOut, + messageClass: s.messageClass, + onHidden: s.onHidden, + onShown: s.onShown, + progressBar: s.progressBar, + tapToDismiss: s.tapToDismiss, + timeOut: s.timeOut, + titleClass: s.titleClass, + toastClass: s.toastClass + }, s.closeButton && (t.scope.options.closeHtml = s.closeHtml) + } + + function i() { + function t(t) { + for (var e = ["containerId", "iconClasses", "maxOpened", "newestOnTop", "positionClass", "preventDuplicates", "preventOpenDuplicates", "templates"], s = 0, n = e.length; n > s; s++)delete t[e[s]]; + return t + } + + var e = {toastId: C++, isOpened: !1, scope: n.$new(), open: a.defer()}; + return e.iconClass = s.iconClass, s.optionsOverride && (p = angular.extend(p, t(s.optionsOverride)), e.iconClass = s.optionsOverride.iconClass || e.iconClass), r(e, s, p), e.el = l(e.scope), e + } + + function l(t) { + var s = angular.element("
    "), n = e.get("$compile"); + return n(s)(t) + } + + function c() { + return p.maxOpened && O.length <= p.maxOpened || !p.maxOpened + } + + function u() { + var t = p.preventDuplicates && s.message === w, e = p.preventOpenDuplicates && B[s.message]; + return t || e ? !0 : (w = s.message, B[s.message] = !0, !1) + } + + var p = m(); + if (!u()) { + var g = i(); + if (O.push(g), p.autoDismiss && p.maxOpened > 0)for (var v = O.slice(0, O.length - p.maxOpened), T = 0, $ = v.length; $ > T; T++)d(v[T].toastId); + return c() && g.open.resolve(), g.open.promise.then(function () { + f(p).then(function () { + if (g.isOpened = !0, p.newestOnTop)t.enter(g.el, h).then(function () { + g.scope.init() + }); else { + var e = h[0].lastChild ? angular.element(h[0].lastChild) : null; + t.enter(g.el, h, e).then(function () { + g.scope.init() + }) + } + }) + }), g + } + } + + var h, C = 0, O = [], w = "", B = {}, T = a.defer(), $ = { + clear: i, + error: l, + info: c, + remove: d, + success: u, + warning: p + }; + return $ + } + + angular.module("toastr", []).factory("toastr", t), t.$inject = ["$animate", "$injector", "$document", "$rootScope", "$sce", "toastrConfig", "$q"] +}(), function () { + "use strict"; + angular.module("toastr").constant("toastrConfig", { + allowHtml: !1, + autoDismiss: !1, + closeButton: !1, + closeHtml: "", + containerId: "toast-container", + extendedTimeOut: 1e3, + iconClasses: {error: "toast-error", info: "toast-info", success: "toast-success", warning: "toast-warning"}, + maxOpened: 0, + messageClass: "toast-message", + newestOnTop: !0, + onHidden: null, + onShown: null, + positionClass: "toast-top-right", + preventDuplicates: !1, + preventOpenDuplicates: !1, + progressBar: !1, + tapToDismiss: !0, + target: "body", + templates: {toast: "directives/toast/toast.html", progressbar: "directives/progressbar/progressbar.html"}, + timeOut: 5e3, + titleClass: "toast-title", + toastClass: "toast" + }) +}(), function () { + "use strict"; + function t(t) { + function e(t, e, s, n) { + function o() { + var t = (i - (new Date).getTime()) / a * 100; + e.css("width", t + "%") + } + + var r, a, i; + n.progressBar = t, t.start = function (t) { + r && clearInterval(r), a = parseFloat(t), i = (new Date).getTime() + a, r = setInterval(o, 10) + }, t.stop = function () { + r && clearInterval(r) + }, t.$on("$destroy", function () { + clearInterval(r) + }) + } + + return { + replace: !0, require: "^toast", templateUrl: function () { + return t.templates.progressbar + }, link: e + } + } + + angular.module("toastr").directive("progressBar", t), t.$inject = ["toastrConfig"] +}(), function () { + "use strict"; + function t() { + this.progressBar = null, this.startProgressBar = function (t) { + this.progressBar && this.progressBar.start(t) + }, this.stopProgressBar = function () { + this.progressBar && this.progressBar.stop() + } + } + + angular.module("toastr").controller("ToastController", t) +}(), function () { + "use strict"; + function t(t, e, s, n) { + function o(s, o, r, a) { + function i(t) { + return a.startProgressBar(t), e(function () { + a.stopProgressBar(), n.remove(s.toastId) + }, t, 1) + } + + function l() { + s.progressBar = !1, a.stopProgressBar() + } + + function c() { + return s.options.closeHtml + } + + var u; + if (s.toastClass = s.options.toastClass, s.titleClass = s.options.titleClass, s.messageClass = s.options.messageClass, s.progressBar = s.options.progressBar, c()) { + var p = angular.element(s.options.closeHtml), d = t.get("$compile"); + p.addClass("toast-close-button"), p.attr("ng-click", "close()"), d(p)(s), o.prepend(p) + } + s.init = function () { + s.options.timeOut && (u = i(s.options.timeOut)), s.options.onShown && s.options.onShown() + }, o.on("mouseenter", function () { + l(), u && e.cancel(u) + }), s.tapToast = function () { + s.options.tapToDismiss && s.close(!0) + }, s.close = function (t) { + n.remove(s.toastId, t) + }, o.on("mouseleave", function () { + (0 !== s.options.timeOut || 0 !== s.options.extendedTimeOut) && (s.$apply(function () { + s.progressBar = s.options.progressBar + }), u = i(s.options.extendedTimeOut)) + }) + } + + return { + replace: !0, templateUrl: function () { + return s.templates.toast + }, controller: "ToastController", link: o + } + } + + angular.module("toastr").directive("toast", t), t.$inject = ["$injector", "$interval", "toastrConfig", "toastr"] +}(), angular.module("toastr").run(["$templateCache", function (t) { + t.put("directives/progressbar/progressbar.html", '
    \n'), t.put("directives/toast/toast.html", '
    \n
    \n
    {{title}}
    \n
    {{message}}
    \n
    \n
    \n
    \n \n
    \n') +}]); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular-ui-router.min.js b/apollo-portal/src/main/resources/static/vendor/angular/angular-ui-router.min.js index 8f76c7ede..b482d950d 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular-ui-router.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular-ui-router.min.js @@ -4,6 +4,2581 @@ * @link http://angular-ui.github.com/ * @license MIT License, http://www.opensource.org/licenses/MIT */ -!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports["ui.router"]=b():a["ui.router"]=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){a.exports=c(1)},function(a,b,c){var d=c(2);b.common=d;var e=c(36);b.params=e;var f=c(15);b.path=f;var g=c(17);b.resolve=g;var h=c(12);b.state=h;var i=c(9);b.transition=i;var j=c(34);b.url=j;var k=c(49);b.view=k,Object.defineProperty(b,"__esModule",{value:!0}),b["default"]="ui.router"},function(a,b,c){function d(a){for(var c in a)b.hasOwnProperty(c)||(b[c]=a[c])}d(c(3)),d(c(4)),d(c(5)),d(c(6))},function(a,b){function c(a){function b(c){return c.length>=d?a.apply(null,c):function(){return b(c.concat([].slice.apply(arguments)))}}var c=[].slice.apply(arguments,[1]),d=a.length;return b(c)}function d(){var a=arguments,b=a.length-1;return function(){for(var c=b,d=a[b].apply(this,arguments);c--;)d=a[c].call(this,d);return d}}function e(){for(var a=[],b=0;b=0&&a.splice(c,1),a}},b.defaults=j,b.merge=k,b.mergeR=function(a,b){return J(a,b)},b.ancestors=l,b.equalForKeys=m,b.pick=o,b.omit=p,b.pluck=q,b.filter=r,b.find=s,b.map=t,b.values=function(a){return Object.keys(a).map(function(b){return a[b]})},b.allTrueR=function(a,b){return a&&b},b.anyTrueR=function(a,b){return a||b},b.pushR=function(a,b){return a.push(b),a},b.unnestR=function(a,b){return a.concat(b)},b.flattenR=function(a,c){return H(c)?a.concat(c.reduce(b.flattenR,[])):b.pushR(a,c)},b.unnest=function(a){return a.reduce(b.unnestR,[])},b.flatten=function(a){return a.reduce(b.flattenR,[])},b.assertPredicate=u,b.pairs=function(a){return Object.keys(a).map(function(b){return[b,a[b]]})},b.arrayTuples=v,b.applyPairs=w,b.isInjectable=x,b.isNull=function(a){return null===a},b.isPromise=f(G,e(b.prop("then"),D)),b.fnToString=y,b.maxLength=z,b.padString=A,b.tail=B,angular.module("ui.router.util",["ng","ui.router.init"]),angular.module("ui.router.router",["ui.router.util"]),angular.module("ui.router.state",["ui.router.router","ui.router.util","ui.router.angular1"]),angular.module("ui.router",["ui.router.init","ui.router.state","ui.router.angular1"]),angular.module("ui.router.compat",["ui.router"])},function(a,b){var c=function(a){return function(){throw new Error(a+"(): No coreservices implementation for UI-Router is loaded. You should include one of: ['angular1.js']")}},d={$q:void 0,$injector:void 0,location:{},locationConfig:{}};b.services=d,["replace","url","path","search","hash"].forEach(function(a){return d.location[a]=c(a)}),["port","protocol","host","baseHref","html5Mode","hashPrefix"].forEach(function(a){return d.locationConfig[a]=c(a)})},function(a,b){var c=function(){function a(a){void 0===a&&(a=[]),this._items=a}return a.prototype.enqueue=function(a){return this._items.push(a),a},a.prototype.dequeue=function(){return this.size()?this._items.splice(0,1)[0]:void 0},a.prototype.clear=function(){var a=this._items;return this._items=[],a},a.prototype.size=function(){return this._items.length},a.prototype.remove=function(a){var b=this._items.indexOf(a);return b>-1&&this._items.splice(b,1)[0]},a.prototype.peekTail=function(){return this._items[this._items.length-1]},a.prototype.peekHead=function(){return this.size()?this._items[0]:void 0},a}();b.Queue=c},function(a,b,c){function d(a){return j.is(m.TransitionRejection)(a.reason)?a.reason.toString():"Promise("+JSON.stringify(a)+")"}function e(a){var b=j.fnToString(a),c=b.match(/^(function [^ ]+\([^)]*\))/);return c?c[1]:b}function f(a){return j.isNumber(a)?i[a]:i[i[a]]}function g(a){var b=j.pattern([[j.not(j.isDefined),j.val("undefined")],[j.isNull,j.val("null")],[j.isPromise,d],[j.is(l.Transition),j.invoke("toString")],[j.is(k.Resolvable),j.invoke("toString")],[j.isInjectable,e],[j.val(!0),j.identity]]);return JSON.stringify(a,function(a,c){return b(c)}).replace(/\\"/g,'"')}function h(a){a.$watch(function(){q.approximateDigests++})}var i,j=c(3),k=c(7),l=c(8),m=c(28),n=function(a){return"ui-view id#"+a.id+", contextual name '"+a.name+"@"+a.creationContext+"', fqn: '"+a.fqn+"'"},o=function(a){return"ViewConfig targeting ui-view: '"+a.uiViewName+"@"+a.uiViewContextAnchor+"', context: '"+a.context.name+"'"};!function(a){a[a.RESOLVE=0]="RESOLVE",a[a.TRANSITION=1]="TRANSITION",a[a.HOOK=2]="HOOK",a[a.INVOKE=3]="INVOKE",a[a.UIVIEW=4]="UIVIEW",a[a.VIEWCONFIG=5]="VIEWCONFIG"}(i||(i={}));var p=function(){function a(){var a=this;this._enabled={},this.enable=function(){for(var b=[],c=0;c "+d)}},a.prototype.traceTransitionIgnored=function(a){if(this.enabled(i.TRANSITION)){var b=a.$id,c=this.approximateDigests,d=g(a);console.log("Transition #"+b+" Digest #"+c+": Ignored <> "+d)}},a.prototype.traceHookInvocation=function(a,b){if(this.enabled(i.HOOK)){var c=j.parse("transition.$id")(b),d=this.approximateDigests,f=j.parse("traceData.hookType")(b)||"internal",g=j.parse("traceData.context.state.name")(b)||j.parse("traceData.context")(b)||"unknown",h=e(a.fn);console.log("Transition #"+c+" Digest #"+d+": Hook -> "+f+" context: "+g+", "+j.maxLength(200,h))}},a.prototype.traceHookResult=function(a,b,c){if(this.enabled(i.HOOK)){var d=j.parse("transition.$id")(c),e=this.approximateDigests,f=g(a),h=g(b);console.log("Transition #"+d+" Digest #"+e+": <- Hook returned: "+j.maxLength(200,f)+", transition result: "+j.maxLength(200,h))}},a.prototype.traceResolvePath=function(a,b){if(this.enabled(i.RESOLVE)){var c=j.parse("transition.$id")(b),d=this.approximateDigests,e=a&&a.toString(),f=b&&b.resolvePolicy;console.log("Transition #"+c+" Digest #"+d+": Resolving "+e+" ("+f+")")}},a.prototype.traceResolvePathElement=function(a,b,c){if(this.enabled(i.RESOLVE)&&b.length){var d=j.parse("transition.$id")(c),e=this.approximateDigests,f=Object.keys(b).join(", "),g=a&&a.toString(),h=c&&c.resolvePolicy;console.log("Transition #"+d+" Digest #"+e+": Resolve "+g+" resolvables: ["+f+"] ("+h+")")}},a.prototype.traceResolveResolvable=function(a,b){if(this.enabled(i.RESOLVE)){var c=j.parse("transition.$id")(b),d=this.approximateDigests,e=a&&a.toString();console.log("Transition #"+c+" Digest #"+d+": Resolving -> "+e)}},a.prototype.traceResolvableResolved=function(a,b){if(this.enabled(i.RESOLVE)){var c=j.parse("transition.$id")(b),d=this.approximateDigests,e=a&&a.toString(),f=g(a.data);console.log("Transition #"+c+" Digest #"+d+": <- Resolved "+e+" to: "+j.maxLength(200,f))}},a.prototype.tracePathElementInvoke=function(a,b,c,d){if(this.enabled(i.INVOKE)){var f=j.parse("transition.$id")(d),g=this.approximateDigests,h=a&&a.state&&a.state.toString(),k=e(b);console.log("Transition #"+f+" Digest #"+g+": Invoke "+d.when+": context: "+h+" "+j.maxLength(200,k))}},a.prototype.traceError=function(a,b){if(this.enabled(i.TRANSITION)){var c=b.$id,d=this.approximateDigests,e=g(b);console.log("Transition #"+c+" Digest #"+d+": <- Rejected "+e+", reason: "+a)}},a.prototype.traceSuccess=function(a,b){if(this.enabled(i.TRANSITION)){var c=b.$id,d=this.approximateDigests,e=a.name,f=g(b);console.log("Transition #"+c+" Digest #"+d+": <- Success "+f+", final state: "+e)}},a.prototype.traceUiViewEvent=function(a,b,c){void 0===c&&(c=""),this.enabled(i.UIVIEW)&&console.log("ui-view: "+j.padString(30,a)+" "+n(b)+c)},a.prototype.traceUiViewConfigUpdated=function(a,b){this.enabled(i.UIVIEW)&&this.traceUiViewEvent("Updating",a," with ViewConfig from context='"+b+"'")},a.prototype.traceUiViewScopeCreated=function(a,b){this.enabled(i.UIVIEW)&&this.traceUiViewEvent("Created scope for",a,", scope #"+b.$id)},a.prototype.traceUiViewFill=function(a,b){this.enabled(i.UIVIEW)&&this.traceUiViewEvent("Fill",a," with: "+j.maxLength(200,b))},a.prototype.traceViewServiceEvent=function(a,b){this.enabled(i.VIEWCONFIG)&&console.log("$view.ViewConfig: "+a+" "+o(b))},a.prototype.traceViewServiceUiViewEvent=function(a,b){this.enabled(i.VIEWCONFIG)&&console.log("$view.ViewConfig: "+a+" "+n(b))},a}(),q=new p;b.trace=q,h.$inject=["$rootScope"],angular.module("ui.router").run(h),angular.module("ui.router").service("$trace",function(){return q})},function(a,b,c){var d=c(3),e=c(4),f=c(6),g=function(){function a(a,b,c){this.promise=void 0,d.extend(this,{name:a,resolveFn:b,deps:e.services.$injector.annotate(b),data:c})}return a.prototype.resolveResolvable=function(a,b){var c=this;void 0===b&&(b={});var g=this,h=g.name,i=g.deps,j=g.resolveFn;f.trace.traceResolveResolvable(this,b);var k=e.services.$q.defer();this.promise=k.promise;var l=a.getResolvables(null,{omitOwnLocals:[h]}),m=d.pick(l,i),n=d.map(m,function(c){return c.get(a,b)});return e.services.$q.all(n).then(function(a){try{var b=e.services.$injector.invoke(j,null,a);k.resolve(b)}catch(d){k.reject(d)}return c.promise}).then(function(a){return c.data=a,f.trace.traceResolvableResolved(c,b),c.promise})},a.prototype.get=function(a,b){return this.promise||this.resolveResolvable(a,b)},a.prototype.toString=function(){return"Resolvable(name: "+this.name+", requires: ["+this.deps+"])"},a.makeResolvables=function(b){var c=d.filter(b,d.not(d.isFunction)),e=Object.keys(c);if(e.length)throw new Error("Invalid resolve key/value: "+e[0]+"/"+c[e[0]]);return d.map(b,function(b,c){return new a(c,b)})},a}();b.Resolvable=g},function(a,b,c){var d=c(6),e=c(4),f=c(3),g=c(9),h=c(15),i=c(12),j=c(36),k=c(17),l=0,m=new g.RejectFactory,n=f.prop("self"),o=function(){function a(a,b){var c=this;if(this._deferred=e.services.$q.defer(),this.promise=this._deferred.promise,this.treeChanges=function(){return c._treeChanges},this.isActive=function(){return c===c._options.current()},!b.valid())throw new Error(b.error());g.HookRegistry.mixin(new g.HookRegistry,this),this._options=f.extend({current:f.val(this)},b.options()),this.$id=l++;var d=h.PathFactory.buildToPath(a,b);this._treeChanges=h.PathFactory.treeChanges(a,d,this._options.reloadState),h.PathFactory.bindTransitionResolve(this._treeChanges,this)}return a.prototype.$from=function(){return f.tail(this._treeChanges.from).state},a.prototype.$to=function(){return f.tail(this._treeChanges.to).state},a.prototype.from=function(){return this.$from().self},a.prototype.to=function(){return this.$to().self},a.prototype.is=function(b){return b instanceof a?this.is({to:b.$to().name,from:b.$from().name}):!(b.to&&!g.matchState(this.$to(),b.to)||b.from&&!g.matchState(this.$from(),b.from))},a.prototype.params=function(a){return void 0===a&&(a="to"),this._treeChanges[a].map(f.prop("values")).reduce(f.mergeR,{})},a.prototype.resolves=function(){return f.map(f.tail(this._treeChanges.to).resolveContext.getResolvables(),function(a){return a.data})},a.prototype.addResolves=function(a,b){void 0===b&&(b="");var c="string"==typeof b?b:b.name,d=this._treeChanges.to,e=f.find(d,function(a){return a.state.name===c});f.tail(d).resolveContext.addResolvables(k.Resolvable.makeResolvables(a),e.state)},a.prototype.previous=function(){return this._options.previous||null},a.prototype.options=function(){return this._options},a.prototype.entering=function(){return f.map(this._treeChanges.entering,f.prop("state")).map(n)},a.prototype.exiting=function(){return f.map(this._treeChanges.exiting,f.prop("state")).map(n).reverse()},a.prototype.retained=function(){return f.map(this._treeChanges.retained,f.prop("state")).map(n)},a.prototype.views=function(a,b){void 0===a&&(a="entering");var c=this._treeChanges[a];return b?f.find(c,f.propEq("state",b)).views:f.unnest(c.map(f.prop("views")))},a.prototype.redirect=function(b){var c=f.extend({},this.options(),b.options(),{previous:this});b=new i.TargetState(b.identifier(),b.$state(),b.params(),c);var d=new a(this._treeChanges.from,b),e=this.treeChanges().to,g=h.Node.matching(d.treeChanges().to,e),j=function(a,b){return-1===["$stateParams","$transition$"].indexOf(b)};return g.forEach(function(a,b){return f.extend(a.resolves,f.filter(e[b].resolves,j))}),d},a.prototype.ignored=function(){var a=this._treeChanges,b=a.to,c=a.from;if(this._options.reload||f.tail(b).state!==f.tail(c).state)return!1;var d=b.map(function(a){return a.schema.filter(f.not(f.prop("dynamic")))}),e=[b,c].map(function(a){return a.map(f.prop("values"))}),g=e[0],h=e[1],i=f.arrayTuples(d,g,h);return i.map(function(a){var b=a[0],c=a[1],d=a[2];return j.Param.equals(b,c,d)}).reduce(f.allTrueR,!0)},a.prototype.hookBuilder=function(){return new g.HookBuilder(g.$transitions,this,{transition:this,current:this._options.current})},a.prototype.run=function(){var a=this,b=this.hookBuilder(),c=g.TransitionHook.runSynchronousHooks,f=function(){return c(b.getOnSuccessHooks(),{},!0)},h=function(a){return c(b.getOnErrorHooks(),{$error$:a},!0)};this.promise.then(f,h);var i=c(b.getOnBeforeHooks());if(g.TransitionHook.isRejection(i)){var j=i.reason;return this._deferred.reject(j),this.promise}if(!this.valid()){var k=new Error(this.error());return this._deferred.reject(k),this.promise}if(this.ignored()){d.trace.traceTransitionIgnored(this);var l=m.ignored();return this._deferred.reject(l.reason),this.promise}var n=function(){a._deferred.resolve(a),d.trace.traceSuccess(a.$to(),a)},o=function(b){return a._deferred.reject(b),d.trace.traceError(b,a),e.services.$q.reject(b)};d.trace.traceTransitionStart(this);var p=b.asyncHooks().reduce(function(a,b){return a.then(b.invokeStep)},i);return p.then(n,o),this.promise},a.prototype.valid=function(){return!this.error()},a.prototype.error=function(){var a=this.$to();return a.self[f.abstractKey]?"Cannot transition to abstract state '"+a.name+"'":j.Param.validates(a.parameters(),this.params())?void 0:"Param values not valid for state '"+a.name+"'"},a.prototype.toString=function(){var a=this.from(),b=this.to(),c=function(a){return null!==a["#"]&&void 0!==a["#"]?a:f.omit(a,"#")},d=this.$id,e=f.isObject(a)?a.name:a,g=f.toJson(c(this._treeChanges.from.map(f.prop("values")).reduce(f.mergeR,{}))),h=this.valid()?"":"(X) ",i=f.isObject(b)?b.name:b,j=f.toJson(c(this.params()));return"Transition#"+d+"( '"+e+"'"+g+" -> "+h+"'"+i+"'"+j+" )"},a}();b.Transition=o},function(a,b,c){function d(a){for(var c in a)b.hasOwnProperty(c)||(b[c]=a[c])}d(c(10)),d(c(11)),d(c(28)),d(c(8)),d(c(47)),d(c(48))},function(a,b,c){var d=c(3),e=c(9),f=function(){function a(a,b,c){var e=this;this.$transitions=a,this.transition=b,this.baseHookOptions=c,this.getOnBeforeHooks=function(){return e._buildTransitionHooks("onBefore",{},{async:!1})},this.getOnStartHooks=function(){return e._buildTransitionHooks("onStart")},this.getOnExitHooks=function(){return e._buildNodeHooks("onExit",e.treeChanges.exiting.reverse(),function(a){return e._toFrom({from:a.state})})},this.getOnRetainHooks=function(){return e._buildNodeHooks("onRetain",e.treeChanges.retained,function(a){return e._toFrom()})},this.getOnEnterHooks=function(){return e._buildNodeHooks("onEnter",e.treeChanges.entering,function(a){return e._toFrom({to:a.state})})},this.getOnFinishHooks=function(){return e._buildTransitionHooks("onFinish",{$treeChanges$:e.treeChanges})},this.getOnSuccessHooks=function(){return e._buildTransitionHooks("onSuccess",{},{async:!1,rejectIfSuperseded:!1})},this.getOnErrorHooks=function(){return e._buildTransitionHooks("onError",{},{async:!1,rejectIfSuperseded:!1})},this.treeChanges=b.treeChanges(),this.toState=d.tail(this.treeChanges.to).state,this.fromState=d.tail(this.treeChanges.from).state,this.transitionOptions=b.options()}return a.prototype.asyncHooks=function(){var a=this.getOnStartHooks(),b=this.getOnExitHooks(),c=this.getOnRetainHooks(),e=this.getOnEnterHooks(),f=this.getOnFinishHooks();return d.flatten([a,b,c,e,f]).filter(d.identity)},a.prototype._toFrom=function(a){return d.extend({to:this.toState,from:this.fromState},a)},a.prototype._buildTransitionHooks=function(a,b,c){var e=this;void 0===b&&(b={}),void 0===c&&(c={});var f=this.treeChanges.to,g=d.tail(f);c.traceData={hookType:a,context:f};var h=function(a){return e.buildHook(g,a.callback,b,c)};return this._matchingHooks(a,this._toFrom()).map(h)},a.prototype._buildNodeHooks=function(a,b,c,d,e){var f=this;void 0===d&&(d={}),void 0===e&&(e={});var g=function(b){var g=c(b);e.traceData={hookType:a,context:b},d.$state$=b.state;var h=function(a){return f.buildHook(b,a.callback,d,e)};return f._matchingHooks(a,g).map(h)};return b.map(g)},a.prototype.buildHook=function(a,b,c,f){void 0===f&&(f={});var g=d.extend({},this.baseHookOptions,f);return new e.TransitionHook(b,d.extend({},c),a.resolveContext,g)},a.prototype._matchingHooks=function(a,b){var c=function(a){return a.matches(b.to,b.from)},e=function(a,b){return b.priority-a.priority};return[this.transition,this.$transitions].map(function(b){return b.getHooks(a)}).filter(d.assertPredicate(d.isArray,"broken event named: "+a)).reduce(d.unnestR).filter(c).sort(e)},a}();b.HookBuilder=f},function(a,b,c){function d(a,b){function c(a){for(var b=0;bc;c++)"*"===this.glob[c]&&(b[c]="*");return"**"===this.glob[0]&&(b=b.slice(b.indexOf(this.glob[1])),b.unshift("**")),"**"===this.glob[this.glob.length-1]&&(b.splice(b.indexOf(this.glob[this.glob.length-2])+1,Number.MAX_VALUE),b.push("**")),this.glob.length!=b.length?!1:b.join("")===this.glob.join("")},a.is=function(a){return a.indexOf("*")>-1},a.fromString=function(b){return this.is(b)?new a(b):null},a}();b.Glob=c},function(a,b,c){function d(a,b){function c(a,b){return r.builder(a,b)||this}function d(a,b){return e.isObject(a)?b=a:b.name=a,s.register(b),this}function l(a){w.push(a)}function m(a,b,c,d,l,m){function r(c,d){function e(a){if(a instanceof g.TargetState){var b=a;return b=p.target(b.identifier(),b.params(),b.options()),b.valid()?j()!==k?v.superseded():p.transitionTo(b.identifier(),b.params(),b.options()):v.invalid(b.error())}}function h(){var a=m.dequeue();return void 0===a?v.invalid(d.error()):n(a).then(e).then(function(a){return a||h()})}var j=function(){return t.peekTail()||u.peekTail()},k=j(),l=i.PathFactory.makeTargetState(c),m=new f.Queue([].concat(w)),n=function(c){return a.when(b.invoke(c,null,{$to$:d,$from$:l}))};return h()}var x=m,y={name:"",url:"^",views:null,params:{"#":{value:null,type:"hash"}},"abstract":!0};n=s.register(y,!0),n.navigable=null;var z=function(){return i.PathFactory.bindTransNodesToPath([new i.Node(n,{})])};return c.rootContext(n),e.extend(p,{params:new k.StateParams,current:n.self,$current:n,transition:null}),s.flush(p),s.autoFlush=!0,p.reload=function(a){return p.transitionTo(p.current,d,{reload:e.isDefined(a)?a:!0,inherit:!1,notify:!1})},p.go=function(a,b,c){var d={relative:p.$current,inherit:!0},f=e.defaults(c,d,h.defaultTransOpts);return p.transitionTo(a,b,f)},p.target=function(a,b,c){void 0===c&&(c={});var d=q.find(a,c.relative);return new g.TargetState(a,d,b,c)},p.transitionTo=function(b,f,g){if(void 0===f&&(f={}),void 0===g&&(g={}),g=e.defaults(g,h.defaultTransOpts),g=e.extend(g,{current:t.peekTail.bind(t)}),e.isObject(g.reload)&&!g.reload.name)throw new Error("Invalid reload state object");if(g.reloadState=g.reload===!0?p.$current.path[0]:q.find(g.reload,g.relative),g.reload&&!g.reloadState)throw new Error("No such reload state '"+(e.isString(g.reload)?g.reload:g.reload.name)+"'");var i=p.target(b,f,g),k=u.peekTail(),m=k?k.to:z();if(!i.exists())return r(m,i);if(!i.valid())return a.reject(i.error());var n=x.create(m,i),o=new j.TransitionManager(n,x,l,c,p,d,a,t,u),s=o.runTransition();return e.extend(s,{transition:n})},p.is=function(a,b,c){c=e.defaults(c,{relative:p.$current});var f=q.find(a,c.relative);return e.isDefined(f)?p.$current!==f?!1:e.isDefined(b)&&null!==b?k.Param.equals(f.parameters(),d,b):!0:void 0},p.includes=function(a,b,c){c=e.defaults(c,{relative:p.$current});var f=e.isString(a)&&g.Glob.fromString(a);if(f){if(!f.matches(p.$current.name))return!1;a=p.$current.name}var h=q.find(a,c.relative),i=p.$current.includes;return e.isDefined(h)?e.isDefined(i[h.name])?b?e.equalForKeys(k.Param.values(h.parameters(),b),d,Object.keys(b)):!0:!1:void 0},p.href=function(a,b,c){var f={lossy:!0,inherit:!0,absolute:!1,relative:p.$current};c=e.defaults(c,f);var g=q.find(a,c.relative);if(!e.isDefined(g))return null;c.inherit&&(b=d.$inherit(b||{},p.$current,g));var h=g&&c.lossy?g.navigable:g;return h&&void 0!==h.url&&null!==h.url?l.href(h.url,k.Param.values(g.parameters(),b),{absolute:c.absolute}):null},p.get=function(a,b){if(0===arguments.length)return Object.keys(o).map(function(a){return o[a].self});var c=q.find(a,b||p.$current);return c&&c.self||null},p}var n,o={},p=function(){},q=new g.StateMatcher(o),r=new g.StateBuilder(function(){return n},q,b),s=new g.StateQueueManager(o,r,a,p),t=new f.Queue,u=new f.Queue,v=new h.RejectFactory;this.decorator=c,this.state=d;var w=[];this.onInvalid=l,this.$get=m,m.$inject=["$q","$injector","$view","$stateParams","$urlRouter","$transitions"]}var e=c(3),f=c(5),g=c(12),h=c(9),i=c(15),j=c(23),k=c(36);b.$StateProvider=d},function(a,b,c){function d(a){for(var c in a)b.hasOwnProperty(c)||(b[c]=a[c])}d(c(16)),d(c(22))},function(a,b,c){var d=c(3),e=c(17),f=c(21),g=function(){function a(a,b,c){void 0===c&&(c={}),this.state=a,this.schema=a.parameters({inherit:!1});var g=function(a){return[a.id,a.value(b[a.id])]};this.values=this.schema.reduce(function(a,b){return d.applyPairs(a,g(b))},{}),this.resolves=d.extend(d.map(a.resolve,function(a,b){return new e.Resolvable(b,a)}),c);var h=function(c,d){return new f.ViewConfig({rawViewName:d,viewDeclarationObj:c,context:a,params:b})};this.views=d.values(d.map(a.views,h))}return a.prototype.parameter=function(a){return d.find(this.schema,d.propEq("id",a))},a.prototype.equals=function(a,b){var c=this;void 0===b&&(b=this.schema.map(d.prop("id")));var e=function(b){return c.parameter(b).type.equals(c.values[b],a.values[b])};return this.state===a.state&&b.map(e).reduce(d.allTrueR,!0)},a.clone=function(b,c){return void 0===c&&(c={}),new a(b.state,c.values||b.values,c.resolves||b.resolves)},a.matching=function(a,b){var c=a.reduce(function(a,c,d){return a===d&&d=k},n=e.filter(l,m),o=function(d){return d.get(c.isolateRootTo(a),b)},p=e.map(n,o);return f.trace.traceResolvePathElement(this,n,b),g.services.$q.all(p).then(e.noop)},a.prototype.invokeLater=function(a,b,c){var d=this;void 0===b&&(b={}),void 0===c&&(c={});var h=this.getResolvablesForFn(a);f.trace.tracePathElementInvoke(e.tail(this._path),a,Object.keys(h),e.extend({when:"Later"},c));var i=function(a){return a.get(d,c)},j=e.map(h,i);return g.services.$q.all(j).then(function(){try{return d.invokeNow(a,b,c)}catch(e){return g.services.$q.reject(e)}})},a.prototype.invokeNow=function(a,b,c){void 0===c&&(c={});var d=this.getResolvablesForFn(a);f.trace.tracePathElementInvoke(e.tail(this._path),a,Object.keys(d),e.extend({when:"Now "},c));var h=e.map(d,e.prop("data"));return g.services.$injector.invoke(a,null,e.extend({},b,h))},a}();b.ResolveContext=j},function(a,b){!function(a){a[a.JIT=0]="JIT",a[a.LAZY=1]="LAZY",a[a.EAGER=2]="EAGER"}(b.ResolvePolicy||(b.ResolvePolicy={}));b.ResolvePolicy},function(a,b,c){var d=c(3),e=function(){function a(a,b){this._resolveContext=a,this._state=b}return a.prototype.invokeLater=function(a,b){return this._resolveContext.invokeLater(a,b)},a.prototype.invokeNow=function(a,b){return this._resolveContext.invokeNow(null,a,b)},a.prototype.getLocals=function(a){var b=this,c=function(a){return a.get(b._resolveContext)};return d.map(this._resolveContext.getResolvablesForFn(a),c)},a}();b.ResolveInjector=e},function(a,b,c){"use strict";function d(a){void 0===a&&(a="");var b=a.split("@"),c=b[0]||"$default",d=f.isString(b[1])?b[1]:"^",e=/^(\^(?:\.\^)*)\.(.*$)/.exec(c);return e&&(d=e[1],c=e[2]),"!"===c.charAt(0)&&(c=c.substr(1),d=""),{uiViewName:c,uiViewContextAnchor:d}}function e(a,b,c,d){var e=[],h=[],i=function(a){for(var b=[],c=1;c Registering",a),h.push(a)},this.sync=function(){function a(a){return a.fqn.split(".").length}function b(a){for(var b=a.context,c=0;++c&&b.parent;)b=b.parent;return c}var c=e.map(function(a){return[a.fqn,a]}).reduce(f.applyPairs,{}),d=f.curry(function(a,b){var d=b.uiViewName.split("."),e=a.fqn.split(".");if(!angular.equals(d,e.slice(0-d.length)))return!1;var f=1-d.length||void 0,g=e.slice(0,f).join("."),h=c[g].creationContext;return b.uiViewContextAnchor===(h&&h.name)}),g=f.curry(function(a,b,c,d){return b*(a(c)-a(d))}),i=function(a){var c=h.filter(d(a));return c.length>1&&c.sort(g(b,-1)),[a,c[0]]},j=function(a){var b=a[0],c=a[1];-1!==e.indexOf(b)&&b.configUpdated(c)};e.sort(g(a,1)).map(i).forEach(j)},this.registerUiView=function(a){g.trace.traceViewServiceUiViewEvent("-> Registering",a);var b=function(b){return b.fqn===a.fqn};return e.filter(b).length&&g.trace.traceViewServiceUiViewEvent("!!!! duplicate uiView named:",a),e.push(a),this.sync(),function(){var b=e.indexOf(a);return 0>=b?void g.trace.traceViewServiceUiViewEvent("Tried removing non-registered uiView",a):(g.trace.traceViewServiceUiViewEvent("<- Deregistering",a),void f.removeFrom(e)(a))}},this.available=function(){return e.map(f.prop("fqn"))},this.active=function(){return e.filter(f.prop("$config")).map(f.prop("name"))}}var f=c(3),g=c(2),h=function(){function a(a){var b=d(a.rawViewName),c=b.uiViewName,e=b.uiViewContextAnchor,g=/^(\^(?:\.\^)*)$/;if(g.exec(e)){var h=e.split(".").reduce(function(a,b){return a.parent},a.context);e=h.name}f.extend(this,f.pick(a,"viewDeclarationObj","params","context","locals"),{uiViewName:c,uiViewContextAnchor:e}),this.controllerAs=a.viewDeclarationObj.controllerAs}return a.prototype.hasTemplate=function(){var a=this.viewDeclarationObj;return!!(a.template||a.templateUrl||a.templateProvider)},a.prototype.getTemplate=function(a,b){return a.fromConfig(this.viewDeclarationObj,this.params,b.invokeLater.bind(b))},a.prototype.getController=function(a){var b=this.viewDeclarationObj.controllerProvider;return f.isInjectable(b)?a.invokeLater(b,{}):this.viewDeclarationObj.controller},a}();b.ViewConfig=h,e.$inject=["$rootScope","$templateFactory","$q","$timeout"],angular.module("ui.router.state").service("$view",e)},function(a,b,c){var d=c(3),e=c(12),f=c(15),g=c(17),h=function(){function a(){}return a.makeTargetState=function(a){var b=d.tail(a).state;return new e.TargetState(b,b,a.map(d.prop("values")).reduce(d.mergeR,{}))},a.buildToPath=function(b,c){var d=c.params(),e=a.makeParamsNode(d),f=c.$state().path.map(e);return c.options().inherit&&(f=a.inheritParams(b,f,Object.keys(d))),f},a.inheritParams=function(a,b,c){function e(a,b){var c=d.find(a,d.propEq("state",b));return d.extend({},c&&c.values)}void 0===c&&(c=[]);var g=d.curry(function(a,b,c){var g=d.extend({},c&&c.values),h=d.pick(g,b);g=d.omit(g,b);var i=e(a,c.state)||{},j=d.extend(g,i,h);return new f.Node(c.state,j)});return b.map(g(a,c))},a.bindTransNodesToPath=function(a){var b=new g.ResolveContext(a);return a.forEach(function(a){a.resolveContext=b.isolateRootTo(a.state),a.resolveInjector=new g.ResolveInjector(a.resolveContext,a.state),a.resolves.$stateParams=new g.Resolvable("$stateParams",function(){return a.values},a.values)}),a},a.treeChanges=function(b,c,e){function g(a,b){return f.Node.clone(a,{values:c[b].values})}for(var h=0,i=Math.min(b.length,c.length),j=function(a){return a.parameters({inherit:!1}).filter(d.not(d.prop("dynamic"))).map(d.prop("id"))},k=function(a,b){return a.equals(b,j(a.state))};i>h&&b[h].state!==e&&k(b[h],c[h]);)h++;var l,m,n,o,p,q,r,s;return l=b,m=l.slice(0,h),n=l.slice(h),q=m.map(g),r=c.slice(h),s=q.concat(r),p=a.bindTransNodesToPath(s),o=p.slice(h),{from:l,to:p,retained:m,exiting:n,entering:o}},a.bindTransitionResolve=function(a,b){var c=a.to[0];c.resolves.$transition$=new g.Resolvable("$transition$",function(){return b},b)},a.makeParamsNode=d.curry(function(a,b){return new f.Node(b,a)}),a}();b.PathFactory=h},function(a,b,c){var d=c(3),e=c(24),f=c(28),g=c(29),h=c(30),i=c(39),j=c(40),k=function(){function a(a,b,c,d,e,f,g,k,l){this.transition=a,this.$transitions=b,this.$urlRouter=c,this.$view=d,this.$state=e,this.$stateParams=f,this.$q=g,this.activeTransQ=k,this.changeHistory=l,this.viewHooks=new h.ViewHooks(a,d),this.enterExitHooks=new i.EnterExitHooks(a),this.resolveHooks=new j.ResolveHooks(a),this.treeChanges=a.treeChanges(),this.registerUpdateGlobalState(),this.viewHooks.registerHooks(),this.enterExitHooks.registerHooks(),this.resolveHooks.registerHooks()}return a.prototype.runTransition=function(){var a=this;return this.activeTransQ.clear(),this.activeTransQ.enqueue(this.transition),this.transition.run().then(function(a){return a.to()})["catch"](function(b){return a.transRejected(b)})["finally"](function(){return a.activeTransQ.remove(a.transition)})},a.prototype.registerUpdateGlobalState=function(){this.transition.onFinish({},this.updateGlobalState.bind(this),{priority:-1e4})},a.prototype.updateGlobalState=function(){var a=this,b=a.treeChanges,c=a.transition,d=a.$state,e=a.changeHistory;d.$current=c.$to(),d.current=d.$current.self,e.enqueue(b),this.updateStateParams()},a.prototype.transRejected=function(a){var b=this,c=b.transition,h=b.$state,i=b.$stateParams,j=b.$q;if(a instanceof f.TransitionRejection){if(a.type===f.RejectType.IGNORED){var k=h.$current.parameters().filter(d.prop("dynamic"));return e.Param.equals(k,i,c.params())||this.updateStateParams(),h.current}if(a.type===f.RejectType.SUPERSEDED&&a.redirected&&a.detail instanceof g.TargetState)return this._redirectMgr(c.redirect(a.detail)).runTransition()}return this.$transitions.defaultErrorHandler()(a),j.reject(a)},a.prototype.updateStateParams=function(){var a=this,b=a.transition,c=a.$urlRouter,e=a.$state,f=a.$stateParams,g=b.options();e.params=b.params(),d.copy(e.params,f),f.$sync().$off(),g.location&&e.$current.navigable&&c.push(e.$current.navigable.url,f,{replace:"replace"===g.location}),c.update(!0)},a.prototype._redirectMgr=function(b){var c=this,d=c.$transitions,e=c.$urlRouter,f=c.$view,g=c.$state,h=c.$stateParams,i=c.$q,j=c.activeTransQ,k=c.changeHistory;return new a(b,d,e,f,g,h,i,j,k)},a}();b.TransitionManager=k},function(a,b,c){var d,e=c(3),f=c(4),g=c(25),h=c(26),i=c(27),j=Object.prototype.hasOwnProperty,k=function(a){return 0===["value","type","squash","array","dynamic"].filter(j.bind(a||{})).length};!function(a){a[a.PATH=0]="PATH",a[a.SEARCH=1]="SEARCH",a[a.CONFIG=2]="CONFIG"}(d||(d={}));var l=function(){function a(a,b,c,f){function j(a){return a=k(a)&&{value:a}||a,e.extend(a,{$$fn:e.isInjectable(a.value)?a.value:function(){return a.value}})}function l(b,c,e){if(b.type&&c&&"string"!==c.name)throw new Error("Param '"+a+"' has two type configurations.");return b.type&&c&&"string"===c.name&&i.paramTypes.type(b.type)?i.paramTypes.type(b.type):c?c:b.type?b.type instanceof h.Type?b.type:i.paramTypes.type(b.type):e===d.CONFIG?i.paramTypes.type("any"):i.paramTypes.type("string")}function m(){var b={array:f===d.SEARCH?"auto":!1},g=a.match(/\[\]$/)?{array:!0}:{};return e.extend(b,g,c).array}function n(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!e.isDefined(c)||null==c)return g.matcherConfig.defaultSquashPolicy();if(c===!0||e.isString(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function o(a,b,c,d){var f,g,h=[{from:"",to:c||b?void 0:""},{from:null,to:c||b?void 0:""}];return f=e.isArray(a.replace)?a.replace:[],e.isString(d)&&f.push({from:d,to:void 0}),g=e.map(f,e.prop("from")),e.filter(h,function(a){return-1===g.indexOf(a.from)}).concat(f)}c=j(c),b=l(c,b,f);var p=m();b=p?b.$asArray(p,f===d.SEARCH):b;var q=void 0!==c.value,r=c.dynamic===!0,s=n(c,q),t=o(c,p,q,s);e.extend(this,{id:a,type:b,location:f,squash:s,replace:t,isOptional:q,dynamic:r,config:c,array:p})}return a.prototype.isDefaultValue=function(a){return this.isOptional&&this.type.equals(this.value(),a)},a.prototype.value=function(a){var b=this,c=function(){if(!f.services.$injector)throw new Error("Injectable functions cannot be called at configuration time");var a=f.services.$injector.invoke(b.config.$$fn);if(null!==a&&void 0!==a&&!b.type.is(a))throw new Error("Default value ("+a+") for parameter '"+b.id+"' is not an instance of Type ("+b.type.name+")");return a},d=function(a){var c=e.map(e.filter(b.replace,e.propEq("from",a)),e.prop("to"));return c.length?c[0]:a};return a=d(a),e.isDefined(a)?this.type.$normalize(a):c()},a.prototype.isSearch=function(){return this.location===d.SEARCH},a.prototype.validates=function(a){if((!e.isDefined(a)||null===a)&&this.isOptional)return!0;var b=this.type.$normalize(a);if(!this.type.is(b))return!1;var c=this.type.encode(b);return e.isString(c)&&!this.type.pattern.exec(c)?!1:!0},a.prototype.toString=function(){return"{Param:"+this.id+" "+this.type+" squash: '"+this.squash+"' optional: "+this.isOptional+"}"},a.fromConfig=function(b,c,e){return new a(b,c,e,d.CONFIG)},a.fromPath=function(b,c,e){return new a(b,c,e,d.PATH)},a.fromSearch=function(b,c,e){return new a(b,c,e,d.SEARCH)},a.values=function(a,b){return b=b||{},a.map(function(a){return[a.id,a.value(b[a.id])]}).reduce(e.applyPairs,{})},a.equals=function(a,b,c){return b=b||{},c=c||{},-1===a.map(function(a){return a.type.equals(b[a.id],c[a.id])}).indexOf(!1)},a.validates=function(a,b){return b=b||{},-1===a.map(function(a){return a.validates(b[a.id])}).indexOf(!1)},a}();b.Param=l},function(a,b,c){var d=c(3),e=function(){function a(){this._isCaseInsensitive=!1,this._isStrictMode=!0,this._defaultSquashPolicy=!1}return a.prototype.caseInsensitive=function(a){return this._isCaseInsensitive=d.isDefined(a)?a:this._isCaseInsensitive},a.prototype.strictMode=function(a){return this._isStrictMode=d.isDefined(a)?a:this._isStrictMode},a.prototype.defaultSquashPolicy=function(a){if(d.isDefined(a)&&a!==!0&&a!==!1&&!d.isString(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return this._defaultSquashPolicy=d.isDefined(a)?a:this._defaultSquashPolicy},a}();b.matcherConfig=new e},function(a,b,c){function d(a,b){function c(a){return e.isArray(a)?a:e.isDefined(a)?[a]:[]}function d(a){switch(a.length){case 0:return void 0;case 1:return"auto"===b?a[0]:a;default:return a}}function f(a,b){return function(f){var g=c(f),h=e.map(g,a);return b===!0?0===e.filter(h,function(a){return!a}).length:d(h)}}function g(a){return function(b,d){var e=c(b),f=c(d);if(e.length!==f.length)return!1;for(var g=0;g=0));)o(i.id),this._params.push(f.Param.fromPath(i.id,i.type,this.config.paramMap(i.cfg,!1))),this._segments.push(i.segment),n.push([i.segment,e.tail(this._params)]),m=k.lastIndex;j=b.substring(m);var q=j.indexOf("?");if(q>=0){var r=j.substring(q);if(j=j.substring(0,q),r.length>0)for(m=0;h=l.exec(r);)i=p(h,!0),o(i.id),this._params.push(f.Param.fromSearch(i.id,i.type,this.config.paramMap(i.cfg,!0))),m=k.lastIndex}this._segments.push(j),e.extend(this,{_compiled:n.map(function(a){return d.apply(null,a)}).concat(d(j)),prefix:this._segments[0]}),Object.freeze(this)}return a.prototype.append=function(a){return this._children.push(a),e.forEach(a._cache,function(b,c){return a._cache[c]=e.isArray(b)?[]:null}),a._cache.path=this._cache.path.concat(this),a},a.prototype.isRoot=function(){return 0===this._cache.path.length},a.prototype.toString=function(){return this.pattern},a.prototype.exec=function(a,b,c,d){function f(a){var b=function(a){return a.split("").reverse().join("")},c=function(a){return a.replace(/\\-/g,"-")},d=b(a).split(/-(?!\\)/),f=e.map(d,b);return e.map(f,c).reverse()}var h=this;void 0===b&&(b={}),void 0===d&&(d={});var i=g(this._cache,"pattern",function(){return new RegExp(["^",e.unnest(h._cache.path.concat(h).map(e.prop("_compiled"))).join(""),h.config.strict===!1?"/?":"","$"].join(""),h.config.caseInsensitive?"i":void 0)}).exec(a);if(!i)return null;var j=this.parameters(),k=j.filter(function(a){return!a.isSearch()}),l=j.filter(function(a){return a.isSearch()}),m=this._cache.path.concat(this).map(function(a){return a._segments.length-1}).reduce(function(a,b){return a+b}),n={};if(m!==i.length-1)throw new Error("Unbalanced capture group in route '"+this.pattern+"'");for(var o=0;m>o;o++){for(var p=k[o],q=i[o+1],r=0;r=0||(h.push(d[j]),g[d[j]]=this[d[j]]);return e.extend({},g,a)},f.prototype.$set=function(a,c){var d=this,f=!1,g=!1;return c&&e.forEach(a,function(a,b){(c.parameter(b)||{}).dynamic!==!0&&(g=!0)}),g?!1:(e.forEach(a,function(a,c){a!==d[c]&&(d[c]=a,b(c),f=!0)}),this.$sync(),f)},f.prototype.$sync=function(){return e.copy(this,d),this},f.prototype.$off=function(){return c={},this},f.prototype.$raw=function(){return e.omit(this,Object.keys(this).filter(f.prototype.hasOwnProperty.bind(f.prototype)))},f.prototype.$localize=function(a,b){return new f(e.pick(b||this,Object.keys(a.params)))},f.prototype.$observe=function(b,d){return e.forEach(b.split(" "),function(a){return(c[a]||(c[a]=[])).push(d)}),a(b,d)},new f}function b(a){return a.$watch(function(){c.$digest()}),c}var c=a();this.$get=b,b.$inject=["$rootScope"]}var e=c(3),f=function(){function a(a){void 0===a&&(a={}),e.extend(this,a)}return a.prototype.$digest=function(){},a.prototype.$inherit=function(a,b,c){},a.prototype.$set=function(a,b){},a.prototype.$sync=function(){},a.prototype.$off=function(){},a.prototype.$raw=function(){},a.prototype.$localize=function(a,b){},a.prototype.$observe=function(a,b){},a}();b.StateParams=f,d.$inject=[],angular.module("ui.router.state").provider("$stateParams",d)},function(a,b,c){function d(a){function b(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function c(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function d(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return e.isDefined(d)?d:!0}function h(a){function b(a,b,c){var d=f.services.locationConfig.baseHref();return"/"===d?a:b?d.slice(0,-1)+a:c?d.slice(1)+a:a}function c(a){function b(a){var b=a(f.services.$injector,g);return b?(e.isString(b)&&(g.replace(),g.url(b)),!0):!1}if(!a||!a.defaultPrevented){var c,d=j.length;for(c=0;d>c;c++)if(b(j[c]))return;k&&b(k)}}function d(){return i=i||a.$on("$locationChangeSuccess",c)}var h=g.url();return l||d(),{sync:function(){c()},listen:function(){return d()},update:function(a){return a?void(h=g.url()):void(g.url()!==h&&(g.url(h),g.replace()))},push:function(a,b,c){g.url(a.format(b||{})),c&&c.replace&&g.replace()},href:function(a,c,d){if(!a.validates(c))return null;var e=a.format(c);d=d||{};var g=f.services.locationConfig,h=g.html5Mode();if(h||null===e||(e="#"+g.hashPrefix()+e),e=b(e,h,d.absolute),!d.absolute||!e)return e;var i=!h&&e?"/":"",j=g.port();return j=80===j||443===j?"":":"+j,[g.protocol(),"://",g.host(),j,i,e].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!e.isFunction(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(!e.isFunction(a)&&!e.isString(a))throw new Error("'rule' must be a string or function");return k=e.isString(a)?function(){return a}:a,this},this.when=function(h,i){var j,k=e.isString(i);if(e.isString(h)&&(h=a.compile(h)),!k&&!e.isFunction(i)&&!e.isArray(i))throw new Error("invalid 'handler' in when()");var l={matcher:function(b,c){return k&&(j=a.compile(c),c=["$match",j.format.bind(j)]),e.extend(function(){return d(f.services.$injector,c,b.exec(g.path(),g.search(),g.hash()))},{prefix:e.isString(b.prefix)?b.prefix:""})},regex:function(a,h){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return k&&(j=h,h=["$match",function(a){return c(j,a)}]),e.extend(function(){return d(f.services.$injector,h,a.exec(g.path()))},{prefix:b(a)})}},m={matcher:a.isMatcher(h),regex:h instanceof RegExp};for(var n in m)if(m[n])return this.rule(l[n](h,i));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){void 0===a&&(a=!0),l=a},this.$get=h,h.$inject=["$rootScope"]}var e=c(3),f=c(4),g=f.services.location;b.$UrlRouterProvider=d},function(a,b){var c=function(){function a(a){this.transition=a}return a.prototype.registerHooks=function(){this.registerOnEnterHooks(),this.registerOnRetainHooks(),this.registerOnExitHooks()},a.prototype.registerOnEnterHooks=function(){var a=this,b=function(b){return a.transition.onEnter({to:b.name},b.onEnter)};this.transition.entering().filter(function(a){return!!a.onEnter}).forEach(b)},a.prototype.registerOnRetainHooks=function(){var a=this,b=function(b){return a.transition.onRetain({},b.onRetain)};this.transition.retained().filter(function(a){return!!a.onRetain}).forEach(b)},a.prototype.registerOnExitHooks=function(){var a=this,b=function(b){return a.transition.onExit({from:b.name},b.onExit)};this.transition.exiting().filter(function(a){return!!a.onExit}).forEach(b)},a}();b.EnterExitHooks=c},function(a,b,c){var d=c(3),e=c(19),f=e.ResolvePolicy[e.ResolvePolicy.LAZY],g=e.ResolvePolicy[e.ResolvePolicy.EAGER],h=function(){function a(a){this.transition=a}return a.prototype.registerHooks=function(){function a(a){return d.tail(c.to).resolveContext.resolvePath(d.extend({transition:a},{resolvePolicy:g}))}function b(a,b){var e=d.find(c.entering,d.propEq("state",a));return e.resolveContext.resolvePathElement(e.state,d.extend({transition:b},{resolvePolicy:f}))}var c=this.transition.treeChanges();a.$inject=["$transition$"],b.$inject=["$state$","$transition$"],this.transition.onStart({},a,{priority:1e3}),this.transition.onEnter({},b,{priority:1e3})},a}();b.ResolveHooks=h},function(a,b,c){var d=c(3),e=c(36),f=function(a){if(!d.isString(a))return!1;var b="^"===a.charAt(0);return{val:b?a.substring(1):a,root:b}},g=function(){function a(a,b,c){this.matcher=b;var g=this;this.builders={parent:[function(c){return c===a()?null:b.find(g.parentName(c))||a()}],data:[function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=d.extend({},a.parent.data,a.data)),a.data}],url:[function(b){var e=b,g=f(e.url),h=b.parent,i=g?c.compile(g.val,{params:b.params||{},paramMap:function(a,b){return e.reloadOnSearch===!1&&b&&(a=d.extend(a||{},{dynamic:!0})),a}}):e.url;if(!i)return null;if(!c.isMatcher(i))throw new Error("Invalid url '"+i+"' in state '"+b+"'");return g&&g.root?i:(h&&h.navigable||a()).url.append(i)}],navigable:[function(b){ -return b!==a()&&b.url?b:b.parent?b.parent.navigable:null}],params:[function(a){var b=function(a,b){return e.Param.fromConfig(b,null,a)},c=a.url&&a.url.parameters({inherit:!1})||[],f=d.values(d.map(d.omit(a.params||{},c.map(d.prop("id"))),b));return c.concat(f).map(function(a){return[a.id,a]}).reduce(d.applyPairs,{})}],views:[function(a){var b={},c=["templateProvider","templateUrl","template","notify","async"],e=["controller","controllerProvider","controllerAs"],f=c.concat(e);return d.forEach(a.views||{$default:d.pick(a,f)},function(c,f){f=f||"$default",d.forEach(e,function(b){a[b]&&!c[b]&&(c[b]=a[b])}),Object.keys(c).length>0&&(b[f]=c)}),b}],path:[function(a){return a.parent?a.parent.path.concat(a):[a]}],includes:[function(a){var b=a.parent?d.extend({},a.parent.includes):{};return b[a.name]=!0,b}]}}return a.prototype.builder=function(a,b){var c=this.builders,e=c[a]||[];return d.isString(a)&&!d.isDefined(b)?e.length>1?e:e[0]:d.isString(a)&&d.isFunction(b)?(c[a]=e,c[a].push(b),function(){return c[a].splice(c[a].indexOf(b,1))&&null}):void 0},a.prototype.build=function(a){var b=this,c=b.matcher,e=b.builders,f=this.parentName(a);if(f&&!c.find(f))return null;for(var g in e)if(e.hasOwnProperty(g)){var h=e[g].reduce(function(a,b){return function(c){return b(c,a)}},d.noop);a[g]=h(a)}return a},a.prototype.parentName=function(a){var b=a.name||"";return-1!==b.indexOf(".")?b.substring(0,b.lastIndexOf(".")):a.parent?d.isString(a.parent)?a.parent:a.parent.name:""},a.prototype.name=function(a){var b=a.name;if(-1!==b.indexOf(".")||!a.parent)return b;var c=d.isString(a.parent)?a.parent:a.parent.name;return c?c+"."+b:b},a}();b.StateBuilder=g},function(a,b,c){function d(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function e(a){var b=a.parent().inheritedData("$uiView");return b&&b.context&&b.context.name?b.context:void 0}function f(a,b){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(c,f,g,j){var k=d(g.uiSref,a.current.name),l=null,m=e(f)||a.$current,n=null,o="A"===f.prop("tagName"),p="FORM"===f[0].nodeName,q=p?"action":"href",r=!0,s=c.$eval(g.uiSrefOpts),t={relative:m,inherit:!0},u=h.defaults(s,t,i.defaultTransOpts),v=function(b){if(b&&(l=h.copy(b)),r){n=a.href(k.state,l,u);var c=j[1]||j[0];return c&&c.$$addStateInfo(k.state,l),null===n?(r=!1,!1):void g.$set(q,n)}};k.paramExpr&&(c.$watch(k.paramExpr,function(a){a!==l&&v(a)},!0),l=h.copy(c.$eval(k.paramExpr))),v(),p||f.bind("click",function(c){var d=c.which||c.button;if(!(d>1||c.ctrlKey||c.metaKey||c.shiftKey||f.attr("target"))){var e=b(function(){a.go(k.state,l,u)});c.preventDefault();var g=o&&!n?1:0;c.preventDefault=function(){g--<=0&&b.cancel(e)}}})}}}function g(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout","$transitions",function(b,f,g,i,j){function k(b,c,d){var g=a.get(b,e(f)),h=m(b,c);t.push({state:g||{name:b},params:c,hash:h}),u[h]=d}function l(a){a.promise.then(n)}function m(a,c){if(!h.isString(a))throw new Error("state should be a string");return h.isObject(c)?a+h.toJson(c):(c=b.$eval(c),h.isObject(c)?a+h.toJson(c):a)}function n(){for(var a=0;a0||(k(a,b,v),n())},b.$on("$stateChangeSuccess",n),l.$inject=["$transition$"];var w=j.onStart({},l);b.$on("$destroy",w)}]}}var h=c(3),i=c(9);f.$inject=["$state","$timeout"],g.$inject=["$state","$stateParams","$interpolate"],angular.module("ui.router.state").directive("uiSref",f).directive("uiSrefActive",g).directive("uiSrefActiveEq",g)},function(a,b){function c(a){return function(b){return a.is(b)}}function d(a){return function(b,c,d){return a.includes(b,c,d)}}c.$inject=["$state"],b.$IsStateFilter=c,d.$inject=["$state"],b.$IncludedByStateFilter=d,angular.module("ui.router.state").filter("isState",c).filter("includedByState",d)},function(a,b,c){var d=c(2),e=function(){function a(a){d.extend(this,a)}return a.prototype.is=function(a){return this===a||this.self===a||this.fqn()===a},a.prototype.fqn=function(){if(!(this.parent&&this.parent instanceof this.constructor))return this.name;var a=this.parent.fqn();return a?a+"."+this.name:this.name},a.prototype.root=function(){return this.parent&&this.parent.root()||this},a.prototype.parameters=function(a){a=d.defaults(a,{inherit:!0});var b=a.inherit&&this.parent&&this.parent.parameters()||[];return b.concat(d.values(this.params))},a.prototype.parameter=function(a,b){return void 0===b&&(b={}),this.url&&this.url.parameter(a,b)||d.find(d.values(this.params),d.propEq("id",a))||b.inherit&&this.parent&&this.parent.parameter(a)},a.prototype.toString=function(){return this.fqn()},a}();b.State=e},function(a,b,c){var d=c(3),e=function(){function a(a){this._states=a}return a.prototype.isRelative=function(a){return a=a||"",0===a.indexOf(".")||0===a.indexOf("^")},a.prototype.find=function(a,b){if(!a&&""!==a)return void 0;var c=d.isString(a),e=c?a:a.name;this.isRelative(e)&&(e=this.resolvePath(e,b));var f=this._states[e];return!f||!c&&(c||f!==a&&f.self!==a)?void 0:f},a.prototype.resolvePath=function(a,b){if(!b)throw new Error("No reference point given for path '"+a+"'");for(var c=this.find(b),d=a.split("."),e=0,f=d.length,g=c;f>e;e++)if(""!==d[e]||0!==e){if("^"!==d[e])break;if(!g.parent)throw new Error("Path '"+a+"' not valid for state '"+c.name+"'");g=g.parent}else g=c;var h=d.slice(e).join(".");return g.name+(g.name&&h?".":"")+h},a}();b.StateMatcher=e},function(a,b,c){var d=c(3),e=c(12),f=function(){function a(a,b,c,d){this.states=a,this.builder=b,this.$urlRouterProvider=c,this.$state=d,this.autoFlush=!1,this.queue=[]}return a.prototype.register=function(a,b){var c=this,f=c.states,g=c.queue,h=c.$state,i=d.inherit(new e.State,d.extend({},a,{self:a,resolve:a.resolve||{},toString:function(){return a.name}}));if(!d.isString(i.name))throw new Error("State must have a valid name");if(f.hasOwnProperty(i.name)||-1!==d.pluck(g,"name").indexOf(i.name))throw new Error("State '"+i.name+"' is already defined");return g[b?"unshift":"push"](i),this.autoFlush&&this.flush(h),i},a.prototype.flush=function(a){for(var b,c,d,e=this,f=e.queue,g=e.states,h=e.builder,i=[],j={};f.length>0;)if(c=f.shift(),b=h.build(c),d=i.indexOf(c),b){if(g.hasOwnProperty(c.name))throw new Error("State '"+name+"' is already defined");g[c.name]=c,this.attachRoute(a,c),d>=0&&i.splice(d,1)}else{var k=j[c.name];if(j[c.name]=f.length,d>=0&&k===f.length)throw new Error("Cannot register orphaned state '"+c.name+"'");0>d&&i.push(c),f.push(c)}return g},a.prototype.attachRoute=function(a,b){var c=this.$urlRouterProvider;!b[d.abstractKey]&&b.url&&c.when(b.url,["$match","$stateParams",function(c,e){a.$current.navigable===b&&d.equalForKeys(c,e)||a.transitionTo(b,c,{inherit:!0,location:!1})}])},a}();b.StateQueueManager=f},function(a,b,c){var d=c(3),e=c(6),f=c(4),g=c(28),h=c(12),i=new g.RejectFactory,j={async:!0,rejectIfSuperseded:!0,current:d.noop,transition:null,traceData:{}},k=function(){function a(a,b,c,f){var g=this;this.fn=a,this.locals=b,this.resolveContext=c,this.options=f,this.isSuperseded=function(){return g.options.current()!==g.options.transition},this.mapHookResult=d.pattern([[this.isSuperseded,function(){return i.superseded(g.options.current())}],[d.eq(!1),d.val(i.aborted("Hook aborted transition"))],[d.is(h.TargetState),function(a){return i.redirected(a)}],[d.isPromise,function(a){return a.then(g.handleHookResult.bind(g))}]]),this.invokeStep=function(a){var b=g,c=b.options,f=b.fn,h=b.resolveContext,j=d.extend({},g.locals,a);if(e.trace.traceHookInvocation(g,c),c.rejectIfSuperseded&&g.isSuperseded())return i.superseded(c.current());if(!c.async){var k=h.invokeNow(f,j,c);return g.handleHookResult(k)}return h.invokeLater(f,j,c).then(g.handleHookResult.bind(g))},this.options=d.defaults(f,j)}return a.prototype.handleHookResult=function(a){if(!d.isDefined(a))return void 0;e.trace.traceHookResult(a,void 0,this.options);var b=this.mapHookResult(a);return b&&e.trace.traceHookResult(a,b,this.options),b},a.prototype.toString=function(){var a=this,b=a.options,c=a.fn,e=d.parse("traceData.hookType")(b)||"internal",f=d.parse("traceData.context.state.name")(b)||d.parse("traceData.context")(b)||"unknown",g=d.fnToString(c);return e+" context: "+f+", "+d.maxLength(200,g)},a.runSynchronousHooks=function(b,c,e){void 0===c&&(c={}),void 0===e&&(e=!1);for(var g=[],h=0;h2?b.enter(a,null,c).then(d):b.enter(a,null,c,d)},leave:function(a,c){angular.version.minor>2?b.leave(a).then(c):b.leave(a,c)}}}function i(a,b){return a===b}var j={context:a.rootContext()},k={count:0,restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(b,e,l){return function(b,e,m){function n(a){i(x,a)||(g.trace.traceUiViewConfigUpdated(A,a&&a.context),x=a,p(a))}function o(){q&&(g.trace.traceUiViewEvent("Removing (previous) el",A),q.remove(),q=null),s&&(g.trace.traceUiViewEvent("Destroying (previous) scope",A),s.$destroy(),s=null),r&&(g.trace.traceUiViewEvent("Animate out (previous)",A),w.leave(r,function(){q=null}),q=r,r=null)}function p(a){a=a||{};var d=b.$new();g.trace.traceUiViewScopeCreated(A,d),f.extend(A,{context:a.context,$template:a.template,$controller:a.controller,$controllerAs:a.controllerAs,$locals:a.locals});var h=l(d,function(a){w.enter(a.data("$uiView",A),e,function(){s&&s.$emit("$viewContentAnimationEnded"),(f.isDefined(v)&&!v||b.$eval(v))&&c(a)}),o()});r=h,s=d,s.$emit("$viewContentLoaded",a||x),s.$eval(u)}var q,r,s,t,u=m.onload||"",v=m.autoscroll,w=h(m,b),x=void 0,y=e.inheritedData("$uiView")||j,z=d(m.uiView||m.name||"")(b)||"$default",A={id:k.count++,name:z,fqn:y.name?y.fqn+"."+z:z,config:null,configUpdated:n,get creationContext(){return y.context}};g.trace.traceUiViewEvent("Linking",A),e.data("$uiView",A),p(),t=a.registerUiView(A),b.$on("$destroy",function(){g.trace.traceUiViewEvent("Destroying/Unregistering",A),t()})}}};return k}function e(a,b,c,d,e){return{restrict:"ECA",priority:-400,compile:function(c){var d=c.html();return function(c,e){var h=e.data("$uiView");if(h){e.html(h.$template||d),g.trace.traceUiViewFill(h,e.html());var i=a(e.contents()),j=h.$controller,k=h.$controllerAs;if(j){var l=h.$locals,m=b(j,f.extend(l,{$scope:c}));k&&(c[k]=m),e.data("$ngControllerController",m),e.children().data("$ngControllerController",m)}i(c)}}}}}var f=c(3),g=c(6);d.$inject=["$view","$animate","$uiViewScroll","$interpolate","$q"],e.$inject=["$compile","$controller","$interpolate","$injector","$q"],angular.module("ui.router.state").directive("uiView",d),angular.module("ui.router.state").directive("uiView",e)},function(a,b){function c(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){return c(function(){a[0].scrollIntoView()},0,!1)}}]}angular.module("ui.router.state").provider("$uiViewScroll",c)}])}); \ No newline at end of file +!function (a, b) { + "object" == typeof exports && "object" == typeof module ? module.exports = b() : "function" == typeof define && define.amd ? define([], b) : "object" == typeof exports ? exports["ui.router"] = b() : a["ui.router"] = b() +}(this, function () { + return function (a) { + function b(d) { + if (c[d])return c[d].exports; + var e = c[d] = {exports: {}, id: d, loaded: !1}; + return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports + } + + var c = {}; + return b.m = a, b.c = c, b.p = "", b(0) + }([function (a, b, c) { + a.exports = c(1) + }, function (a, b, c) { + var d = c(2); + b.common = d; + var e = c(36); + b.params = e; + var f = c(15); + b.path = f; + var g = c(17); + b.resolve = g; + var h = c(12); + b.state = h; + var i = c(9); + b.transition = i; + var j = c(34); + b.url = j; + var k = c(49); + b.view = k, Object.defineProperty(b, "__esModule", {value: !0}), b["default"] = "ui.router" + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(3)), d(c(4)), d(c(5)), d(c(6)) + }, function (a, b) { + function c(a) { + function b(c) { + return c.length >= d ? a.apply(null, c) : function () { + return b(c.concat([].slice.apply(arguments))) + } + } + + var c = [].slice.apply(arguments, [1]), d = a.length; + return b(c) + } + + function d() { + var a = arguments, b = a.length - 1; + return function () { + for (var c = b, d = a[b].apply(this, arguments); c--;)d = a[c].call(this, d); + return d + } + } + + function e() { + for (var a = [], b = 0; b < arguments.length; b++)a[b - 0] = arguments[b]; + return d.apply(null, [].slice.call(arguments).reverse()) + } + + function f(a, b) { + return function () { + for (var c = [], d = 0; d < arguments.length; d++)c[d - 0] = arguments[d]; + return a.apply(null, c) && b.apply(null, c) + } + } + + function g(a, b) { + return function () { + for (var c = [], d = 0; d < arguments.length; d++)c[d - 0] = arguments[d]; + return a.apply(null, c) || b.apply(null, c) + } + } + + function h(a, b) { + return function (c) { + return c[a].apply(c, b) + } + } + + function i(a) { + return function (b) { + for (var c = 0; c < a.length; c++)if (a[c][0](b))return a[c][1](b) + } + } + + function j(a) { + void 0 === a && (a = {}); + for (var b = [], c = 1; c < arguments.length; c++)b[c - 1] = arguments[c]; + var d = k.apply(null, [{}].concat(b)); + return J({}, d, o(a || {}, Object.keys(d))) + } + + function k(a) { + for (var b = [], c = 1; c < arguments.length; c++)b[c - 1] = arguments[c]; + return I(b, function (b) { + I(b, function (b, c) { + a.hasOwnProperty(c) || (a[c] = b) + }) + }), a + } + + function l(a, b) { + var c = []; + for (var d in a.path) { + if (a.path[d] !== b.path[d])break; + c.push(a.path[d]) + } + return c + } + + function m(a, b, c) { + void 0 === c && (c = Object.keys(a)); + for (var d = 0; d < c.length; d++) { + var e = c[d]; + if (a[e] != b[e])return !1 + } + return !0 + } + + function n(a, b) { + var c = {}, d = Q(arguments, 2); + for (var e in b)a(d, e) && (c[e] = b[e]); + return c + } + + function o(a) { + return n.apply(null, [R].concat(Q(arguments))) + } + + function p(a) { + return n.apply(null, [b.not(R)].concat(Q(arguments))) + } + + function q(a, c) { + return t(a, b.prop(c)) + } + + function r(a, b) { + var c = H(a), d = c ? [] : {}, e = c ? function (a) { + return d.push(a) + } : function (a, b) { + return d[b] = a + }; + return I(a, function (a, c) { + b(a, c) && e(a, c) + }), d + } + + function s(a, b) { + var c; + return I(a, function (a, d) { + c || b(a, d) && (c = a) + }), c + } + + function t(a, b) { + var c = H(a) ? [] : {}; + return I(a, function (a, d) { + return c[d] = b(a, d) + }), c + } + + function u(a, b) { + return void 0 === b && (b = "assert failure"), function (c) { + if (!a(c))throw new Error(b); + return !0 + } + } + + function v() { + for (var a = [], c = 0; c < arguments.length; c++)a[c - 0] = arguments[c]; + if (0 === a.length)return []; + var d = a.reduce(function (a, b) { + return Math.min(b.length, a) + }, 9007199254740991); + return Array.apply(null, Array(d)).map(function (c, d) { + return a.map(function (a) { + return a[d] + }).reduce(b.pushR, []) + }) + } + + function w(a, b) { + var c, d; + if (H(b) && (c = b[0], d = b[1]), !F(c))throw new Error("invalid parameters to applyPairs"); + return a[c] = d, a + } + + function x(a) { + if (H(a) && a.length) { + var c = a.slice(0, -1), d = a.slice(-1); + if (c.filter(b.not(F)).length || d.filter(b.not(D)).length)return !1 + } + return D(a) + } + + function y(a) { + var c = i([[H, function (a) { + return a.slice(-1)[0] + }], [b.val(!0), P]])(a); + return c && c.toString() || "undefined" + } + + function z(a, b) { + return b.length <= a ? b : b.substr(0, a - 3) + "..." + } + + function A(a, b) { + for (; b.length < a;)b += " "; + return b + } + + function B(a) { + return a.length && a[a.length - 1] || void 0 + } + + var C = angular.isDefined, D = angular.isFunction, E = angular.isNumber, F = angular.isString, G = angular.isObject, H = angular.isArray, I = angular.forEach, J = angular.extend, K = angular.copy, L = angular.noop, M = angular.toJson, N = angular.fromJson, O = angular.equals, P = angular.identity; + b.isDefined = C, b.isFunction = D, b.isNumber = E, b.isString = F, b.isObject = G, b.isArray = H, b.forEach = I, b.extend = J, b.copy = K, b.noop = L, b.toJson = M, b.fromJson = N, b.equals = O, b.identity = P, b.abstractKey = "abstract", b.curry = c, b.compose = d, b.pipe = e, b.prop = function (a) { + return function (b) { + return b && b[a] + } + }, b.propEq = c(function (a, b, c) { + return c && c[a] === b + }), b.parse = function (a) { + return e.apply(null, a.split(".").map(b.prop)) + }, b.not = function (a) { + return function () { + for (var b = [], c = 0; c < arguments.length; c++)b[c - 0] = arguments[c]; + return !a.apply(null, b) + } + }, b.and = f, b.or = g, b.is = function (a) { + return function (b) { + return null != b && b.constructor === a || b instanceof a + } + }, b.eq = function (a) { + return function (b) { + return a === b + } + }, b.val = function (a) { + return function () { + return a + } + }, b.invoke = h, b.pattern = i, b.inherit = function (a, b) { + return J(new (J(function () { + }, {prototype: a})), b) + }; + var Q = function (a, b) { + return void 0 === b && (b = 0), Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(a, b)) + }, R = function (a, b) { + return -1 !== a.indexOf(b) + }; + b.removeFrom = function (a) { + return function (b) { + var c = a.indexOf(b); + return c >= 0 && a.splice(c, 1), a + } + }, b.defaults = j, b.merge = k, b.mergeR = function (a, b) { + return J(a, b) + }, b.ancestors = l, b.equalForKeys = m, b.pick = o, b.omit = p, b.pluck = q, b.filter = r, b.find = s, b.map = t, b.values = function (a) { + return Object.keys(a).map(function (b) { + return a[b] + }) + }, b.allTrueR = function (a, b) { + return a && b + }, b.anyTrueR = function (a, b) { + return a || b + }, b.pushR = function (a, b) { + return a.push(b), a + }, b.unnestR = function (a, b) { + return a.concat(b) + }, b.flattenR = function (a, c) { + return H(c) ? a.concat(c.reduce(b.flattenR, [])) : b.pushR(a, c) + }, b.unnest = function (a) { + return a.reduce(b.unnestR, []) + }, b.flatten = function (a) { + return a.reduce(b.flattenR, []) + }, b.assertPredicate = u, b.pairs = function (a) { + return Object.keys(a).map(function (b) { + return [b, a[b]] + }) + }, b.arrayTuples = v, b.applyPairs = w, b.isInjectable = x, b.isNull = function (a) { + return null === a + }, b.isPromise = f(G, e(b.prop("then"), D)), b.fnToString = y, b.maxLength = z, b.padString = A, b.tail = B, angular.module("ui.router.util", ["ng", "ui.router.init"]), angular.module("ui.router.router", ["ui.router.util"]), angular.module("ui.router.state", ["ui.router.router", "ui.router.util", "ui.router.angular1"]), angular.module("ui.router", ["ui.router.init", "ui.router.state", "ui.router.angular1"]), angular.module("ui.router.compat", ["ui.router"]) + }, function (a, b) { + var c = function (a) { + return function () { + throw new Error(a + "(): No coreservices implementation for UI-Router is loaded. You should include one of: ['angular1.js']") + } + }, d = {$q: void 0, $injector: void 0, location: {}, locationConfig: {}}; + b.services = d, ["replace", "url", "path", "search", "hash"].forEach(function (a) { + return d.location[a] = c(a) + }), ["port", "protocol", "host", "baseHref", "html5Mode", "hashPrefix"].forEach(function (a) { + return d.locationConfig[a] = c(a) + }) + }, function (a, b) { + var c = function () { + function a(a) { + void 0 === a && (a = []), this._items = a + } + + return a.prototype.enqueue = function (a) { + return this._items.push(a), a + }, a.prototype.dequeue = function () { + return this.size() ? this._items.splice(0, 1)[0] : void 0 + }, a.prototype.clear = function () { + var a = this._items; + return this._items = [], a + }, a.prototype.size = function () { + return this._items.length + }, a.prototype.remove = function (a) { + var b = this._items.indexOf(a); + return b > -1 && this._items.splice(b, 1)[0] + }, a.prototype.peekTail = function () { + return this._items[this._items.length - 1] + }, a.prototype.peekHead = function () { + return this.size() ? this._items[0] : void 0 + }, a + }(); + b.Queue = c + }, function (a, b, c) { + function d(a) { + return j.is(m.TransitionRejection)(a.reason) ? a.reason.toString() : "Promise(" + JSON.stringify(a) + ")" + } + + function e(a) { + var b = j.fnToString(a), c = b.match(/^(function [^ ]+\([^)]*\))/); + return c ? c[1] : b + } + + function f(a) { + return j.isNumber(a) ? i[a] : i[i[a]] + } + + function g(a) { + var b = j.pattern([[j.not(j.isDefined), j.val("undefined")], [j.isNull, j.val("null")], [j.isPromise, d], [j.is(l.Transition), j.invoke("toString")], [j.is(k.Resolvable), j.invoke("toString")], [j.isInjectable, e], [j.val(!0), j.identity]]); + return JSON.stringify(a, function (a, c) { + return b(c) + }).replace(/\\"/g, '"') + } + + function h(a) { + a.$watch(function () { + q.approximateDigests++ + }) + } + + var i, j = c(3), k = c(7), l = c(8), m = c(28), n = function (a) { + return "ui-view id#" + a.id + ", contextual name '" + a.name + "@" + a.creationContext + "', fqn: '" + a.fqn + "'" + }, o = function (a) { + return "ViewConfig targeting ui-view: '" + a.uiViewName + "@" + a.uiViewContextAnchor + "', context: '" + a.context.name + "'" + }; + !function (a) { + a[a.RESOLVE = 0] = "RESOLVE", a[a.TRANSITION = 1] = "TRANSITION", a[a.HOOK = 2] = "HOOK", a[a.INVOKE = 3] = "INVOKE", a[a.UIVIEW = 4] = "UIVIEW", a[a.VIEWCONFIG = 5] = "VIEWCONFIG" + }(i || (i = {})); + var p = function () { + function a() { + var a = this; + this._enabled = {}, this.enable = function () { + for (var b = [], c = 0; c < arguments.length; c++)b[c - 0] = arguments[c]; + return a._set(!0, b) + }, this.disable = function () { + for (var b = [], c = 0; c < arguments.length; c++)b[c - 0] = arguments[c]; + return a._set(!1, b) + }, this.approximateDigests = 0 + } + + return a.prototype._set = function (a, b) { + var c = this; + b.length || (b = Object.keys(i).filter(function (a) { + return isNaN(parseInt(a, 10)) + }).map(function (a) { + return i[a] + })), b.map(f).forEach(function (b) { + return c._enabled[b] = a + }) + }, a.prototype.enabled = function (a) { + return !!this._enabled[f(a)] + }, a.prototype.traceTransitionStart = function (a) { + if (this.enabled(i.TRANSITION)) { + var b = a.$id, c = this.approximateDigests, d = g(a); + console.log("Transition #" + b + " Digest #" + c + ": Started -> " + d) + } + }, a.prototype.traceTransitionIgnored = function (a) { + if (this.enabled(i.TRANSITION)) { + var b = a.$id, c = this.approximateDigests, d = g(a); + console.log("Transition #" + b + " Digest #" + c + ": Ignored <> " + d) + } + }, a.prototype.traceHookInvocation = function (a, b) { + if (this.enabled(i.HOOK)) { + var c = j.parse("transition.$id")(b), d = this.approximateDigests, f = j.parse("traceData.hookType")(b) || "internal", g = j.parse("traceData.context.state.name")(b) || j.parse("traceData.context")(b) || "unknown", h = e(a.fn); + console.log("Transition #" + c + " Digest #" + d + ": Hook -> " + f + " context: " + g + ", " + j.maxLength(200, h)) + } + }, a.prototype.traceHookResult = function (a, b, c) { + if (this.enabled(i.HOOK)) { + var d = j.parse("transition.$id")(c), e = this.approximateDigests, f = g(a), h = g(b); + console.log("Transition #" + d + " Digest #" + e + ": <- Hook returned: " + j.maxLength(200, f) + ", transition result: " + j.maxLength(200, h)) + } + }, a.prototype.traceResolvePath = function (a, b) { + if (this.enabled(i.RESOLVE)) { + var c = j.parse("transition.$id")(b), d = this.approximateDigests, e = a && a.toString(), f = b && b.resolvePolicy; + console.log("Transition #" + c + " Digest #" + d + ": Resolving " + e + " (" + f + ")") + } + }, a.prototype.traceResolvePathElement = function (a, b, c) { + if (this.enabled(i.RESOLVE) && b.length) { + var d = j.parse("transition.$id")(c), e = this.approximateDigests, f = Object.keys(b).join(", "), g = a && a.toString(), h = c && c.resolvePolicy; + console.log("Transition #" + d + " Digest #" + e + ": Resolve " + g + " resolvables: [" + f + "] (" + h + ")") + } + }, a.prototype.traceResolveResolvable = function (a, b) { + if (this.enabled(i.RESOLVE)) { + var c = j.parse("transition.$id")(b), d = this.approximateDigests, e = a && a.toString(); + console.log("Transition #" + c + " Digest #" + d + ": Resolving -> " + e) + } + }, a.prototype.traceResolvableResolved = function (a, b) { + if (this.enabled(i.RESOLVE)) { + var c = j.parse("transition.$id")(b), d = this.approximateDigests, e = a && a.toString(), f = g(a.data); + console.log("Transition #" + c + " Digest #" + d + ": <- Resolved " + e + " to: " + j.maxLength(200, f)) + } + }, a.prototype.tracePathElementInvoke = function (a, b, c, d) { + if (this.enabled(i.INVOKE)) { + var f = j.parse("transition.$id")(d), g = this.approximateDigests, h = a && a.state && a.state.toString(), k = e(b); + console.log("Transition #" + f + " Digest #" + g + ": Invoke " + d.when + ": context: " + h + " " + j.maxLength(200, k)) + } + }, a.prototype.traceError = function (a, b) { + if (this.enabled(i.TRANSITION)) { + var c = b.$id, d = this.approximateDigests, e = g(b); + console.log("Transition #" + c + " Digest #" + d + ": <- Rejected " + e + ", reason: " + a) + } + }, a.prototype.traceSuccess = function (a, b) { + if (this.enabled(i.TRANSITION)) { + var c = b.$id, d = this.approximateDigests, e = a.name, f = g(b); + console.log("Transition #" + c + " Digest #" + d + ": <- Success " + f + ", final state: " + e) + } + }, a.prototype.traceUiViewEvent = function (a, b, c) { + void 0 === c && (c = ""), this.enabled(i.UIVIEW) && console.log("ui-view: " + j.padString(30, a) + " " + n(b) + c) + }, a.prototype.traceUiViewConfigUpdated = function (a, b) { + this.enabled(i.UIVIEW) && this.traceUiViewEvent("Updating", a, " with ViewConfig from context='" + b + "'") + }, a.prototype.traceUiViewScopeCreated = function (a, b) { + this.enabled(i.UIVIEW) && this.traceUiViewEvent("Created scope for", a, ", scope #" + b.$id) + }, a.prototype.traceUiViewFill = function (a, b) { + this.enabled(i.UIVIEW) && this.traceUiViewEvent("Fill", a, " with: " + j.maxLength(200, b)) + }, a.prototype.traceViewServiceEvent = function (a, b) { + this.enabled(i.VIEWCONFIG) && console.log("$view.ViewConfig: " + a + " " + o(b)) + }, a.prototype.traceViewServiceUiViewEvent = function (a, b) { + this.enabled(i.VIEWCONFIG) && console.log("$view.ViewConfig: " + a + " " + n(b)) + }, a + }(), q = new p; + b.trace = q, h.$inject = ["$rootScope"], angular.module("ui.router").run(h), angular.module("ui.router").service("$trace", function () { + return q + }) + }, function (a, b, c) { + var d = c(3), e = c(4), f = c(6), g = function () { + function a(a, b, c) { + this.promise = void 0, d.extend(this, { + name: a, + resolveFn: b, + deps: e.services.$injector.annotate(b), + data: c + }) + } + + return a.prototype.resolveResolvable = function (a, b) { + var c = this; + void 0 === b && (b = {}); + var g = this, h = g.name, i = g.deps, j = g.resolveFn; + f.trace.traceResolveResolvable(this, b); + var k = e.services.$q.defer(); + this.promise = k.promise; + var l = a.getResolvables(null, {omitOwnLocals: [h]}), m = d.pick(l, i), n = d.map(m, function (c) { + return c.get(a, b) + }); + return e.services.$q.all(n).then(function (a) { + try { + var b = e.services.$injector.invoke(j, null, a); + k.resolve(b) + } catch (d) { + k.reject(d) + } + return c.promise + }).then(function (a) { + return c.data = a, f.trace.traceResolvableResolved(c, b), c.promise + }) + }, a.prototype.get = function (a, b) { + return this.promise || this.resolveResolvable(a, b) + }, a.prototype.toString = function () { + return "Resolvable(name: " + this.name + ", requires: [" + this.deps + "])" + }, a.makeResolvables = function (b) { + var c = d.filter(b, d.not(d.isFunction)), e = Object.keys(c); + if (e.length)throw new Error("Invalid resolve key/value: " + e[0] + "/" + c[e[0]]); + return d.map(b, function (b, c) { + return new a(c, b) + }) + }, a + }(); + b.Resolvable = g + }, function (a, b, c) { + var d = c(6), e = c(4), f = c(3), g = c(9), h = c(15), i = c(12), j = c(36), k = c(17), l = 0, m = new g.RejectFactory, n = f.prop("self"), o = function () { + function a(a, b) { + var c = this; + if (this._deferred = e.services.$q.defer(), this.promise = this._deferred.promise, this.treeChanges = function () { + return c._treeChanges + }, this.isActive = function () { + return c === c._options.current() + }, !b.valid())throw new Error(b.error()); + g.HookRegistry.mixin(new g.HookRegistry, this), this._options = f.extend({current: f.val(this)}, b.options()), this.$id = l++; + var d = h.PathFactory.buildToPath(a, b); + this._treeChanges = h.PathFactory.treeChanges(a, d, this._options.reloadState), h.PathFactory.bindTransitionResolve(this._treeChanges, this) + } + + return a.prototype.$from = function () { + return f.tail(this._treeChanges.from).state + }, a.prototype.$to = function () { + return f.tail(this._treeChanges.to).state + }, a.prototype.from = function () { + return this.$from().self + }, a.prototype.to = function () { + return this.$to().self + }, a.prototype.is = function (b) { + return b instanceof a ? this.is({ + to: b.$to().name, + from: b.$from().name + }) : !(b.to && !g.matchState(this.$to(), b.to) || b.from && !g.matchState(this.$from(), b.from)) + }, a.prototype.params = function (a) { + return void 0 === a && (a = "to"), this._treeChanges[a].map(f.prop("values")).reduce(f.mergeR, {}) + }, a.prototype.resolves = function () { + return f.map(f.tail(this._treeChanges.to).resolveContext.getResolvables(), function (a) { + return a.data + }) + }, a.prototype.addResolves = function (a, b) { + void 0 === b && (b = ""); + var c = "string" == typeof b ? b : b.name, d = this._treeChanges.to, e = f.find(d, function (a) { + return a.state.name === c + }); + f.tail(d).resolveContext.addResolvables(k.Resolvable.makeResolvables(a), e.state) + }, a.prototype.previous = function () { + return this._options.previous || null + }, a.prototype.options = function () { + return this._options + }, a.prototype.entering = function () { + return f.map(this._treeChanges.entering, f.prop("state")).map(n) + }, a.prototype.exiting = function () { + return f.map(this._treeChanges.exiting, f.prop("state")).map(n).reverse() + }, a.prototype.retained = function () { + return f.map(this._treeChanges.retained, f.prop("state")).map(n) + }, a.prototype.views = function (a, b) { + void 0 === a && (a = "entering"); + var c = this._treeChanges[a]; + return b ? f.find(c, f.propEq("state", b)).views : f.unnest(c.map(f.prop("views"))) + }, a.prototype.redirect = function (b) { + var c = f.extend({}, this.options(), b.options(), {previous: this}); + b = new i.TargetState(b.identifier(), b.$state(), b.params(), c); + var d = new a(this._treeChanges.from, b), e = this.treeChanges().to, g = h.Node.matching(d.treeChanges().to, e), j = function (a, b) { + return -1 === ["$stateParams", "$transition$"].indexOf(b) + }; + return g.forEach(function (a, b) { + return f.extend(a.resolves, f.filter(e[b].resolves, j)) + }), d + }, a.prototype.ignored = function () { + var a = this._treeChanges, b = a.to, c = a.from; + if (this._options.reload || f.tail(b).state !== f.tail(c).state)return !1; + var d = b.map(function (a) { + return a.schema.filter(f.not(f.prop("dynamic"))) + }), e = [b, c].map(function (a) { + return a.map(f.prop("values")) + }), g = e[0], h = e[1], i = f.arrayTuples(d, g, h); + return i.map(function (a) { + var b = a[0], c = a[1], d = a[2]; + return j.Param.equals(b, c, d) + }).reduce(f.allTrueR, !0) + }, a.prototype.hookBuilder = function () { + return new g.HookBuilder(g.$transitions, this, {transition: this, current: this._options.current}) + }, a.prototype.run = function () { + var a = this, b = this.hookBuilder(), c = g.TransitionHook.runSynchronousHooks, f = function () { + return c(b.getOnSuccessHooks(), {}, !0) + }, h = function (a) { + return c(b.getOnErrorHooks(), {$error$: a}, !0) + }; + this.promise.then(f, h); + var i = c(b.getOnBeforeHooks()); + if (g.TransitionHook.isRejection(i)) { + var j = i.reason; + return this._deferred.reject(j), this.promise + } + if (!this.valid()) { + var k = new Error(this.error()); + return this._deferred.reject(k), this.promise + } + if (this.ignored()) { + d.trace.traceTransitionIgnored(this); + var l = m.ignored(); + return this._deferred.reject(l.reason), this.promise + } + var n = function () { + a._deferred.resolve(a), d.trace.traceSuccess(a.$to(), a) + }, o = function (b) { + return a._deferred.reject(b), d.trace.traceError(b, a), e.services.$q.reject(b) + }; + d.trace.traceTransitionStart(this); + var p = b.asyncHooks().reduce(function (a, b) { + return a.then(b.invokeStep) + }, i); + return p.then(n, o), this.promise + }, a.prototype.valid = function () { + return !this.error() + }, a.prototype.error = function () { + var a = this.$to(); + return a.self[f.abstractKey] ? "Cannot transition to abstract state '" + a.name + "'" : j.Param.validates(a.parameters(), this.params()) ? void 0 : "Param values not valid for state '" + a.name + "'" + }, a.prototype.toString = function () { + var a = this.from(), b = this.to(), c = function (a) { + return null !== a["#"] && void 0 !== a["#"] ? a : f.omit(a, "#") + }, d = this.$id, e = f.isObject(a) ? a.name : a, g = f.toJson(c(this._treeChanges.from.map(f.prop("values")).reduce(f.mergeR, {}))), h = this.valid() ? "" : "(X) ", i = f.isObject(b) ? b.name : b, j = f.toJson(c(this.params())); + return "Transition#" + d + "( '" + e + "'" + g + " -> " + h + "'" + i + "'" + j + " )" + }, a + }(); + b.Transition = o + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(10)), d(c(11)), d(c(28)), d(c(8)), d(c(47)), d(c(48)) + }, function (a, b, c) { + var d = c(3), e = c(9), f = function () { + function a(a, b, c) { + var e = this; + this.$transitions = a, this.transition = b, this.baseHookOptions = c, this.getOnBeforeHooks = function () { + return e._buildTransitionHooks("onBefore", {}, {async: !1}) + }, this.getOnStartHooks = function () { + return e._buildTransitionHooks("onStart") + }, this.getOnExitHooks = function () { + return e._buildNodeHooks("onExit", e.treeChanges.exiting.reverse(), function (a) { + return e._toFrom({from: a.state}) + }) + }, this.getOnRetainHooks = function () { + return e._buildNodeHooks("onRetain", e.treeChanges.retained, function (a) { + return e._toFrom() + }) + }, this.getOnEnterHooks = function () { + return e._buildNodeHooks("onEnter", e.treeChanges.entering, function (a) { + return e._toFrom({to: a.state}) + }) + }, this.getOnFinishHooks = function () { + return e._buildTransitionHooks("onFinish", {$treeChanges$: e.treeChanges}) + }, this.getOnSuccessHooks = function () { + return e._buildTransitionHooks("onSuccess", {}, {async: !1, rejectIfSuperseded: !1}) + }, this.getOnErrorHooks = function () { + return e._buildTransitionHooks("onError", {}, {async: !1, rejectIfSuperseded: !1}) + }, this.treeChanges = b.treeChanges(), this.toState = d.tail(this.treeChanges.to).state, this.fromState = d.tail(this.treeChanges.from).state, this.transitionOptions = b.options() + } + + return a.prototype.asyncHooks = function () { + var a = this.getOnStartHooks(), b = this.getOnExitHooks(), c = this.getOnRetainHooks(), e = this.getOnEnterHooks(), f = this.getOnFinishHooks(); + return d.flatten([a, b, c, e, f]).filter(d.identity) + }, a.prototype._toFrom = function (a) { + return d.extend({to: this.toState, from: this.fromState}, a) + }, a.prototype._buildTransitionHooks = function (a, b, c) { + var e = this; + void 0 === b && (b = {}), void 0 === c && (c = {}); + var f = this.treeChanges.to, g = d.tail(f); + c.traceData = {hookType: a, context: f}; + var h = function (a) { + return e.buildHook(g, a.callback, b, c) + }; + return this._matchingHooks(a, this._toFrom()).map(h) + }, a.prototype._buildNodeHooks = function (a, b, c, d, e) { + var f = this; + void 0 === d && (d = {}), void 0 === e && (e = {}); + var g = function (b) { + var g = c(b); + e.traceData = {hookType: a, context: b}, d.$state$ = b.state; + var h = function (a) { + return f.buildHook(b, a.callback, d, e) + }; + return f._matchingHooks(a, g).map(h) + }; + return b.map(g) + }, a.prototype.buildHook = function (a, b, c, f) { + void 0 === f && (f = {}); + var g = d.extend({}, this.baseHookOptions, f); + return new e.TransitionHook(b, d.extend({}, c), a.resolveContext, g) + }, a.prototype._matchingHooks = function (a, b) { + var c = function (a) { + return a.matches(b.to, b.from) + }, e = function (a, b) { + return b.priority - a.priority + }; + return [this.transition, this.$transitions].map(function (b) { + return b.getHooks(a) + }).filter(d.assertPredicate(d.isArray, "broken event named: " + a)).reduce(d.unnestR).filter(c).sort(e) + }, a + }(); + b.HookBuilder = f + }, function (a, b, c) { + function d(a, b) { + function c(a) { + for (var b = 0; b < d.length; b++) { + var c = g.Glob.fromString(d[b]); + if (c && c.matches(a.name) || !c && d[b] === a.name)return !0 + } + return !1 + } + + var d = f.isString(b) ? [b] : b, e = f.isFunction(d) ? d : c; + return !!e(a) + } + + function e(a, b) { + return function (c, d, e) { + void 0 === e && (e = {}); + var g = new h(c, d, e); + return a[b].push(g), function () { + f.removeFrom(a[b])(g) + } + } + } + + var f = c(3), g = c(12); + b.matchState = d; + var h = function () { + function a(a, b, c) { + void 0 === c && (c = {}), this.callback = b, this.matchCriteria = f.extend({ + to: f.val(!0), + from: f.val(!0) + }, a), this.priority = c.priority || 0 + } + + return a.prototype.matches = function (a, b) { + return d(a, this.matchCriteria.to) && d(b, this.matchCriteria.from) + }, a + }(); + b.EventHook = h; + var i = function () { + function a() { + var a = this; + this._transitionEvents = { + onBefore: [], + onStart: [], + onEnter: [], + onRetain: [], + onExit: [], + onFinish: [], + onSuccess: [], + onError: [] + }, this.getHooks = function (b) { + return a._transitionEvents[b] + }, this.onBefore = e(this._transitionEvents, "onBefore"), this.onStart = e(this._transitionEvents, "onStart"), this.onEnter = e(this._transitionEvents, "onEnter"), this.onRetain = e(this._transitionEvents, "onRetain"), this.onExit = e(this._transitionEvents, "onExit"), this.onFinish = e(this._transitionEvents, "onFinish"), this.onSuccess = e(this._transitionEvents, "onSuccess"), this.onError = e(this._transitionEvents, "onError") + } + + return a.mixin = function (a, b) { + Object.keys(a._transitionEvents).concat(["getHooks"]).forEach(function (c) { + return b[c] = a[c] + }) + }, a + }(); + b.HookRegistry = i + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(13)), d(c(14)), d(c(41)), d(c(42)), d(c(43)), d(c(23)), d(c(44)), d(c(45)), d(c(46)), d(c(29)) + }, function (a, b) { + var c = function () { + function a(a) { + this.text = a, this.glob = a.split(".") + } + + return a.prototype.matches = function (a) { + for (var b = a.split("."), c = 0, d = this.glob.length; d > c; c++)"*" === this.glob[c] && (b[c] = "*"); + return "**" === this.glob[0] && (b = b.slice(b.indexOf(this.glob[1])), b.unshift("**")), "**" === this.glob[this.glob.length - 1] && (b.splice(b.indexOf(this.glob[this.glob.length - 2]) + 1, Number.MAX_VALUE), b.push("**")), this.glob.length != b.length ? !1 : b.join("") === this.glob.join("") + }, a.is = function (a) { + return a.indexOf("*") > -1 + }, a.fromString = function (b) { + return this.is(b) ? new a(b) : null + }, a + }(); + b.Glob = c + }, function (a, b, c) { + function d(a, b) { + function c(a, b) { + return r.builder(a, b) || this + } + + function d(a, b) { + return e.isObject(a) ? b = a : b.name = a, s.register(b), this + } + + function l(a) { + w.push(a) + } + + function m(a, b, c, d, l, m) { + function r(c, d) { + function e(a) { + if (a instanceof g.TargetState) { + var b = a; + return b = p.target(b.identifier(), b.params(), b.options()), b.valid() ? j() !== k ? v.superseded() : p.transitionTo(b.identifier(), b.params(), b.options()) : v.invalid(b.error()) + } + } + + function h() { + var a = m.dequeue(); + return void 0 === a ? v.invalid(d.error()) : n(a).then(e).then(function (a) { + return a || h() + }) + } + + var j = function () { + return t.peekTail() || u.peekTail() + }, k = j(), l = i.PathFactory.makeTargetState(c), m = new f.Queue([].concat(w)), n = function (c) { + return a.when(b.invoke(c, null, {$to$: d, $from$: l})) + }; + return h() + } + + var x = m, y = { + name: "", + url: "^", + views: null, + params: {"#": {value: null, type: "hash"}}, + "abstract": !0 + }; + n = s.register(y, !0), n.navigable = null; + var z = function () { + return i.PathFactory.bindTransNodesToPath([new i.Node(n, {})]) + }; + return c.rootContext(n), e.extend(p, { + params: new k.StateParams, + current: n.self, + $current: n, + transition: null + }), s.flush(p), s.autoFlush = !0, p.reload = function (a) { + return p.transitionTo(p.current, d, {reload: e.isDefined(a) ? a : !0, inherit: !1, notify: !1}) + }, p.go = function (a, b, c) { + var d = {relative: p.$current, inherit: !0}, f = e.defaults(c, d, h.defaultTransOpts); + return p.transitionTo(a, b, f) + }, p.target = function (a, b, c) { + void 0 === c && (c = {}); + var d = q.find(a, c.relative); + return new g.TargetState(a, d, b, c) + }, p.transitionTo = function (b, f, g) { + if (void 0 === f && (f = {}), void 0 === g && (g = {}), g = e.defaults(g, h.defaultTransOpts), g = e.extend(g, {current: t.peekTail.bind(t)}), e.isObject(g.reload) && !g.reload.name)throw new Error("Invalid reload state object"); + if (g.reloadState = g.reload === !0 ? p.$current.path[0] : q.find(g.reload, g.relative), g.reload && !g.reloadState)throw new Error("No such reload state '" + (e.isString(g.reload) ? g.reload : g.reload.name) + "'"); + var i = p.target(b, f, g), k = u.peekTail(), m = k ? k.to : z(); + if (!i.exists())return r(m, i); + if (!i.valid())return a.reject(i.error()); + var n = x.create(m, i), o = new j.TransitionManager(n, x, l, c, p, d, a, t, u), s = o.runTransition(); + return e.extend(s, {transition: n}) + }, p.is = function (a, b, c) { + c = e.defaults(c, {relative: p.$current}); + var f = q.find(a, c.relative); + return e.isDefined(f) ? p.$current !== f ? !1 : e.isDefined(b) && null !== b ? k.Param.equals(f.parameters(), d, b) : !0 : void 0 + }, p.includes = function (a, b, c) { + c = e.defaults(c, {relative: p.$current}); + var f = e.isString(a) && g.Glob.fromString(a); + if (f) { + if (!f.matches(p.$current.name))return !1; + a = p.$current.name + } + var h = q.find(a, c.relative), i = p.$current.includes; + return e.isDefined(h) ? e.isDefined(i[h.name]) ? b ? e.equalForKeys(k.Param.values(h.parameters(), b), d, Object.keys(b)) : !0 : !1 : void 0 + }, p.href = function (a, b, c) { + var f = {lossy: !0, inherit: !0, absolute: !1, relative: p.$current}; + c = e.defaults(c, f); + var g = q.find(a, c.relative); + if (!e.isDefined(g))return null; + c.inherit && (b = d.$inherit(b || {}, p.$current, g)); + var h = g && c.lossy ? g.navigable : g; + return h && void 0 !== h.url && null !== h.url ? l.href(h.url, k.Param.values(g.parameters(), b), {absolute: c.absolute}) : null + }, p.get = function (a, b) { + if (0 === arguments.length)return Object.keys(o).map(function (a) { + return o[a].self + }); + var c = q.find(a, b || p.$current); + return c && c.self || null + }, p + } + + var n, o = {}, p = function () { + }, q = new g.StateMatcher(o), r = new g.StateBuilder(function () { + return n + }, q, b), s = new g.StateQueueManager(o, r, a, p), t = new f.Queue, u = new f.Queue, v = new h.RejectFactory; + this.decorator = c, this.state = d; + var w = []; + this.onInvalid = l, this.$get = m, m.$inject = ["$q", "$injector", "$view", "$stateParams", "$urlRouter", "$transitions"] + } + + var e = c(3), f = c(5), g = c(12), h = c(9), i = c(15), j = c(23), k = c(36); + b.$StateProvider = d + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(16)), d(c(22)) + }, function (a, b, c) { + var d = c(3), e = c(17), f = c(21), g = function () { + function a(a, b, c) { + void 0 === c && (c = {}), this.state = a, this.schema = a.parameters({inherit: !1}); + var g = function (a) { + return [a.id, a.value(b[a.id])] + }; + this.values = this.schema.reduce(function (a, b) { + return d.applyPairs(a, g(b)) + }, {}), this.resolves = d.extend(d.map(a.resolve, function (a, b) { + return new e.Resolvable(b, a) + }), c); + var h = function (c, d) { + return new f.ViewConfig({rawViewName: d, viewDeclarationObj: c, context: a, params: b}) + }; + this.views = d.values(d.map(a.views, h)) + } + + return a.prototype.parameter = function (a) { + return d.find(this.schema, d.propEq("id", a)) + }, a.prototype.equals = function (a, b) { + var c = this; + void 0 === b && (b = this.schema.map(d.prop("id"))); + var e = function (b) { + return c.parameter(b).type.equals(c.values[b], a.values[b]) + }; + return this.state === a.state && b.map(e).reduce(d.allTrueR, !0) + }, a.clone = function (b, c) { + return void 0 === c && (c = {}), new a(b.state, c.values || b.values, c.resolves || b.resolves) + }, a.matching = function (a, b) { + var c = a.reduce(function (a, c, d) { + return a === d && d < b.length && c.state === b[d].state ? d + 1 : a + }, 0); + return a.slice(0, c) + }, a + }(); + b.Node = g + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(7)), d(c(18)), d(c(20)) + }, function (a, b, c) { + function d(a, b) { + var c = e.isString(a) ? a : null, d = e.isObject(a) ? a : {}, f = d[b.name] || c || i; + return h.ResolvePolicy[f] + } + + var e = c(3), f = c(6), g = c(4), h = c(19), i = h.ResolvePolicy[h.ResolvePolicy.LAZY], j = function () { + function a(a) { + this._path = a, e.extend(this, { + _nodeFor: function (a) { + return e.find(this._path, e.propEq("state", a)) + }, _pathTo: function (a) { + var b = this._nodeFor(a), c = this._path.indexOf(b); + if (-1 === c)throw new Error("This path does not contain the state"); + return this._path.slice(0, c + 1) + } + }) + } + + return a.prototype.getResolvables = function (a, b) { + b = e.defaults(b, {omitOwnLocals: []}); + var c = (e.find(this._path, e.propEq("")), a ? this._pathTo(a) : this._path), d = e.tail(c); + return c.reduce(function (a, c) { + var f = c === d ? b.omitOwnLocals : [], g = e.omit(c.resolves, f); + return e.extend(a, g) + }, {}) + }, a.prototype.getResolvablesForFn = function (a) { + var b = g.services.$injector.annotate(a); + return e.pick(this.getResolvables(), b) + }, a.prototype.isolateRootTo = function (b) { + return new a(this._pathTo(b)) + }, a.prototype.addResolvables = function (a, b) { + e.extend(this._nodeFor(b).resolves, a) + }, a.prototype.getOwnResolvables = function (a) { + return e.extend({}, this._nodeFor(a).resolves) + }, a.prototype.resolvePath = function (a) { + var b = this; + void 0 === a && (a = {}), f.trace.traceResolvePath(this._path, a); + var c = function (c) { + return b.resolvePathElement(c.state, a) + }; + return g.services.$q.all(e.map(this._path, c)).then(e.noop) + }, a.prototype.resolvePathElement = function (a, b) { + var c = this; + void 0 === b && (b = {}); + var j = b && b.resolvePolicy, k = h.ResolvePolicy[j || i], l = this.getOwnResolvables(a), m = function (b) { + return d(a.resolvePolicy, b) >= k + }, n = e.filter(l, m), o = function (d) { + return d.get(c.isolateRootTo(a), b) + }, p = e.map(n, o); + return f.trace.traceResolvePathElement(this, n, b), g.services.$q.all(p).then(e.noop) + }, a.prototype.invokeLater = function (a, b, c) { + var d = this; + void 0 === b && (b = {}), void 0 === c && (c = {}); + var h = this.getResolvablesForFn(a); + f.trace.tracePathElementInvoke(e.tail(this._path), a, Object.keys(h), e.extend({when: "Later"}, c)); + var i = function (a) { + return a.get(d, c) + }, j = e.map(h, i); + return g.services.$q.all(j).then(function () { + try { + return d.invokeNow(a, b, c) + } catch (e) { + return g.services.$q.reject(e) + } + }) + }, a.prototype.invokeNow = function (a, b, c) { + void 0 === c && (c = {}); + var d = this.getResolvablesForFn(a); + f.trace.tracePathElementInvoke(e.tail(this._path), a, Object.keys(d), e.extend({when: "Now "}, c)); + var h = e.map(d, e.prop("data")); + return g.services.$injector.invoke(a, null, e.extend({}, b, h)) + }, a + }(); + b.ResolveContext = j + }, function (a, b) { + !function (a) { + a[a.JIT = 0] = "JIT", a[a.LAZY = 1] = "LAZY", a[a.EAGER = 2] = "EAGER" + }(b.ResolvePolicy || (b.ResolvePolicy = {})); + b.ResolvePolicy + }, function (a, b, c) { + var d = c(3), e = function () { + function a(a, b) { + this._resolveContext = a, this._state = b + } + + return a.prototype.invokeLater = function (a, b) { + return this._resolveContext.invokeLater(a, b) + }, a.prototype.invokeNow = function (a, b) { + return this._resolveContext.invokeNow(null, a, b) + }, a.prototype.getLocals = function (a) { + var b = this, c = function (a) { + return a.get(b._resolveContext) + }; + return d.map(this._resolveContext.getResolvablesForFn(a), c) + }, a + }(); + b.ResolveInjector = e + }, function (a, b, c) { + "use strict"; + function d(a) { + void 0 === a && (a = ""); + var b = a.split("@"), c = b[0] || "$default", d = f.isString(b[1]) ? b[1] : "^", e = /^(\^(?:\.\^)*)\.(.*$)/.exec(c); + return e && (d = e[1], c = e[2]), "!" === c.charAt(0) && (c = c.substr(1), d = ""), { + uiViewName: c, + uiViewContextAnchor: d + } + } + + function e(a, b, c, d) { + var e = [], h = [], i = function (a) { + for (var b = [], c = 1; c < arguments.length; c++)b[c - 1] = arguments[c]; + return function (c) { + return b.reduce(function (b, d) { + return b && a[d] === c[d] + }, !0) + } + }; + this.rootContext = function (a) { + return a ? this._rootContext = a : this._rootContext + }, this.load = function (a, d) { + if (!a.hasTemplate())throw new Error("No template configuration specified for '" + a.uiViewName + "@" + a.uiViewContextAnchor + "'"); + var e = {template: c.when(a.getTemplate(b, d)), controller: c.when(a.getController(d))}; + return c.all(e).then(function (b) { + return g.trace.traceViewServiceEvent("Loaded", a), f.extend(a, b) + }) + }, this.reset = function (a) { + g.trace.traceViewServiceEvent("<- Removing", a), h.filter(i(a, "uiViewName", "context")).forEach(f.removeFrom(h)) + }, this.registerStateViewConfig = function (a) { + g.trace.traceViewServiceEvent("-> Registering", a), h.push(a) + }, this.sync = function () { + function a(a) { + return a.fqn.split(".").length + } + + function b(a) { + for (var b = a.context, c = 0; ++c && b.parent;)b = b.parent; + return c + } + + var c = e.map(function (a) { + return [a.fqn, a] + }).reduce(f.applyPairs, {}), d = f.curry(function (a, b) { + var d = b.uiViewName.split("."), e = a.fqn.split("."); + if (!angular.equals(d, e.slice(0 - d.length)))return !1; + var f = 1 - d.length || void 0, g = e.slice(0, f).join("."), h = c[g].creationContext; + return b.uiViewContextAnchor === (h && h.name) + }), g = f.curry(function (a, b, c, d) { + return b * (a(c) - a(d)) + }), i = function (a) { + var c = h.filter(d(a)); + return c.length > 1 && c.sort(g(b, -1)), [a, c[0]] + }, j = function (a) { + var b = a[0], c = a[1]; + -1 !== e.indexOf(b) && b.configUpdated(c) + }; + e.sort(g(a, 1)).map(i).forEach(j) + }, this.registerUiView = function (a) { + g.trace.traceViewServiceUiViewEvent("-> Registering", a); + var b = function (b) { + return b.fqn === a.fqn + }; + return e.filter(b).length && g.trace.traceViewServiceUiViewEvent("!!!! duplicate uiView named:", a), e.push(a), this.sync(), function () { + var b = e.indexOf(a); + return 0 >= b ? void g.trace.traceViewServiceUiViewEvent("Tried removing non-registered uiView", a) : (g.trace.traceViewServiceUiViewEvent("<- Deregistering", a), void f.removeFrom(e)(a)) + } + }, this.available = function () { + return e.map(f.prop("fqn")) + }, this.active = function () { + return e.filter(f.prop("$config")).map(f.prop("name")) + } + } + + var f = c(3), g = c(2), h = function () { + function a(a) { + var b = d(a.rawViewName), c = b.uiViewName, e = b.uiViewContextAnchor, g = /^(\^(?:\.\^)*)$/; + if (g.exec(e)) { + var h = e.split(".").reduce(function (a, b) { + return a.parent + }, a.context); + e = h.name + } + f.extend(this, f.pick(a, "viewDeclarationObj", "params", "context", "locals"), { + uiViewName: c, + uiViewContextAnchor: e + }), this.controllerAs = a.viewDeclarationObj.controllerAs + } + + return a.prototype.hasTemplate = function () { + var a = this.viewDeclarationObj; + return !!(a.template || a.templateUrl || a.templateProvider) + }, a.prototype.getTemplate = function (a, b) { + return a.fromConfig(this.viewDeclarationObj, this.params, b.invokeLater.bind(b)) + }, a.prototype.getController = function (a) { + var b = this.viewDeclarationObj.controllerProvider; + return f.isInjectable(b) ? a.invokeLater(b, {}) : this.viewDeclarationObj.controller + }, a + }(); + b.ViewConfig = h, e.$inject = ["$rootScope", "$templateFactory", "$q", "$timeout"], angular.module("ui.router.state").service("$view", e) + }, function (a, b, c) { + var d = c(3), e = c(12), f = c(15), g = c(17), h = function () { + function a() { + } + + return a.makeTargetState = function (a) { + var b = d.tail(a).state; + return new e.TargetState(b, b, a.map(d.prop("values")).reduce(d.mergeR, {})) + }, a.buildToPath = function (b, c) { + var d = c.params(), e = a.makeParamsNode(d), f = c.$state().path.map(e); + return c.options().inherit && (f = a.inheritParams(b, f, Object.keys(d))), f + }, a.inheritParams = function (a, b, c) { + function e(a, b) { + var c = d.find(a, d.propEq("state", b)); + return d.extend({}, c && c.values) + } + + void 0 === c && (c = []); + var g = d.curry(function (a, b, c) { + var g = d.extend({}, c && c.values), h = d.pick(g, b); + g = d.omit(g, b); + var i = e(a, c.state) || {}, j = d.extend(g, i, h); + return new f.Node(c.state, j) + }); + return b.map(g(a, c)) + }, a.bindTransNodesToPath = function (a) { + var b = new g.ResolveContext(a); + return a.forEach(function (a) { + a.resolveContext = b.isolateRootTo(a.state), a.resolveInjector = new g.ResolveInjector(a.resolveContext, a.state), a.resolves.$stateParams = new g.Resolvable("$stateParams", function () { + return a.values + }, a.values) + }), a + }, a.treeChanges = function (b, c, e) { + function g(a, b) { + return f.Node.clone(a, {values: c[b].values}) + } + + for (var h = 0, i = Math.min(b.length, c.length), j = function (a) { + return a.parameters({inherit: !1}).filter(d.not(d.prop("dynamic"))).map(d.prop("id")) + }, k = function (a, b) { + return a.equals(b, j(a.state)) + }; i > h && b[h].state !== e && k(b[h], c[h]);)h++; + var l, m, n, o, p, q, r, s; + return l = b, m = l.slice(0, h), n = l.slice(h), q = m.map(g), r = c.slice(h), s = q.concat(r), p = a.bindTransNodesToPath(s), o = p.slice(h), { + from: l, + to: p, + retained: m, + exiting: n, + entering: o + } + }, a.bindTransitionResolve = function (a, b) { + var c = a.to[0]; + c.resolves.$transition$ = new g.Resolvable("$transition$", function () { + return b + }, b) + }, a.makeParamsNode = d.curry(function (a, b) { + return new f.Node(b, a) + }), a + }(); + b.PathFactory = h + }, function (a, b, c) { + var d = c(3), e = c(24), f = c(28), g = c(29), h = c(30), i = c(39), j = c(40), k = function () { + function a(a, b, c, d, e, f, g, k, l) { + this.transition = a, this.$transitions = b, this.$urlRouter = c, this.$view = d, this.$state = e, this.$stateParams = f, this.$q = g, this.activeTransQ = k, this.changeHistory = l, this.viewHooks = new h.ViewHooks(a, d), this.enterExitHooks = new i.EnterExitHooks(a), this.resolveHooks = new j.ResolveHooks(a), this.treeChanges = a.treeChanges(), this.registerUpdateGlobalState(), this.viewHooks.registerHooks(), this.enterExitHooks.registerHooks(), this.resolveHooks.registerHooks() + } + + return a.prototype.runTransition = function () { + var a = this; + return this.activeTransQ.clear(), this.activeTransQ.enqueue(this.transition), this.transition.run().then(function (a) { + return a.to() + })["catch"](function (b) { + return a.transRejected(b) + })["finally"](function () { + return a.activeTransQ.remove(a.transition) + }) + }, a.prototype.registerUpdateGlobalState = function () { + this.transition.onFinish({}, this.updateGlobalState.bind(this), {priority: -1e4}) + }, a.prototype.updateGlobalState = function () { + var a = this, b = a.treeChanges, c = a.transition, d = a.$state, e = a.changeHistory; + d.$current = c.$to(), d.current = d.$current.self, e.enqueue(b), this.updateStateParams() + }, a.prototype.transRejected = function (a) { + var b = this, c = b.transition, h = b.$state, i = b.$stateParams, j = b.$q; + if (a instanceof f.TransitionRejection) { + if (a.type === f.RejectType.IGNORED) { + var k = h.$current.parameters().filter(d.prop("dynamic")); + return e.Param.equals(k, i, c.params()) || this.updateStateParams(), h.current + } + if (a.type === f.RejectType.SUPERSEDED && a.redirected && a.detail instanceof g.TargetState)return this._redirectMgr(c.redirect(a.detail)).runTransition() + } + return this.$transitions.defaultErrorHandler()(a), j.reject(a) + }, a.prototype.updateStateParams = function () { + var a = this, b = a.transition, c = a.$urlRouter, e = a.$state, f = a.$stateParams, g = b.options(); + e.params = b.params(), d.copy(e.params, f), f.$sync().$off(), g.location && e.$current.navigable && c.push(e.$current.navigable.url, f, {replace: "replace" === g.location}), c.update(!0) + }, a.prototype._redirectMgr = function (b) { + var c = this, d = c.$transitions, e = c.$urlRouter, f = c.$view, g = c.$state, h = c.$stateParams, i = c.$q, j = c.activeTransQ, k = c.changeHistory; + return new a(b, d, e, f, g, h, i, j, k) + }, a + }(); + b.TransitionManager = k + }, function (a, b, c) { + var d, e = c(3), f = c(4), g = c(25), h = c(26), i = c(27), j = Object.prototype.hasOwnProperty, k = function (a) { + return 0 === ["value", "type", "squash", "array", "dynamic"].filter(j.bind(a || {})).length + }; + !function (a) { + a[a.PATH = 0] = "PATH", a[a.SEARCH = 1] = "SEARCH", a[a.CONFIG = 2] = "CONFIG" + }(d || (d = {})); + var l = function () { + function a(a, b, c, f) { + function j(a) { + return a = k(a) && {value: a} || a, e.extend(a, { + $$fn: e.isInjectable(a.value) ? a.value : function () { + return a.value + } + }) + } + + function l(b, c, e) { + if (b.type && c && "string" !== c.name)throw new Error("Param '" + a + "' has two type configurations."); + return b.type && c && "string" === c.name && i.paramTypes.type(b.type) ? i.paramTypes.type(b.type) : c ? c : b.type ? b.type instanceof h.Type ? b.type : i.paramTypes.type(b.type) : e === d.CONFIG ? i.paramTypes.type("any") : i.paramTypes.type("string") + } + + function m() { + var b = {array: f === d.SEARCH ? "auto" : !1}, g = a.match(/\[\]$/) ? {array: !0} : {}; + return e.extend(b, g, c).array + } + + function n(a, b) { + var c = a.squash; + if (!b || c === !1)return !1; + if (!e.isDefined(c) || null == c)return g.matcherConfig.defaultSquashPolicy(); + if (c === !0 || e.isString(c))return c; + throw new Error("Invalid squash policy: '" + c + "'. Valid policies: false, true, or arbitrary string") + } + + function o(a, b, c, d) { + var f, g, h = [{from: "", to: c || b ? void 0 : ""}, {from: null, to: c || b ? void 0 : ""}]; + return f = e.isArray(a.replace) ? a.replace : [], e.isString(d) && f.push({ + from: d, + to: void 0 + }), g = e.map(f, e.prop("from")), e.filter(h, function (a) { + return -1 === g.indexOf(a.from) + }).concat(f) + } + + c = j(c), b = l(c, b, f); + var p = m(); + b = p ? b.$asArray(p, f === d.SEARCH) : b; + var q = void 0 !== c.value, r = c.dynamic === !0, s = n(c, q), t = o(c, p, q, s); + e.extend(this, { + id: a, + type: b, + location: f, + squash: s, + replace: t, + isOptional: q, + dynamic: r, + config: c, + array: p + }) + } + + return a.prototype.isDefaultValue = function (a) { + return this.isOptional && this.type.equals(this.value(), a) + }, a.prototype.value = function (a) { + var b = this, c = function () { + if (!f.services.$injector)throw new Error("Injectable functions cannot be called at configuration time"); + var a = f.services.$injector.invoke(b.config.$$fn); + if (null !== a && void 0 !== a && !b.type.is(a))throw new Error("Default value (" + a + ") for parameter '" + b.id + "' is not an instance of Type (" + b.type.name + ")"); + return a + }, d = function (a) { + var c = e.map(e.filter(b.replace, e.propEq("from", a)), e.prop("to")); + return c.length ? c[0] : a + }; + return a = d(a), e.isDefined(a) ? this.type.$normalize(a) : c() + }, a.prototype.isSearch = function () { + return this.location === d.SEARCH + }, a.prototype.validates = function (a) { + if ((!e.isDefined(a) || null === a) && this.isOptional)return !0; + var b = this.type.$normalize(a); + if (!this.type.is(b))return !1; + var c = this.type.encode(b); + return e.isString(c) && !this.type.pattern.exec(c) ? !1 : !0 + }, a.prototype.toString = function () { + return "{Param:" + this.id + " " + this.type + " squash: '" + this.squash + "' optional: " + this.isOptional + "}" + }, a.fromConfig = function (b, c, e) { + return new a(b, c, e, d.CONFIG) + }, a.fromPath = function (b, c, e) { + return new a(b, c, e, d.PATH) + }, a.fromSearch = function (b, c, e) { + return new a(b, c, e, d.SEARCH) + }, a.values = function (a, b) { + return b = b || {}, a.map(function (a) { + return [a.id, a.value(b[a.id])] + }).reduce(e.applyPairs, {}) + }, a.equals = function (a, b, c) { + return b = b || {}, c = c || {}, -1 === a.map(function (a) { + return a.type.equals(b[a.id], c[a.id]) + }).indexOf(!1) + }, a.validates = function (a, b) { + return b = b || {}, -1 === a.map(function (a) { + return a.validates(b[a.id]) + }).indexOf(!1) + }, a + }(); + b.Param = l + }, function (a, b, c) { + var d = c(3), e = function () { + function a() { + this._isCaseInsensitive = !1, this._isStrictMode = !0, this._defaultSquashPolicy = !1 + } + + return a.prototype.caseInsensitive = function (a) { + return this._isCaseInsensitive = d.isDefined(a) ? a : this._isCaseInsensitive + }, a.prototype.strictMode = function (a) { + return this._isStrictMode = d.isDefined(a) ? a : this._isStrictMode + }, a.prototype.defaultSquashPolicy = function (a) { + if (d.isDefined(a) && a !== !0 && a !== !1 && !d.isString(a))throw new Error("Invalid squash policy: " + a + ". Valid policies: false, true, arbitrary-string"); + return this._defaultSquashPolicy = d.isDefined(a) ? a : this._defaultSquashPolicy + }, a + }(); + b.matcherConfig = new e + }, function (a, b, c) { + function d(a, b) { + function c(a) { + return e.isArray(a) ? a : e.isDefined(a) ? [a] : [] + } + + function d(a) { + switch (a.length) { + case 0: + return void 0; + case 1: + return "auto" === b ? a[0] : a; + default: + return a + } + } + + function f(a, b) { + return function (f) { + var g = c(f), h = e.map(g, a); + return b === !0 ? 0 === e.filter(h, function (a) { + return !a + }).length : d(h) + } + } + + function g(a) { + return function (b, d) { + var e = c(b), f = c(d); + if (e.length !== f.length)return !1; + for (var g = 0; g < e.length; g++)if (!a(e[g], f[g]))return !1; + return !0 + } + } + + var h = this; + ["encode", "decode", "equals", "$normalize"].map(function (b) { + h[b] = ("equals" === b ? g : f)(a[b].bind(a)) + }), e.extend(this, {name: a.name, pattern: a.pattern, is: f(a.is.bind(a), !0), $arrayMode: b}) + } + + var e = c(3), f = function () { + function a(a) { + this.pattern = /.*/, e.extend(this, a) + } + + return a.prototype.is = function (a, b) { + return !0 + }, a.prototype.encode = function (a, b) { + return a + }, a.prototype.decode = function (a, b) { + return a + }, a.prototype.equals = function (a, b) { + return a == b + }, a.prototype.$subPattern = function () { + var a = this.pattern.toString(); + return a.substr(1, a.length - 2) + }, a.prototype.toString = function () { + return "{Type:" + this.name + "}" + }, a.prototype.$normalize = function (a) { + return this.is(a) ? a : this.decode(a) + }, a.prototype.$asArray = function (a, b) { + if (!a)return this; + if ("auto" === a && !b)throw new Error("'auto' array mode is for query parameters only"); + return new d(this, a) + }, a + }(); + b.Type = f + }, function (a, b, c) { + var d = c(3), e = c(4), f = c(26), g = function (a, b) { + return function (c) { + return null != c ? c.toString().replace(a, b) : c + } + }, h = g(/\//g, "%2F"), i = g(/%2F/g, "/"), j = function () { + function a() { + this.enqueue = !0, this.typeQueue = [], this.defaultTypes = { + hash: { + encode: h, + decode: i, + is: d.is(String), + pattern: /.*/, + equals: d.val(!0) + }, + string: {encode: h, decode: i, is: d.is(String), pattern: /[^\/]*/}, + "int": { + encode: h, decode: function (a) { + return parseInt(a, 10) + }, is: function (a) { + return d.isDefined(a) && this.decode(a.toString()) === a + }, pattern: /-?\d+/ + }, + bool: { + encode: function (a) { + return a && 1 || 0 + }, decode: function (a) { + return 0 !== parseInt(a, 10) + }, is: d.is(Boolean), pattern: /0|1/ + }, + date: { + encode: function (a) { + return this.is(a) ? [a.getFullYear(), ("0" + (a.getMonth() + 1)).slice(-2), ("0" + a.getDate()).slice(-2)].join("-") : void 0 + }, + decode: function (a) { + if (this.is(a))return a; + var b = this.capture.exec(a); + return b ? new Date(b[1], b[2] - 1, b[3]) : void 0 + }, + is: function (a) { + return a instanceof Date && !isNaN(a.valueOf()) + }, + equals: function (a, b) { + return this.is(a) && this.is(b) && a.toISOString() === b.toISOString() + }, + pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/, + capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/ + }, + json: {encode: d.toJson, decode: d.fromJson, is: d.is(Object), equals: d.equals, pattern: /[^\/]*/}, + any: {encode: d.identity, decode: d.identity, equals: d.equals, pattern: /.*/} + }; + var a = function (a, b) { + return new f.Type(d.extend({name: b}, a)) + }; + this.types = d.inherit(d.map(this.defaultTypes, a), {}) + } + + return a.prototype.type = function (a, b, c) { + if (!d.isDefined(b))return this.types[a]; + if (this.types.hasOwnProperty(a))throw new Error("A type named '" + a + "' has already been defined."); + return this.types[a] = new f.Type(d.extend({name: a}, b)), c && (this.typeQueue.push({ + name: a, + def: c + }), this.enqueue || this._flushTypeQueue()), this + }, a.prototype._flushTypeQueue = function () { + for (; this.typeQueue.length;) { + var a = this.typeQueue.shift(); + if (a.pattern)throw new Error("You cannot override a type's .pattern at runtime."); + d.extend(this.types[a.name], e.services.$injector.invoke(a.def)) + } + }, a + }(); + b.paramTypes = new j + }, function (a, b, c) { + "use strict"; + var d = c(3), e = c(4); + !function (a) { + a[a.SUPERSEDED = 2] = "SUPERSEDED", a[a.ABORTED = 3] = "ABORTED", a[a.INVALID = 4] = "INVALID", a[a.IGNORED = 5] = "IGNORED" + }(b.RejectType || (b.RejectType = {})); + var f = b.RejectType, g = function () { + function a(a, b, c) { + d.extend(this, {type: a, message: b, detail: c}) + } + + return a.prototype.toString = function () { + var a = function (a) { + return a && a.toString !== Object.prototype.toString ? a.toString() : JSON.stringify(a) + }, b = this.type, c = this.message, d = a(this.detail); + return "TransitionRejection(type: " + b + ", message: " + c + ", detail: " + d + ")" + }, a + }(); + b.TransitionRejection = g; + var h = function () { + function a() { + } + + return a.prototype.superseded = function (a, b) { + var c = "The transition has been superseded by a different transition (see detail).", h = new g(f.SUPERSEDED, c, a); + return b && b.redirected && (h.redirected = !0), d.extend(e.services.$q.reject(h), {reason: h}) + }, a.prototype.redirected = function (a) { + return this.superseded(a, {redirected: !0}) + }, a.prototype.invalid = function (a) { + var b = "This transition is invalid (see detail)", c = new g(f.INVALID, b, a); + return d.extend(e.services.$q.reject(c), {reason: c}) + }, a.prototype.ignored = function (a) { + var b = "The transition was ignored.", c = new g(f.IGNORED, b, a); + return d.extend(e.services.$q.reject(c), {reason: c}) + }, a.prototype.aborted = function (a) { + var b = "The transition has been aborted.", c = new g(f.ABORTED, b, a); + return d.extend(e.services.$q.reject(c), {reason: c}) + }, a + }(); + b.RejectFactory = h + }, function (a, b) { + var c = function () { + function a(a, b, c, d) { + void 0 === c && (c = {}), void 0 === d && (d = {}), this._identifier = a, this._definition = b, this._options = d, this._params = c || {} + } + + return a.prototype.name = function () { + return this._definition && this._definition.name || this._identifier + }, a.prototype.identifier = function () { + return this._identifier + }, a.prototype.params = function () { + return this._params + }, a.prototype.$state = function () { + return this._definition + }, a.prototype.state = function () { + return this._definition && this._definition.self + }, a.prototype.options = function () { + return this._options + }, a.prototype.exists = function () { + return !(!this._definition || !this._definition.self) + }, a.prototype.valid = function () { + return !this.error() + }, a.prototype.error = function () { + var a = this.options().relative; + if (!this._definition && a) { + var b = a.name ? a.name : a; + return "Could not resolve '" + this.name() + "' from state '" + b + "'" + } + return this._definition ? this._definition.self ? void 0 : "State '" + this.name() + "' has an invalid definition" : "No such state '" + this.name() + "'" + }, a + }(); + b.TargetState = c + }, function (a, b, c) { + var d = c(3), e = c(4), f = c(31), g = function () { + function a(a, b) { + this.transition = a, this.$view = b, this.treeChanges = a.treeChanges(), this.enteringViews = a.views("entering"), this.exitingViews = a.views("exiting") + } + + return a.prototype.loadAllEnteringViews = function () { + var a = this, b = function (b) { + var c = d.find(a.treeChanges.to, d.propEq("state", b.context)).resolveInjector; + return a.$view.load(b, c) + }; + return e.services.$q.all(this.enteringViews.map(b)).then(d.noop) + }, a.prototype.loadAllControllerLocals = function () { + var a = this, b = function (b) { + function c() { + } + + var g = f.annotateController(b.controller), h = d.find(a.treeChanges.to, d.propEq("state", b.context)).resolveInjector; + return c.$inject = g, e.services.$q.all(h.getLocals(c)).then(function (a) { + return b.locals = a + }) + }, c = this.enteringViews.filter(function (a) { + return !!a.controller + }).map(b); + return e.services.$q.all(c).then(d.noop) + }, a.prototype.updateViews = function () { + var a = this.$view; + this.exitingViews.forEach(function (b) { + return a.reset(b) + }), this.enteringViews.forEach(function (b) { + return a.registerStateViewConfig(b) + }), a.sync() + }, a.prototype.registerHooks = function () { + this.enteringViews.length && (this.transition.onStart({}, this.loadAllEnteringViews.bind(this)), this.transition.onFinish({}, this.loadAllControllerLocals.bind(this))), (this.exitingViews.length || this.enteringViews.length) && this.transition.onSuccess({}, this.updateViews.bind(this)) + }, a + }(); + b.ViewHooks = g + }, function (a, b, c) { + function d(a) { + var b = h.services.$injector, c = b.get("$controller"), d = b.instantiate; + try { + var e; + return b.instantiate = function (a) { + b.instantiate = d, e = b.annotate(a) + }, c(a, {$scope: {}}), e + } finally { + b.instantiate = d + } + } + + function e(a, b) { + h.services.$injector = a, h.services.$q = b + } + + function f(a) { + function b(b, c, d) { + return h.services.locationConfig.html5Mode = function () { + var b = a.html5Mode(); + return b = i.isObject(b) ? b.enabled : b, b && d.history + }, k(["replace", "url", "path", "search", "hash"], b, h.services.location), k(["port", "protocol", "host"], b, h.services.locationConfig), k(["baseHref"], c, h.services.locationConfig), l + } + + l = new g.Router, k(["hashPrefix"], a, h.services.locationConfig), this.$get = b, b.$inject = ["$location", "$browser", "$sniffer"] + } + + var g = c(32), h = c(4), i = c(3), j = angular.module("ui.router.angular1", []); + b.annotateController = d, e.$inject = ["$injector", "$q"], j.run(e); + var k = function (a, b, c) { + return a.forEach(function (a) { + return c[a] = b[a].bind(b) + }) + }, l = null; + f.$inject = ["$locationProvider"], angular.module("ui.router.init", []).provider("ng1UIRouter", f), angular.module("ui.router.util").provider("$urlMatcherFactory", ["ng1UIRouterProvider", function () { + return l.urlMatcherFactory + }]), angular.module("ui.router.router").provider("$urlRouter", ["ng1UIRouterProvider", function () { + return l.urlRouterProvider + }]), angular.module("ui.router.state").provider("$state", ["ng1UIRouterProvider", function () { + return l.stateProvider + }]), angular.module("ui.router.init").run(["ng1UIRouter", function (a) { + }]), angular.module("ui.router.state").run(["$state", function (a) { + }]), angular.module("ui.router.util").run(["$urlMatcherFactory", function (a) { + }]) + }, function (a, b, c) { + var d = c(33), e = c(38), f = c(14), g = function () { + function a() { + this.urlMatcherFactory = new d.UrlMatcherFactory, this.urlRouterProvider = new e.$UrlRouterProvider(this.urlMatcherFactory), this.stateProvider = new f.$StateProvider(this.urlRouterProvider, this.urlMatcherFactory) + } + + return a + }(); + b.Router = g + }, function (a, b, c) { + function d() { + return {strict: f.matcherConfig.strictMode(), caseInsensitive: f.matcherConfig.caseInsensitive()} + } + + var e = c(3), f = c(34), g = c(36), h = function () { + function a() { + e.extend(this, {UrlMatcher: f.UrlMatcher, Param: g.Param}) + } + + return a.prototype.caseInsensitive = function (a) { + return f.matcherConfig.caseInsensitive(a) + }, a.prototype.strictMode = function (a) { + return f.matcherConfig.strictMode(a) + }, a.prototype.defaultSquashPolicy = function (a) { + return f.matcherConfig.defaultSquashPolicy(a) + }, a.prototype.compile = function (a, b) { + return new f.UrlMatcher(a, e.extend(d(), b)) + }, a.prototype.isMatcher = function (a) { + if (!e.isObject(a))return !1; + var b = !0; + return e.forEach(f.UrlMatcher.prototype, function (c, d) { + e.isFunction(c) && (b = b && e.isDefined(a[d]) && e.isFunction(a[d])) + }), b + }, a.prototype.type = function (a, b, c) { + var d = g.paramTypes.type(a, b, c); + return e.isDefined(b) ? this : d + }, a.prototype.$get = function () { + return g.paramTypes.enqueue = !1, g.paramTypes._flushTypeQueue(), this + }, a + }(); + b.UrlMatcherFactory = h + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(35)), d(c(25)), d(c(33)), d(c(38)) + }, function (a, b, c) { + function d(a, b) { + var c = ["", ""], d = a.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&"); + if (!b)return d; + switch (b.squash) { + case!1: + c = ["(", ")" + (b.isOptional ? "?" : "")]; + break; + case!0: + c = ["?(", ")?"]; + break; + default: + c = ["(" + b.squash + "|", ")?"] + } + return d + c[0] + b.type.pattern.source + c[1] + } + + var e = c(3), f = c(36), g = function (a, b, c) { + return a[b] = a[b] || c() + }, h = function () { + function a(b, c) { + var g = this; + this.pattern = b, this.config = c, this._cache = { + path: [], + pattern: null + }, this._children = [], this._params = [], this._segments = [], this._compiled = [], this.config = e.defaults(this.config, { + params: {}, + strict: !0, + caseInsensitive: !1, + paramMap: e.identity + }); + for (var h, i, j, k = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, l = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, m = 0, n = [], o = function (c) { + if (!a.nameValidator.test(c))throw new Error("Invalid parameter name '" + c + "' in pattern '" + b + "'"); + if (e.find(g._params, e.propEq("id", c)))throw new Error("Duplicate parameter name '" + c + "' in pattern '" + b + "'") + }, p = function (a, c) { + var d = a[2] || a[3], h = c ? a[4] : a[4] || ("*" === a[1] ? ".*" : null); + return { + id: d, + regexp: h, + cfg: g.config.params[d], + segment: b.substring(m, a.index), + type: h ? f.paramTypes.type(h || "string") || e.inherit(f.paramTypes.type("string"), {pattern: new RegExp(h, g.config.caseInsensitive ? "i" : void 0)}) : null + } + }; (h = k.exec(b)) && (i = p(h, !1), !(i.segment.indexOf("?") >= 0));)o(i.id), this._params.push(f.Param.fromPath(i.id, i.type, this.config.paramMap(i.cfg, !1))), this._segments.push(i.segment), n.push([i.segment, e.tail(this._params)]), m = k.lastIndex; + j = b.substring(m); + var q = j.indexOf("?"); + if (q >= 0) { + var r = j.substring(q); + if (j = j.substring(0, q), r.length > 0)for (m = 0; h = l.exec(r);)i = p(h, !0), o(i.id), this._params.push(f.Param.fromSearch(i.id, i.type, this.config.paramMap(i.cfg, !0))), m = k.lastIndex + } + this._segments.push(j), e.extend(this, { + _compiled: n.map(function (a) { + return d.apply(null, a) + }).concat(d(j)), prefix: this._segments[0] + }), Object.freeze(this) + } + + return a.prototype.append = function (a) { + return this._children.push(a), e.forEach(a._cache, function (b, c) { + return a._cache[c] = e.isArray(b) ? [] : null + }), a._cache.path = this._cache.path.concat(this), a + }, a.prototype.isRoot = function () { + return 0 === this._cache.path.length + }, a.prototype.toString = function () { + return this.pattern + }, a.prototype.exec = function (a, b, c, d) { + function f(a) { + var b = function (a) { + return a.split("").reverse().join("") + }, c = function (a) { + return a.replace(/\\-/g, "-") + }, d = b(a).split(/-(?!\\)/), f = e.map(d, b); + return e.map(f, c).reverse() + } + + var h = this; + void 0 === b && (b = {}), void 0 === d && (d = {}); + var i = g(this._cache, "pattern", function () { + return new RegExp(["^", e.unnest(h._cache.path.concat(h).map(e.prop("_compiled"))).join(""), h.config.strict === !1 ? "/?" : "", "$"].join(""), h.config.caseInsensitive ? "i" : void 0) + }).exec(a); + if (!i)return null; + var j = this.parameters(), k = j.filter(function (a) { + return !a.isSearch() + }), l = j.filter(function (a) { + return a.isSearch() + }), m = this._cache.path.concat(this).map(function (a) { + return a._segments.length - 1 + }).reduce(function (a, b) { + return a + b + }), n = {}; + if (m !== i.length - 1)throw new Error("Unbalanced capture group in route '" + this.pattern + "'"); + for (var o = 0; m > o; o++) { + for (var p = k[o], q = i[o + 1], r = 0; r < p.replace; r++)p.replace[r].from === q && (q = p.replace[r].to); + q && p.array === !0 && (q = f(q)), n[p.id] = p.value(q) + } + return e.forEach(l, function (a) { + n[a.id] = a.value(b[a.id]) + }), c && (n["#"] = c), n + }, a.prototype.parameters = function (a) { + return void 0 === a && (a = {}), a.inherit === !1 ? this._params : e.unnest(this._cache.path.concat(this).map(e.prop("_params"))) + }, a.prototype.parameter = function (a, b) { + void 0 === b && (b = {}); + var c = e.tail(this._cache.path); + return e.find(this._params, e.propEq("id", a)) || b.inherit !== !1 && c && c.parameter(a) || null + }, a.prototype.validates = function (a) { + var b = this, c = function (a, b) { + return !a || a.validates(b) + }; + return e.pairs(a || {}).map(function (a) { + var d = a[0], e = a[1]; + return c(b.parameter(d), e) + }).reduce(e.allTrueR, !0) + }, a.prototype.format = function (a) { + function b(a) { + return encodeURIComponent(a).replace(/-/g, function (a) { + return "%5C%" + a.charCodeAt(0).toString(16).toUpperCase() + }) + } + + void 0 === a && (a = {}); + var c = this._segments, d = c[0], f = !1, g = this.parameters({inherit: !1}), h = e.tail(this._cache.path); + if (!this.validates(a))return null; + g.map(function (g, h) { + var i = h < c.length - 1, j = g.value(a[g.id]), k = g.isDefaultValue(j), l = k ? g.squash : !1, m = g.type.encode(j); + if (!i) { + if (null == m || k && l !== !1)return; + return e.isArray(m) || (m = [m]), m = e.map(m, encodeURIComponent).join("&" + g.id + "="), d += (f ? "&" : "?") + (g.id + "=" + m), void(f = !0) + } + d += function (a, c) { + return l === !0 ? a.match(c.match(/\/$/) ? /\/?(.*)/ : /(.*)/)[1] : e.isString(l) ? l + a : l !== !1 ? "" : null == m ? a : e.isArray(m) ? e.map(m, b).join("-") + a : g.type.raw ? m + a : encodeURIComponent(m) + a + }(c[h + 1], d) + }), a["#"] && (d += "#" + a["#"]); + var i = ["#"].concat(g.map(e.prop("id"))); + return (h && h.format(e.omit(a, i)) || "") + d + }, a.nameValidator = /^\w+(-+\w+)*(?:\[\])?$/, a + }(); + b.UrlMatcher = h + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(24)), d(c(27)), d(c(37)), d(c(26)) + }, function (a, b, c) { + function d() { + function a() { + function a(a, b) { + return function () { + e.forEach(a.split(" "), function (a) { + return c[a].splice(c[a].indexOf(b), 1) + }) + } + } + + function b(a, b) { + c[a] && c[a].length && e.forEach(c[a], function (a) { + return a(b) + }) + } + + var c = {}, d = {}; + return f.prototype.$digest = function () { + var a = this; + e.forEach(this, function (c, e) { + c !== d[e] && a.hasOwnProperty(e) && (d[e] = c, b(e, c)) + }) + }, f.prototype.$inherit = function (a, b, c) { + var d, f = e.ancestors(b, c), g = {}, h = []; + for (var i in f)if (f[i].params && (d = Object.keys(f[i].params), d.length))for (var j in d)h.indexOf(d[j]) >= 0 || (h.push(d[j]), g[d[j]] = this[d[j]]); + return e.extend({}, g, a) + }, f.prototype.$set = function (a, c) { + var d = this, f = !1, g = !1; + return c && e.forEach(a, function (a, b) { + (c.parameter(b) || {}).dynamic !== !0 && (g = !0) + }), g ? !1 : (e.forEach(a, function (a, c) { + a !== d[c] && (d[c] = a, b(c), f = !0) + }), this.$sync(), f) + }, f.prototype.$sync = function () { + return e.copy(this, d), this + }, f.prototype.$off = function () { + return c = {}, this + }, f.prototype.$raw = function () { + return e.omit(this, Object.keys(this).filter(f.prototype.hasOwnProperty.bind(f.prototype))) + }, f.prototype.$localize = function (a, b) { + return new f(e.pick(b || this, Object.keys(a.params))) + }, f.prototype.$observe = function (b, d) { + return e.forEach(b.split(" "), function (a) { + return (c[a] || (c[a] = [])).push(d) + }), a(b, d) + }, new f + } + + function b(a) { + return a.$watch(function () { + c.$digest() + }), c + } + + var c = a(); + this.$get = b, b.$inject = ["$rootScope"] + } + + var e = c(3), f = function () { + function a(a) { + void 0 === a && (a = {}), e.extend(this, a) + } + + return a.prototype.$digest = function () { + }, a.prototype.$inherit = function (a, b, c) { + }, a.prototype.$set = function (a, b) { + }, a.prototype.$sync = function () { + }, a.prototype.$off = function () { + }, a.prototype.$raw = function () { + }, a.prototype.$localize = function (a, b) { + }, a.prototype.$observe = function (a, b) { + }, a + }(); + b.StateParams = f, d.$inject = [], angular.module("ui.router.state").provider("$stateParams", d) + }, function (a, b, c) { + function d(a) { + function b(a) { + var b = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source); + return null != b ? b[1].replace(/\\(.)/g, "$1") : "" + } + + function c(a, b) { + return a.replace(/\$(\$|\d{1,2})/, function (a, c) { + return b["$" === c ? 0 : Number(c)] + }) + } + + function d(a, b, c) { + if (!c)return !1; + var d = a.invoke(b, b, {$match: c}); + return e.isDefined(d) ? d : !0 + } + + function h(a) { + function b(a, b, c) { + var d = f.services.locationConfig.baseHref(); + return "/" === d ? a : b ? d.slice(0, -1) + a : c ? d.slice(1) + a : a + } + + function c(a) { + function b(a) { + var b = a(f.services.$injector, g); + return b ? (e.isString(b) && (g.replace(), g.url(b)), !0) : !1 + } + + if (!a || !a.defaultPrevented) { + var c, d = j.length; + for (c = 0; d > c; c++)if (b(j[c]))return; + k && b(k) + } + } + + function d() { + return i = i || a.$on("$locationChangeSuccess", c) + } + + var h = g.url(); + return l || d(), { + sync: function () { + c() + }, listen: function () { + return d() + }, update: function (a) { + return a ? void(h = g.url()) : void(g.url() !== h && (g.url(h), g.replace())) + }, push: function (a, b, c) { + g.url(a.format(b || {})), c && c.replace && g.replace() + }, href: function (a, c, d) { + if (!a.validates(c))return null; + var e = a.format(c); + d = d || {}; + var g = f.services.locationConfig, h = g.html5Mode(); + if (h || null === e || (e = "#" + g.hashPrefix() + e), e = b(e, h, d.absolute), !d.absolute || !e)return e; + var i = !h && e ? "/" : "", j = g.port(); + return j = 80 === j || 443 === j ? "" : ":" + j, [g.protocol(), "://", g.host(), j, i, e].join("") + } + } + } + + var i, j = [], k = null, l = !1; + this.rule = function (a) { + if (!e.isFunction(a))throw new Error("'rule' must be a function"); + return j.push(a), this + }, this.otherwise = function (a) { + if (!e.isFunction(a) && !e.isString(a))throw new Error("'rule' must be a string or function"); + return k = e.isString(a) ? function () { + return a + } : a, this + }, this.when = function (h, i) { + var j, k = e.isString(i); + if (e.isString(h) && (h = a.compile(h)), !k && !e.isFunction(i) && !e.isArray(i))throw new Error("invalid 'handler' in when()"); + var l = { + matcher: function (b, c) { + return k && (j = a.compile(c), c = ["$match", j.format.bind(j)]), e.extend(function () { + return d(f.services.$injector, c, b.exec(g.path(), g.search(), g.hash())) + }, {prefix: e.isString(b.prefix) ? b.prefix : ""}) + }, regex: function (a, h) { + if (a.global || a.sticky)throw new Error("when() RegExp must not be global or sticky"); + return k && (j = h, h = ["$match", function (a) { + return c(j, a) + }]), e.extend(function () { + return d(f.services.$injector, h, a.exec(g.path())) + }, {prefix: b(a)}) + } + }, m = {matcher: a.isMatcher(h), regex: h instanceof RegExp}; + for (var n in m)if (m[n])return this.rule(l[n](h, i)); + throw new Error("invalid 'what' in when()") + }, this.deferIntercept = function (a) { + void 0 === a && (a = !0), l = a + }, this.$get = h, h.$inject = ["$rootScope"] + } + + var e = c(3), f = c(4), g = f.services.location; + b.$UrlRouterProvider = d + }, function (a, b) { + var c = function () { + function a(a) { + this.transition = a + } + + return a.prototype.registerHooks = function () { + this.registerOnEnterHooks(), this.registerOnRetainHooks(), this.registerOnExitHooks() + }, a.prototype.registerOnEnterHooks = function () { + var a = this, b = function (b) { + return a.transition.onEnter({to: b.name}, b.onEnter) + }; + this.transition.entering().filter(function (a) { + return !!a.onEnter + }).forEach(b) + }, a.prototype.registerOnRetainHooks = function () { + var a = this, b = function (b) { + return a.transition.onRetain({}, b.onRetain) + }; + this.transition.retained().filter(function (a) { + return !!a.onRetain + }).forEach(b) + }, a.prototype.registerOnExitHooks = function () { + var a = this, b = function (b) { + return a.transition.onExit({from: b.name}, b.onExit) + }; + this.transition.exiting().filter(function (a) { + return !!a.onExit + }).forEach(b) + }, a + }(); + b.EnterExitHooks = c + }, function (a, b, c) { + var d = c(3), e = c(19), f = e.ResolvePolicy[e.ResolvePolicy.LAZY], g = e.ResolvePolicy[e.ResolvePolicy.EAGER], h = function () { + function a(a) { + this.transition = a + } + + return a.prototype.registerHooks = function () { + function a(a) { + return d.tail(c.to).resolveContext.resolvePath(d.extend({transition: a}, {resolvePolicy: g})) + } + + function b(a, b) { + var e = d.find(c.entering, d.propEq("state", a)); + return e.resolveContext.resolvePathElement(e.state, d.extend({transition: b}, {resolvePolicy: f})) + } + + var c = this.transition.treeChanges(); + a.$inject = ["$transition$"], b.$inject = ["$state$", "$transition$"], this.transition.onStart({}, a, {priority: 1e3}), this.transition.onEnter({}, b, {priority: 1e3}) + }, a + }(); + b.ResolveHooks = h + }, function (a, b, c) { + var d = c(3), e = c(36), f = function (a) { + if (!d.isString(a))return !1; + var b = "^" === a.charAt(0); + return {val: b ? a.substring(1) : a, root: b} + }, g = function () { + function a(a, b, c) { + this.matcher = b; + var g = this; + this.builders = { + parent: [function (c) { + return c === a() ? null : b.find(g.parentName(c)) || a() + }], data: [function (a) { + return a.parent && a.parent.data && (a.data = a.self.data = d.extend({}, a.parent.data, a.data)), a.data + }], url: [function (b) { + var e = b, g = f(e.url), h = b.parent, i = g ? c.compile(g.val, { + params: b.params || {}, + paramMap: function (a, b) { + return e.reloadOnSearch === !1 && b && (a = d.extend(a || {}, {dynamic: !0})), a + } + }) : e.url; + if (!i)return null; + if (!c.isMatcher(i))throw new Error("Invalid url '" + i + "' in state '" + b + "'"); + return g && g.root ? i : (h && h.navigable || a()).url.append(i) + }], navigable: [function (b) { + return b !== a() && b.url ? b : b.parent ? b.parent.navigable : null + }], params: [function (a) { + var b = function (a, b) { + return e.Param.fromConfig(b, null, a) + }, c = a.url && a.url.parameters({inherit: !1}) || [], f = d.values(d.map(d.omit(a.params || {}, c.map(d.prop("id"))), b)); + return c.concat(f).map(function (a) { + return [a.id, a] + }).reduce(d.applyPairs, {}) + }], views: [function (a) { + var b = {}, c = ["templateProvider", "templateUrl", "template", "notify", "async"], e = ["controller", "controllerProvider", "controllerAs"], f = c.concat(e); + return d.forEach(a.views || {$default: d.pick(a, f)}, function (c, f) { + f = f || "$default", d.forEach(e, function (b) { + a[b] && !c[b] && (c[b] = a[b]) + }), Object.keys(c).length > 0 && (b[f] = c) + }), b + }], path: [function (a) { + return a.parent ? a.parent.path.concat(a) : [a] + }], includes: [function (a) { + var b = a.parent ? d.extend({}, a.parent.includes) : {}; + return b[a.name] = !0, b + }] + } + } + + return a.prototype.builder = function (a, b) { + var c = this.builders, e = c[a] || []; + return d.isString(a) && !d.isDefined(b) ? e.length > 1 ? e : e[0] : d.isString(a) && d.isFunction(b) ? (c[a] = e, c[a].push(b), function () { + return c[a].splice(c[a].indexOf(b, 1)) && null + }) : void 0 + }, a.prototype.build = function (a) { + var b = this, c = b.matcher, e = b.builders, f = this.parentName(a); + if (f && !c.find(f))return null; + for (var g in e)if (e.hasOwnProperty(g)) { + var h = e[g].reduce(function (a, b) { + return function (c) { + return b(c, a) + } + }, d.noop); + a[g] = h(a) + } + return a + }, a.prototype.parentName = function (a) { + var b = a.name || ""; + return -1 !== b.indexOf(".") ? b.substring(0, b.lastIndexOf(".")) : a.parent ? d.isString(a.parent) ? a.parent : a.parent.name : "" + }, a.prototype.name = function (a) { + var b = a.name; + if (-1 !== b.indexOf(".") || !a.parent)return b; + var c = d.isString(a.parent) ? a.parent : a.parent.name; + return c ? c + "." + b : b + }, a + }(); + b.StateBuilder = g + }, function (a, b, c) { + function d(a, b) { + var c, d = a.match(/^\s*({[^}]*})\s*$/); + if (d && (a = b + "(" + d[1] + ")"), c = a.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/), !c || 4 !== c.length)throw new Error("Invalid state ref '" + a + "'"); + return {state: c[1], paramExpr: c[3] || null} + } + + function e(a) { + var b = a.parent().inheritedData("$uiView"); + return b && b.context && b.context.name ? b.context : void 0 + } + + function f(a, b) { + return { + restrict: "A", require: ["?^uiSrefActive", "?^uiSrefActiveEq"], link: function (c, f, g, j) { + var k = d(g.uiSref, a.current.name), l = null, m = e(f) || a.$current, n = null, o = "A" === f.prop("tagName"), p = "FORM" === f[0].nodeName, q = p ? "action" : "href", r = !0, s = c.$eval(g.uiSrefOpts), t = { + relative: m, + inherit: !0 + }, u = h.defaults(s, t, i.defaultTransOpts), v = function (b) { + if (b && (l = h.copy(b)), r) { + n = a.href(k.state, l, u); + var c = j[1] || j[0]; + return c && c.$$addStateInfo(k.state, l), null === n ? (r = !1, !1) : void g.$set(q, n) + } + }; + k.paramExpr && (c.$watch(k.paramExpr, function (a) { + a !== l && v(a) + }, !0), l = h.copy(c.$eval(k.paramExpr))), v(), p || f.bind("click", function (c) { + var d = c.which || c.button; + if (!(d > 1 || c.ctrlKey || c.metaKey || c.shiftKey || f.attr("target"))) { + var e = b(function () { + a.go(k.state, l, u) + }); + c.preventDefault(); + var g = o && !n ? 1 : 0; + c.preventDefault = function () { + g-- <= 0 && b.cancel(e) + } + } + }) + } + } + } + + function g(a, b, c) { + return { + restrict: "A", + controller: ["$scope", "$element", "$attrs", "$timeout", "$transitions", function (b, f, g, i, j) { + function k(b, c, d) { + var g = a.get(b, e(f)), h = m(b, c); + t.push({state: g || {name: b}, params: c, hash: h}), u[h] = d + } + + function l(a) { + a.promise.then(n) + } + + function m(a, c) { + if (!h.isString(a))throw new Error("state should be a string"); + return h.isObject(c) ? a + h.toJson(c) : (c = b.$eval(c), h.isObject(c) ? a + h.toJson(c) : a) + } + + function n() { + for (var a = 0; a < t.length; a++)q(t[a].state, t[a].params) ? o(f, u[t[a].hash]) : p(f, u[t[a].hash]), r(t[a].state, t[a].params) ? o(f, s) : p(f, s) + } + + function o(a, b) { + i(function () { + a.addClass(b) + }) + } + + function p(a, b) { + a.removeClass(b) + } + + function q(b, c) { + return a.includes(b.name, c) + } + + function r(b, c) { + return a.is(b.name, c) + } + + var s, t = [], u = {}; + s = c(g.uiSrefActiveEq || "", !1)(b); + var v = b.$eval(g.uiSrefActive) || c(g.uiSrefActive || "", !1)(b); + h.isObject(v) && h.forEach(v, function (c, e) { + if (h.isString(c)) { + var f = d(c, a.current.name); + k(f.state, b.$eval(f.paramExpr), e) + } + }), this.$$addStateInfo = function (a, b) { + h.isObject(v) && t.length > 0 || (k(a, b, v), n()) + }, b.$on("$stateChangeSuccess", n), l.$inject = ["$transition$"]; + var w = j.onStart({}, l); + b.$on("$destroy", w) + }] + } + } + + var h = c(3), i = c(9); + f.$inject = ["$state", "$timeout"], g.$inject = ["$state", "$stateParams", "$interpolate"], angular.module("ui.router.state").directive("uiSref", f).directive("uiSrefActive", g).directive("uiSrefActiveEq", g) + }, function (a, b) { + function c(a) { + return function (b) { + return a.is(b) + } + } + + function d(a) { + return function (b, c, d) { + return a.includes(b, c, d) + } + } + + c.$inject = ["$state"], b.$IsStateFilter = c, d.$inject = ["$state"], b.$IncludedByStateFilter = d, angular.module("ui.router.state").filter("isState", c).filter("includedByState", d) + }, function (a, b, c) { + var d = c(2), e = function () { + function a(a) { + d.extend(this, a) + } + + return a.prototype.is = function (a) { + return this === a || this.self === a || this.fqn() === a + }, a.prototype.fqn = function () { + if (!(this.parent && this.parent instanceof this.constructor))return this.name; + var a = this.parent.fqn(); + return a ? a + "." + this.name : this.name + }, a.prototype.root = function () { + return this.parent && this.parent.root() || this + }, a.prototype.parameters = function (a) { + a = d.defaults(a, {inherit: !0}); + var b = a.inherit && this.parent && this.parent.parameters() || []; + return b.concat(d.values(this.params)) + }, a.prototype.parameter = function (a, b) { + return void 0 === b && (b = {}), this.url && this.url.parameter(a, b) || d.find(d.values(this.params), d.propEq("id", a)) || b.inherit && this.parent && this.parent.parameter(a) + }, a.prototype.toString = function () { + return this.fqn() + }, a + }(); + b.State = e + }, function (a, b, c) { + var d = c(3), e = function () { + function a(a) { + this._states = a + } + + return a.prototype.isRelative = function (a) { + return a = a || "", 0 === a.indexOf(".") || 0 === a.indexOf("^") + }, a.prototype.find = function (a, b) { + if (!a && "" !== a)return void 0; + var c = d.isString(a), e = c ? a : a.name; + this.isRelative(e) && (e = this.resolvePath(e, b)); + var f = this._states[e]; + return !f || !c && (c || f !== a && f.self !== a) ? void 0 : f + }, a.prototype.resolvePath = function (a, b) { + if (!b)throw new Error("No reference point given for path '" + a + "'"); + for (var c = this.find(b), d = a.split("."), e = 0, f = d.length, g = c; f > e; e++)if ("" !== d[e] || 0 !== e) { + if ("^" !== d[e])break; + if (!g.parent)throw new Error("Path '" + a + "' not valid for state '" + c.name + "'"); + g = g.parent + } else g = c; + var h = d.slice(e).join("."); + return g.name + (g.name && h ? "." : "") + h + }, a + }(); + b.StateMatcher = e + }, function (a, b, c) { + var d = c(3), e = c(12), f = function () { + function a(a, b, c, d) { + this.states = a, this.builder = b, this.$urlRouterProvider = c, this.$state = d, this.autoFlush = !1, this.queue = [] + } + + return a.prototype.register = function (a, b) { + var c = this, f = c.states, g = c.queue, h = c.$state, i = d.inherit(new e.State, d.extend({}, a, { + self: a, + resolve: a.resolve || {}, + toString: function () { + return a.name + } + })); + if (!d.isString(i.name))throw new Error("State must have a valid name"); + if (f.hasOwnProperty(i.name) || -1 !== d.pluck(g, "name").indexOf(i.name))throw new Error("State '" + i.name + "' is already defined"); + return g[b ? "unshift" : "push"](i), this.autoFlush && this.flush(h), i + }, a.prototype.flush = function (a) { + for (var b, c, d, e = this, f = e.queue, g = e.states, h = e.builder, i = [], j = {}; f.length > 0;)if (c = f.shift(), b = h.build(c), d = i.indexOf(c), b) { + if (g.hasOwnProperty(c.name))throw new Error("State '" + name + "' is already defined"); + g[c.name] = c, this.attachRoute(a, c), d >= 0 && i.splice(d, 1) + } else { + var k = j[c.name]; + if (j[c.name] = f.length, d >= 0 && k === f.length)throw new Error("Cannot register orphaned state '" + c.name + "'"); + 0 > d && i.push(c), f.push(c) + } + return g + }, a.prototype.attachRoute = function (a, b) { + var c = this.$urlRouterProvider; + !b[d.abstractKey] && b.url && c.when(b.url, ["$match", "$stateParams", function (c, e) { + a.$current.navigable === b && d.equalForKeys(c, e) || a.transitionTo(b, c, { + inherit: !0, + location: !1 + }) + }]) + }, a + }(); + b.StateQueueManager = f + }, function (a, b, c) { + var d = c(3), e = c(6), f = c(4), g = c(28), h = c(12), i = new g.RejectFactory, j = { + async: !0, + rejectIfSuperseded: !0, + current: d.noop, + transition: null, + traceData: {} + }, k = function () { + function a(a, b, c, f) { + var g = this; + this.fn = a, this.locals = b, this.resolveContext = c, this.options = f, this.isSuperseded = function () { + return g.options.current() !== g.options.transition + }, this.mapHookResult = d.pattern([[this.isSuperseded, function () { + return i.superseded(g.options.current()) + }], [d.eq(!1), d.val(i.aborted("Hook aborted transition"))], [d.is(h.TargetState), function (a) { + return i.redirected(a) + }], [d.isPromise, function (a) { + return a.then(g.handleHookResult.bind(g)) + }]]), this.invokeStep = function (a) { + var b = g, c = b.options, f = b.fn, h = b.resolveContext, j = d.extend({}, g.locals, a); + if (e.trace.traceHookInvocation(g, c), c.rejectIfSuperseded && g.isSuperseded())return i.superseded(c.current()); + if (!c.async) { + var k = h.invokeNow(f, j, c); + return g.handleHookResult(k) + } + return h.invokeLater(f, j, c).then(g.handleHookResult.bind(g)) + }, this.options = d.defaults(f, j) + } + + return a.prototype.handleHookResult = function (a) { + if (!d.isDefined(a))return void 0; + e.trace.traceHookResult(a, void 0, this.options); + var b = this.mapHookResult(a); + return b && e.trace.traceHookResult(a, b, this.options), b + }, a.prototype.toString = function () { + var a = this, b = a.options, c = a.fn, e = d.parse("traceData.hookType")(b) || "internal", f = d.parse("traceData.context.state.name")(b) || d.parse("traceData.context")(b) || "unknown", g = d.fnToString(c); + return e + " context: " + f + ", " + d.maxLength(200, g) + }, a.runSynchronousHooks = function (b, c, e) { + void 0 === c && (c = {}), void 0 === e && (e = !1); + for (var g = [], h = 0; h < b.length; h++)try { + g.push(b[h].invokeStep(c)) + } catch (i) { + if (!e)throw i; + console.log("Swallowed exception during synchronous hook handler: " + i) + } + var j = g.filter(a.isRejection); + return j.length ? j[0] : g.filter(d.not(a.isRejection)).filter(d.isPromise).reduce(function (a, b) { + return a.then(d.val(b)) + }, f.services.$q.when()) + }, a.isRejection = function (a) { + return a && a.reason instanceof g.TransitionRejection && a + }, a + }(); + b.TransitionHook = k + }, function (a, b, c) { + function d() { + this._reinit.bind(b.$transitions)(), this.$get = function () { + return b.$transitions + } + } + + var e = c(8), f = c(11); + b.defaultTransOpts = { + location: !0, + relative: null, + inherit: !1, + notify: !0, + reload: !1, + custom: {}, + current: function () { + return null + } + }; + var g = function () { + function a() { + this._defaultErrorHandler = function (a) { + a instanceof Error && console.log(a) + }, this._reinit() + } + + return a.prototype.defaultErrorHandler = function (a) { + return this._defaultErrorHandler = a || this._defaultErrorHandler + }, a.prototype._reinit = function () { + f.HookRegistry.mixin(new f.HookRegistry, this) + }, a.prototype.create = function (a, b) { + return new e.Transition(a, b) + }, a + }(); + b.$transitions = new g, d.prototype = b.$transitions, b.$transitionsProvider = d, angular.module("ui.router.state").provider("$transitions", b.$transitionsProvider) + }, function (a, b, c) { + function d(a) { + for (var c in a)b.hasOwnProperty(c) || (b[c] = a[c]) + } + + d(c(50)), d(c(21)), d(c(51)), d(c(52)) + }, function (a, b, c) { + function d(a, b) { + this.fromConfig = function (a, b, c) { + return e.isDefined(a.template) ? this.fromString(a.template, b) : e.isDefined(a.templateUrl) ? this.fromUrl(a.templateUrl, b) : e.isDefined(a.templateProvider) ? this.fromProvider(a.templateProvider, b, c) : null + }, this.fromString = function (a, b) { + return e.isFunction(a) ? a(b) : a + }, this.fromUrl = function (c, d) { + return e.isFunction(c) && (c = c(d)), null == c ? null : a.get(c, { + cache: b, + headers: {Accept: "text/html"} + }).then(e.prop("data")) + }, this.fromProvider = function (a, b, c) { + return c(a) + } + } + + var e = c(3); + d.$inject = ["$http", "$templateCache"], angular.module("ui.router.util").service("$templateFactory", d) + }, function (a, b, c) { + function d(a, b, c, d, e) { + function h(a, c) { + return { + enter: function (a, c, d) { + angular.version.minor > 2 ? b.enter(a, null, c).then(d) : b.enter(a, null, c, d) + }, leave: function (a, c) { + angular.version.minor > 2 ? b.leave(a).then(c) : b.leave(a, c) + } + } + } + + function i(a, b) { + return a === b + } + + var j = {context: a.rootContext()}, k = { + count: 0, + restrict: "ECA", + terminal: !0, + priority: 400, + transclude: "element", + compile: function (b, e, l) { + return function (b, e, m) { + function n(a) { + i(x, a) || (g.trace.traceUiViewConfigUpdated(A, a && a.context), x = a, p(a)) + } + + function o() { + q && (g.trace.traceUiViewEvent("Removing (previous) el", A), q.remove(), q = null), s && (g.trace.traceUiViewEvent("Destroying (previous) scope", A), s.$destroy(), s = null), r && (g.trace.traceUiViewEvent("Animate out (previous)", A), w.leave(r, function () { + q = null + }), q = r, r = null) + } + + function p(a) { + a = a || {}; + var d = b.$new(); + g.trace.traceUiViewScopeCreated(A, d), f.extend(A, { + context: a.context, + $template: a.template, + $controller: a.controller, + $controllerAs: a.controllerAs, + $locals: a.locals + }); + var h = l(d, function (a) { + w.enter(a.data("$uiView", A), e, function () { + s && s.$emit("$viewContentAnimationEnded"), (f.isDefined(v) && !v || b.$eval(v)) && c(a) + }), o() + }); + r = h, s = d, s.$emit("$viewContentLoaded", a || x), s.$eval(u) + } + + var q, r, s, t, u = m.onload || "", v = m.autoscroll, w = h(m, b), x = void 0, y = e.inheritedData("$uiView") || j, z = d(m.uiView || m.name || "")(b) || "$default", A = { + id: k.count++, + name: z, + fqn: y.name ? y.fqn + "." + z : z, + config: null, + configUpdated: n, + get creationContext() { + return y.context + } + }; + g.trace.traceUiViewEvent("Linking", A), e.data("$uiView", A), p(), t = a.registerUiView(A), b.$on("$destroy", function () { + g.trace.traceUiViewEvent("Destroying/Unregistering", A), t() + }) + } + } + }; + return k + } + + function e(a, b, c, d, e) { + return { + restrict: "ECA", priority: -400, compile: function (c) { + var d = c.html(); + return function (c, e) { + var h = e.data("$uiView"); + if (h) { + e.html(h.$template || d), g.trace.traceUiViewFill(h, e.html()); + var i = a(e.contents()), j = h.$controller, k = h.$controllerAs; + if (j) { + var l = h.$locals, m = b(j, f.extend(l, {$scope: c})); + k && (c[k] = m), e.data("$ngControllerController", m), e.children().data("$ngControllerController", m) + } + i(c) + } + } + } + } + } + + var f = c(3), g = c(6); + d.$inject = ["$view", "$animate", "$uiViewScroll", "$interpolate", "$q"], e.$inject = ["$compile", "$controller", "$interpolate", "$injector", "$q"], angular.module("ui.router.state").directive("uiView", d), angular.module("ui.router.state").directive("uiView", e) + }, function (a, b) { + function c() { + var a = !1; + this.useAnchorScroll = function () { + a = !0 + }, this.$get = ["$anchorScroll", "$timeout", function (b, c) { + return a ? b : function (a) { + return c(function () { + a[0].scrollIntoView() + }, 0, !1) + } + }] + } + + angular.module("ui.router.state").provider("$uiViewScroll", c) + }]) +}); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular-upload.min.js b/apollo-portal/src/main/resources/static/vendor/angular/angular-upload.min.js index d75b94bd3..1b39301e0 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular-upload.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular-upload.min.js @@ -1 +1,135 @@ -"use strict";angular.module("lr.upload",["lr.upload.formdata","lr.upload.iframe","lr.upload.directives"]),angular.module("lr.upload.directives",[]),angular.module("lr.upload.directives").directive("uploadButton",["upload",function(a){return{restrict:"EA",scope:{data:"=?data",url:"@",id:"@",param:"@",method:"@",onUpload:"&",onSuccess:"&",onError:"&",onComplete:"&"},link:function(b,c,d){var e=angular.element(c),f=angular.element('');if(e.append(f),f.on("change",function(){var c=angular.element(this);if(!c[0].files||0!==c[0].files.length){var e={url:b.url,method:b.method||"POST",forceIFrameUpload:b.$eval(d.forceIframeUpload)||!1,data:b.data||{}};e.data[b.param||"file"]=c,b.$apply(function(){b.onUpload({files:c[0].files})}),a(e).then(function(a){b.onSuccess({response:a}),b.onComplete({response:a})},function(a){b.onError({response:a}),b.onComplete({response:a})})}}),"required"in d&&d.$observe("required",function(a){var d=""===a?!0:b.$eval(a);f.attr("required",d),c.toggleClass("ng-valid",!d),c.toggleClass("ng-invalid ng-invalid-required",d)}),"accept"in d&&d.$observe("accept",function(a){f.attr("accept",a)}),a.support.formData){var g=function(){f.attr("multiple",!(!b.$eval(d.multiple)||b.$eval(d.forceIframeUpload)))};d.$observe("multiple",g),d.$observe("forceIframeUpload",g)}}}}]),angular.module("lr.upload.formdata",[]).factory("formDataTransform",function(){return function(a){var b=new FormData;return angular.forEach(a,function(a,c){if(angular.isElement(a)){var d=[];angular.forEach(a,function(a){angular.forEach(a.files,function(a){d.push(a)}),a.value=""}),0!==d.length&&(d.length>1?angular.forEach(d,function(a,d){b.append(c+"["+d+"]",a)}):b.append(c,d[0]))}else b.append(c,a)}),b}}).factory("formDataUpload",["$http","formDataTransform",function(a,b){return function(c){return c.transformRequest=b,c.method=c.method||"POST",c.headers=angular.extend(c.headers||{},{"Content-Type":void 0}),a(c)}}]),angular.module("lr.upload.iframe",[]).factory("iFrameUpload",["$q","$http","$document","$rootScope",function(a,b,c,d){function e(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c");n.attr("target",m),n.attr("action",f.url),n.attr("method",f.method||"POST"),n.css("display","none"),g.length&&(n.attr("enctype","multipart/form-data"),n.attr("encoding","multipart/form-data"));var o=angular.element('');return o.on("load",function(){function a(a,b){var c=[];return angular.isFunction(b)?b(a,c):(angular.forEach(b,function(b){a=b(a,c)}),a)}function c(){var a=e(b.pendingRequests,f);-1!==a&&(b.pendingRequests.splice(a,1),f.$iframeTransportForm.remove(),delete f.$iframeTransportForm)}o.off("load").on("load",function(){var c;try{var d=this.contentWindow?this.contentWindow.document:this.contentDocument;if(c=angular.element(d.body).text(),!c.length)throw new Error}catch(e){}n.append(angular.element(''));try{c=a(c,b.defaults.transformResponse)}catch(e){}h.resolve({data:c,status:200,headers:[],config:f})}),angular.forEach(f.data,function(a,b){var c=angular.element('');c.attr("name",b),c.val(a),n.append(c)}),angular.forEach(g,function(a){var b=a.clone(!0);a.after(b),n.append(a)}),f.$iframeTransportForm=n,b.pendingRequests.push(f),n[0].submit(),i.then(c,c)}),n.append(o),k.append(n),i}return f}]),angular.module("lr.upload").factory("upload",["$window","formDataUpload","iFrameUpload",function(a,b,c){function d(a){return e.formData&&!a.forceIFrameUpload?b(a):c(a)}var e={fileInput:!(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(a.navigator.userAgent)||angular.element('').prop("disabled")),fileUpload:!(!a.XMLHttpRequestUpload||!a.FileReader),formData:!!a.FormData};return d.support=e,d}]); \ No newline at end of file +"use strict"; +angular.module("lr.upload", ["lr.upload.formdata", "lr.upload.iframe", "lr.upload.directives"]), angular.module("lr.upload.directives", []), angular.module("lr.upload.directives").directive("uploadButton", ["upload", function (a) { + return { + restrict: "EA", + scope: { + data: "=?data", + url: "@", + id: "@", + param: "@", + method: "@", + onUpload: "&", + onSuccess: "&", + onError: "&", + onComplete: "&" + }, + link: function (b, c, d) { + var e = angular.element(c), f = angular.element(''); + if (e.append(f), f.on("change", function () { + var c = angular.element(this); + if (!c[0].files || 0 !== c[0].files.length) { + var e = { + url: b.url, + method: b.method || "POST", + forceIFrameUpload: b.$eval(d.forceIframeUpload) || !1, + data: b.data || {} + }; + e.data[b.param || "file"] = c, b.$apply(function () { + b.onUpload({files: c[0].files}) + }), a(e).then(function (a) { + b.onSuccess({response: a}), b.onComplete({response: a}) + }, function (a) { + b.onError({response: a}), b.onComplete({response: a}) + }) + } + }), "required" in d && d.$observe("required", function (a) { + var d = "" === a ? !0 : b.$eval(a); + f.attr("required", d), c.toggleClass("ng-valid", !d), c.toggleClass("ng-invalid ng-invalid-required", d) + }), "accept" in d && d.$observe("accept", function (a) { + f.attr("accept", a) + }), a.support.formData) { + var g = function () { + f.attr("multiple", !(!b.$eval(d.multiple) || b.$eval(d.forceIframeUpload))) + }; + d.$observe("multiple", g), d.$observe("forceIframeUpload", g) + } + } + } +}]), angular.module("lr.upload.formdata", []).factory("formDataTransform", function () { + return function (a) { + var b = new FormData; + return angular.forEach(a, function (a, c) { + if (angular.isElement(a)) { + var d = []; + angular.forEach(a, function (a) { + angular.forEach(a.files, function (a) { + d.push(a) + }), a.value = "" + }), 0 !== d.length && (d.length > 1 ? angular.forEach(d, function (a, d) { + b.append(c + "[" + d + "]", a) + }) : b.append(c, d[0])) + } else b.append(c, a) + }), b + } +}).factory("formDataUpload", ["$http", "formDataTransform", function (a, b) { + return function (c) { + return c.transformRequest = b, c.method = c.method || "POST", c.headers = angular.extend(c.headers || {}, {"Content-Type": void 0}), a(c) + } +}]), angular.module("lr.upload.iframe", []).factory("iFrameUpload", ["$q", "$http", "$document", "$rootScope", function (a, b, c, d) { + function e(a, b) { + if (a.indexOf)return a.indexOf(b); + for (var c = 0; c < a.length; c++)if (b === a[c])return c; + return -1 + } + + function f(f) { + var g = [], h = a.defer(), i = h.promise; + angular.forEach(f.data || {}, function (a, b) { + angular.isElement(a) && (delete f.data[b], a.attr("name", b), g.push(a)) + }); + var j = /\?/.test(f.url) ? "&" : "?"; + "DELETE" === f.method ? (f.url = f.url + j + "_method=DELETE", f.method = "POST") : "PUT" === f.method ? (f.url = f.url + j + "_method=PUT", f.method = "POST") : "PATCH" === f.method && (f.url = f.url + j + "_method=PATCH", f.method = "POST"); + var k = angular.element(c[0].body), l = d.$new(), m = "iframe-transport-" + l.$id; + l.$destroy(); + var n = angular.element("
    "); + n.attr("target", m), n.attr("action", f.url), n.attr("method", f.method || "POST"), n.css("display", "none"), g.length && (n.attr("enctype", "multipart/form-data"), n.attr("encoding", "multipart/form-data")); + var o = angular.element(''); + return o.on("load", function () { + function a(a, b) { + var c = []; + return angular.isFunction(b) ? b(a, c) : (angular.forEach(b, function (b) { + a = b(a, c) + }), a) + } + + function c() { + var a = e(b.pendingRequests, f); + -1 !== a && (b.pendingRequests.splice(a, 1), f.$iframeTransportForm.remove(), delete f.$iframeTransportForm) + } + + o.off("load").on("load", function () { + var c; + try { + var d = this.contentWindow ? this.contentWindow.document : this.contentDocument; + if (c = angular.element(d.body).text(), !c.length)throw new Error + } catch (e) { + } + n.append(angular.element('')); + try { + c = a(c, b.defaults.transformResponse) + } catch (e) { + } + h.resolve({data: c, status: 200, headers: [], config: f}) + }), angular.forEach(f.data, function (a, b) { + var c = angular.element(''); + c.attr("name", b), c.val(a), n.append(c) + }), angular.forEach(g, function (a) { + var b = a.clone(!0); + a.after(b), n.append(a) + }), f.$iframeTransportForm = n, b.pendingRequests.push(f), n[0].submit(), i.then(c, c) + }), n.append(o), k.append(n), i + } + + return f +}]), angular.module("lr.upload").factory("upload", ["$window", "formDataUpload", "iFrameUpload", function (a, b, c) { + function d(a) { + return e.formData && !a.forceIFrameUpload ? b(a) : c(a) + } + + var e = { + fileInput: !(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(a.navigator.userAgent) || angular.element('').prop("disabled")), + fileUpload: !(!a.XMLHttpRequestUpload || !a.FileReader), + formData: !!a.FormData + }; + return d.support = e, d +}]); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/angular.min.js b/apollo-portal/src/main/resources/static/vendor/angular/angular.min.js index 2c28ef96f..7d2afff5e 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/angular.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/angular.min.js @@ -2,289 +2,7086 @@ AngularJS v1.4.3 (c) 2010-2015 Google, Inc. http://angularjs.org License: MIT -*/ -(function(O,U,t){'use strict';function J(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.3/"+(b?b+"/":"")+a;for(a=1;a").append(b).html();try{return b[0].nodeType===Na?M(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+M(b)})}catch(d){return M(c)}}function yc(b){try{return decodeURIComponent(b)}catch(a){}}function zc(b){var a={},c,d;m((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g, -"%20").split("="),d=yc(c[0]),w(d)&&(b=w(c[1])?yc(c[1]):!0,Xa.call(a,d)?G(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Qb(b){var a=[];m(b,function(b,d){G(b)?m(b,function(b){a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))}):a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))});return a.length?a.join("&"):""}function ob(b){return ma(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ma(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g, -"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Yd(b,a){var c,d,e=Oa.length;for(d=0;d/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=eb(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},e= -/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;O&&e.test(O.name)&&(c.debugInfoEnabled=!0,O.name=O.name.replace(e,""));if(O&&!f.test(O.name))return d();O.name=O.name.replace(f,"");ca.resumeBootstrap=function(b){m(b,function(b){a.push(b)});return d()};z(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()}function $d(){O.name="NG_ENABLE_DEBUG_INFO!"+O.name;O.location.reload()}function ae(b){b=ca.element(b).injector();if(!b)throw Fa("test");return b.get("$$testability")}function Bc(b,a){a=a|| -"_";return b.replace(be,function(b,d){return(d?a:"")+b.toLowerCase()})}function ce(){var b;if(!Cc){var a=pb();la=O.jQuery;w(a)&&(la=null===a?t:O[a]);la&&la.fn.on?(y=la,P(la.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),b=la.cleanData,la.cleanData=function(a){var d;if(Rb)Rb=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d=la._data(f,"events"))&&d.$destroy&&la(f).triggerHandler("$destroy");b(a)}):y=Q;ca.element=y;Cc=!0}}function Sb(b, -a,c){if(!b)throw Fa("areq",a||"?",c||"required");return b}function Qa(b,a,c){c&&G(b)&&(b=b[b.length-1]);Sb(z(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ra(b,a){if("hasOwnProperty"===b)throw Fa("badname",a);}function Dc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g")+d[2];for(d=d[0];d--;)c=c.lastChild;f=cb(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";m(f,function(a){e.appendChild(a)});return e}function Q(b){if(b instanceof Q)return b;var a;L(b)&&(b=R(b),a=!0);if(!(this instanceof Q)){if(a&&"<"!=b.charAt(0))throw Ub("nosel");return new Q(b)}if(a){a=U; -var c;b=(c=Cf.exec(b))?[a.createElement(c[1])]:(c=Nc(b,a))?c.childNodes:[]}Oc(this,b)}function Vb(b){return b.cloneNode(!0)}function tb(b,a){a||ub(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;dk&&this.remove(s.key);return b}},get:function(a){if(k").parent()[0])});var f=S(a,b,a,c,d,e);Z.$$addScopeClass(a); -var g=null;return function(b,c,d){Sb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?y(Yb(g,y("
    ").append(a).html())):c?Pa.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);Z.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){function g(a, -c,d,e){var f,k,l,s,n,B,C;if(p)for(C=Array(c.length),s=0;sE.priority)break;if(v=E.scope)E.templateUrl|| -(H(v)?(O("new/isolated scope",u||$,E,ba),u=E):O("new/isolated scope",u,E,ba)),$=$||E;w=E.name;!E.templateUrl&&E.controller&&(v=E.controller,N=N||ga(),O("'"+w+"' controller",N[w],E,ba),N[w]=E);if(v=E.transclude)K=!0,E.$$tlb||(O("transclusion",m,E,ba),m=E),"element"==v?(q=!0,F=E.priority,v=ba,ba=d.$$element=y(U.createComment(" "+w+": "+d[w]+" ")),b=ba[0],T(f,za.call(v,0),b),A=Z(v,e,F,g&&g.name,{nonTlbTranscludeDirective:m})):(v=y(Vb(b)).contents(),ba.empty(),A=Z(v,e));if(E.template)if(I=!0,O("template", -D,E,ba),D=E,v=z(E.template)?E.template(ba,d):E.template,v=fa(v),E.replace){g=E;v=Tb.test(v)?$c(Yb(E.templateNamespace,R(v))):[];b=v[0];if(1!=v.length||b.nodeType!==qa)throw ea("tplrt",w,"");T(f,ba,b);Ta={$attr:{}};v=ha(b,[],Ta);var Q=a.splice(xa+1,a.length-(xa+1));u&&ad(v);a=a.concat(v).concat(Q);J(d,Ta);Ta=a.length}else ba.html(v);if(E.templateUrl)I=!0,O("template",D,E,ba),D=E,E.replace&&(g=E),S=Lf(a.splice(xa,a.length-xa),ba,d,f,K&&A,h,k,{controllerDirectives:N,newScopeDirective:$!==E&&$,newIsolateScopeDirective:u, -templateDirective:D,nonTlbTranscludeDirective:m}),Ta=a.length;else if(E.compile)try{Aa=E.compile(ba,d,A),z(Aa)?n(null,Aa,M,P):Aa&&n(Aa.pre,Aa.post,M,P)}catch(Kf){c(Kf,ua(ba))}E.terminal&&(S.terminal=!0,F=Math.max(F,E.priority))}S.scope=$&&!0===$.scope;S.transcludeOnThisElement=K;S.templateOnThisElement=I;S.transclude=A;s.hasElementTranscludeDirective=q;return S}function ad(a){for(var b=0,c=a.length;bn.priority)&&-1!=n.restrict.indexOf(f)&&(k&&(n=Ob(n,{$$start:k,$$end:l})),b.push(n),h=n)}catch(x){c(x)}}return h}function A(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d"+b+"";return c.childNodes[0].childNodes;default:return b}}function Q(a,b){if("srcdoc"==b)return I.HTML;var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b|| -"ngSrc"==b))return I.RESOURCE_URL}function V(a,c,d,e,f){var g=Q(a,e);f=h[e]||f;var l=b(d,!0,g,f);if(l){if("multiple"===e&&"select"===ta(a))throw ea("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers={});if(k.test(e))throw ea("nodomevents");var s=h[e];s!==d&&(l=s&&b(s,!0,g,f),d=s);l&&(h[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e, -a)}))}}}})}}function T(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g=a)return b;for(;a--;)8=== -b[a].nodeType&&Mf.call(b,a,1);return b}function Xe(){var b={},a=!1;this.register=function(a,d){Ra(a,"controller");H(a)?P(b,a):b[a]=d};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(c,d){function e(a,b,c,d){if(!a||!H(a.$scope))throw J("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,l){var k,n,r;h=!0===h;l&&L(l)&&(r=l);if(L(f)){l=f.match(Xc);if(!l)throw Nf("ctrlfmt",f);n=l[1];r=r||l[3];f=b.hasOwnProperty(n)?b[n]:Dc(g.$scope,n,!0)||(a?Dc(d,n,!0):t);Qa(f, -n,!0)}if(h)return h=(G(f)?f[f.length-1]:f).prototype,k=Object.create(h||null),r&&e(g,r,k,n||f.name),P(function(){var a=c.invoke(f,k,g,n);a!==k&&(H(a)||z(a))&&(k=a,r&&e(g,r,k,n||f.name));return k},{instance:k,identifier:r});k=c.instantiate(f,g,n);r&&e(g,r,k,n||f.name);return k}}]}function Ye(){this.$get=["$window",function(b){return y(b.document)}]}function Ze(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Zb(b){return H(b)?aa(b)?b.toISOString():db(b):b} -function cf(){this.$get=function(){return function(b){if(!b)return"";var a=[];oc(b,function(b,d){null===b||A(b)||(G(b)?m(b,function(b,c){a.push(ma(d)+"="+ma(Zb(b)))}):a.push(ma(d)+"="+ma(Zb(b))))});return a.join("&")}}}function df(){this.$get=function(){return function(b){function a(b,e,f){null===b||A(b)||(G(b)?m(b,function(b){a(b,e+"[]")}):H(b)&&!aa(b)?oc(b,function(b,c){a(b,e+(f?"":"[")+c+(f?"":"]"))}):c.push(ma(e)+"="+ma(Zb(b))))}if(!b)return"";var c=[];a(b,"",!0);return c.join("&")}}}function $b(b, -a){if(L(b)){var c=b.replace(Of,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(cd))||(d=(d=c.match(Pf))&&Qf[d[0]].test(c));d&&(b=wc(c))}}return b}function dd(b){var a=ga(),c;L(b)?m(b.split("\n"),function(b){c=b.indexOf(":");var e=M(R(b.substr(0,c)));b=R(b.substr(c+1));e&&(a[e]=a[e]?a[e]+", "+b:b)}):H(b)&&m(b,function(b,c){var f=M(c),g=R(b);f&&(a[f]=a[f]?a[f]+", "+g:g)});return a}function ed(b){var a;return function(c){a||(a=dd(b));return c?(c=a[M(c)],void 0===c&&(c=null),c):a}}function fd(b, -a,c,d){if(z(d))return d(b,a,c);m(d,function(d){b=d(b,a,c)});return b}function bf(){var b=this.defaults={transformResponse:[$b],transformRequest:[function(a){return H(a)&&"[object File]"!==sa.call(a)&&"[object Blob]"!==sa.call(a)&&"[object FormData]"!==sa.call(a)?db(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ia(ac),put:ia(ac),patch:ia(ac)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},a=!1;this.useApplyAsync=function(b){return w(b)? -(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=P({},a);b.data=a.data?fd(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}function d(a,b){var c,e={};m(a,function(a,d){z(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}if(!ca.isObject(a))throw J("$http")("badreq",a);var e=P({method:"get",transformRequest:b.transformRequest, -transformResponse:b.transformResponse,paramSerializer:b.paramSerializer},a);e.headers=function(a){var c=b.headers,e=P({},a.headers),f,g,h,c=P({},c.common,c[M(a.method)]);a:for(f in c){g=M(f);for(h in e)if(M(h)===g)continue a;e[f]=c[f]}return d(e,ia(a))}(a);e.method=rb(e.method);e.paramSerializer=L(e.paramSerializer)?l.get(e.paramSerializer):e.paramSerializer;var f=[function(a){var d=a.headers,e=fd(a.data,ed(d),t,a.transformRequest);A(e)&&m(d,function(a,b){"content-type"===M(b)&&delete d[b]});A(a.withCredentials)&& -!A(b.withCredentials)&&(a.withCredentials=b.withCredentials);return n(a,e).then(c,c)},t],g=h.when(e);for(m(x,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(),g=g.then(a,k)}g.success=function(a){Qa(a,"fn");g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=function(a){Qa(a,"fn");g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g} -function n(c,f){function l(b,c,d,e){function f(){n(c,b,d,e)}N&&(200<=b&&300>b?N.put(S,[b,c,dd(d),e]):N.remove(S));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function n(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?I.resolve:I.reject)({data:a,status:b,headers:ed(d),config:c,statusText:e})}function x(a){n(a.data,a.status,ia(a.headers()),a.statusText)}function m(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,1)}var I=h.defer(),B=I.promise,N,D,q=c.headers,S=r(c.url,c.paramSerializer(c.params)); -k.pendingRequests.push(c);B.then(m,m);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(N=H(c.cache)?c.cache:H(b.cache)?b.cache:s);N&&(D=N.get(S),w(D)?D&&z(D.then)?D.then(x,x):G(D)?n(D[1],D[0],ia(D[2]),D[3]):n(D,200,{},"OK"):N.put(S,B));A(D)&&((D=gd(c.url)?e()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(q[c.xsrfHeaderName||b.xsrfHeaderName]=D),d(c.method,S,f,l,q,c.timeout,c.withCredentials,c.responseType));return B}function r(a,b){0=l&&(u.resolve(C),x(p.$$intervalId),delete f[p.$$intervalId]);F||b.$apply()},h);f[p.$$intervalId]=u;return p}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function ge(){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",ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"]},pluralCat:function(b){return 1===b?"one":"other"}}}}function bc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=ob(b[a]);return b.join("/")}function hd(b,a){var c=Ba(b);a.$$protocol=c.protocol; -a.$$host=c.hostname;a.$$port=W(c.port)||Tf[c.protocol]||null}function id(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=zc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ya(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ja(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Bb(b){return b.replace(/(#.+)|#$/, -"$1")}function cc(b){return b.substr(0,Ja(b).lastIndexOf("/")+1)}function dc(b,a){this.$$html5=!0;a=a||"";var c=cc(b);hd(b,this);this.$$parse=function(a){var b=ya(c,a);if(!L(b))throw Cb("ipthprfx",a,c);id(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),b=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)), -!0;var f,g;(f=ya(b,d))!==t?(g=f,g=(f=ya(a,f))!==t?c+(ya("/",f)||f):b+g):(f=ya(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ec(b,a){var c=cc(b);hd(b,this);this.$$parse=function(d){var e=ya(b,d)||ya(c,d),f;A(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",A(e)&&(b=d,this.replace())):(f=ya(a,e),A(f)&&(f=e));id(f,this);d=this.$$path;var e=b,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(d=(f=g.exec(d))?f[1]:d);this.$$path=d;this.$$compose()};this.$$compose= -function(){var c=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ja(b)==Ja(a)?(this.$$parse(a),!0):!1}}function jd(b,a){this.$$html5=!0;ec.apply(this,arguments);var c=cc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ja(d)?f=d:(g=ya(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c= -Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Db(b){return function(){return this[b]}}function kd(b,a){return function(c){if(A(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ff(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return w(a)?(b=a,this):b};this.html5Mode=function(b){return ab(b)?(a.enabled=b,this):H(b)?(ab(b.enabled)&&(a.enabled=b.enabled), -ab(b.requireBase)&&(a.requireBase=b.requireBase),ab(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var r=d.url(),s;if(a.enabled){if(!n&&a.requireBase)throw Cb("nobase");s=r.substring(0, -r.indexOf("/",r.indexOf("//")+2))+(n||"/");n=e.history?dc:jd}else s=Ja(r),n=ec;k=new n(s,"#"+b);k.$$parseLinkUrl(r,r);k.$$state=d.state();var x=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=y(b.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Ba(h.animVal).href);x.test(h)|| -!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});Bb(k.absUrl())!=Bb(r)&&d.url(k.absUrl(),!0);var C=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(C=!1,l(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a= -Bb(d.url()),b=Bb(k.absUrl()),f=d.state(),g=k.$$replace,n=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(C||n)C=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(n&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function gf(){var b=!0,a=this;this.debugEnabled=function(a){return w(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||v;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];m(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 Ca(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw da("isecfld",a);return b}function oa(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b.window===b)throw da("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw da("isecdom",a);if(b===Object)throw da("isecobj",a);}return b}function ld(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b===Uf||b===Vf||b===Wf)throw da("isecff",a); -}}function Xf(b,a){return"undefined"!==typeof b?b:a}function md(b,a){return"undefined"===typeof b?a:"undefined"===typeof a?b:b+a}function T(b,a){var c,d;switch(b.type){case q.Program:c=!0;m(b.body,function(b){T(b.expression,a);c=c&&b.expression.constant});b.constant=c;break;case q.Literal:b.constant=!0;b.toWatch=[];break;case q.UnaryExpression:T(b.argument,a);b.constant=b.argument.constant;b.toWatch=b.argument.toWatch;break;case q.BinaryExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&& -b.right.constant;b.toWatch=b.left.toWatch.concat(b.right.toWatch);break;case q.LogicalExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.constant?[]:[b];break;case q.ConditionalExpression:T(b.test,a);T(b.alternate,a);T(b.consequent,a);b.constant=b.test.constant&&b.alternate.constant&&b.consequent.constant;b.toWatch=b.constant?[]:[b];break;case q.Identifier:b.constant=!1;b.toWatch=[b];break;case q.MemberExpression:T(b.object,a);b.computed&&T(b.property,a); -b.constant=b.object.constant&&(!b.computed||b.property.constant);b.toWatch=[b];break;case q.CallExpression:c=b.filter?!a(b.callee.name).$stateful:!1;d=[];m(b.arguments,function(b){T(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=b.filter&&!a(b.callee.name).$stateful?d:[b];break;case q.AssignmentExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=[b];break;case q.ArrayExpression:c=!0;d=[];m(b.elements,function(b){T(b,a);c= -c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=d;break;case q.ObjectExpression:c=!0;d=[];m(b.properties,function(b){T(b.value,a);c=c&&b.value.constant;b.value.constant||d.push.apply(d,b.value.toWatch)});b.constant=c;b.toWatch=d;break;case q.ThisExpression:b.constant=!1,b.toWatch=[]}}function nd(b){if(1==b.length){b=b[0].expression;var a=b.toWatch;return 1!==a.length?a:a[0]!==b?a:t}}function od(b){return b.type===q.Identifier||b.type===q.MemberExpression}function pd(b){if(1=== -b.body.length&&od(b.body[0].expression))return{type:q.AssignmentExpression,left:b.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function qd(b){return 0===b.body.length||1===b.body.length&&(b.body[0].expression.type===q.Literal||b.body[0].expression.type===q.ArrayExpression||b.body[0].expression.type===q.ObjectExpression)}function rd(b,a){this.astBuilder=b;this.$filter=a}function sd(b,a){this.astBuilder=b;this.$filter=a}function Eb(b,a,c,d){oa(b,d);a=a.split(".");for(var e,f=0;1< -a.length;f++){e=Ca(a.shift(),d);var g=oa(b[e],d);g||(g={},b[e]=g);b=g}e=Ca(a.shift(),d);oa(b[e],d);return b[e]=c}function Fb(b){return"constructor"==b}function fc(b){return z(b.valueOf)?b.valueOf():Yf.call(b)}function hf(){var b=ga(),a=ga();this.$get=["$filter","$sniffer",function(c,d){function e(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function f(a,b,c,d,f){var g=d.inputs,h;if(1===g.length){var k=e,g=g[0];return a.$watch(function(a){var b= -g(a);e(b,k)||(h=d(a,t,t,[b]),k=b&&fc(b));return h},b,c,f)}for(var l=[],n=[],r=0,m=g.length;r=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;fa)for(b in l++,f)e.hasOwnProperty(b)|| -(m--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1m&&(E=4-m,u[E]||(u[E]=[]),u[E].push({msg:z(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:h}));else if(b===d){s=!1;break a}}catch(A){g(A)}if(!(k=x.$$watchersCount&&x.$$childHead||x!==this&&x.$$nextSibling))for(;x!== -this&&!(k=x.$$nextSibling);)x=x.$parent}while(x=k);if((s||t.length)&&!m--)throw p.$$phase=null,c("infdig",a,u);}while(s||t.length);for(p.$$phase=null;w.length;)try{w.shift()()}catch(y){g(y)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===p&&l.$$applicationDestroyed();s(this,-this.$$watchersCount);for(var b in this.$$listenerCount)x(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail== -this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=v;this.$on=this.$watch=this.$watchGroup=function(){return v};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}},$eval:function(a,b){return h(a)(this,b)}, -$evalAsync:function(a,b){p.$$phase||t.length||l.defer(function(){t.length&&p.$digest()});t.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){w.push(a)},$apply:function(a){try{return r("$apply"),this.$eval(a)}catch(b){g(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&I.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]|| -(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,x(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=cb([h],arguments,1),l,n;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(n=d.length;lUa)throw Da("iequirks");var d=ia(pa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs= -d.getTrusted=function(a,b){return b},d.valueOf=Ya);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;m(pa,function(a,b){var c=M(b);d[hb("parse_as_"+c)]=function(b){return e(a,b)};d[hb("get_trusted_"+c)]=function(b){return f(a,b)};d[hb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function of(){this.$get=["$window","$document",function(b,a){var c={},d=W((/android (\d+)/.exec(M((b.navigator|| -{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var r in l)if(k=h.exec(r)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);n=!!("animation"in l||g+"Animation"in l);!d||k&&n||(k=L(l.webkitTransition),n=L(l.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"=== -a&&11>=Ua)return!1;if(A(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:fb(),vendorPrefix:g,transitions:k,animations:n,android:d}}]}function qf(){this.$get=["$templateCache","$http","$q","$sce",function(b,a,c,d){function e(f,g){e.totalPendingRequests++;L(f)&&b.get(f)||(f=d.getTrustedResourceUrl(f));var h=a.defaults&&a.defaults.transformResponse;G(h)?h=h.filter(function(a){return a!==$b}):h===$b&&(h=null);return a.get(f,{cache:b,transformResponse:h})["finally"](function(){e.totalPendingRequests--}).then(function(a){b.put(f, -a.data);return a.data},function(a){if(!g)throw ea("tpload",f,a.status,a.statusText);return c.reject(a)})}e.totalPendingRequests=0;return e}]}function rf(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];m(a,function(a){var d=ca.element(a).data("$binding");d&&m(d,function(d){c?(new RegExp("(^|\\s)"+ud(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a, -b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;hb;b=Math.abs(b);var g=Infinity===b;if(!g&&!isFinite(b))return"";var h=b+"",l="",k=!1,n=[];g&&(l="\u221e"); -if(!g&&-1!==h.indexOf("e")){var r=h.match(/([\d\.]+)e(-?)(\d+)/);r&&"-"==r[2]&&r[3]>e+1?b=0:(l=h,k=!0)}if(g||k)0b&&(l=b.toFixed(e),b=parseFloat(l));else{g=(h.split(Dd)[1]||"").length;A(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(Dd),h=g[0],g=g[1]||"",r=0,s=a.lgSize,m=a.gSize;if(h.length>=s+m)for(r=h.length-s,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=rb(a?"SHORT"+b:b);return d[f][e]}}function Ed(b){var a= -(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Fd(b){return function(a){var c=Ed(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function jc(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function zd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=W(b[9]+b[10]),g=W(b[9]+b[11]));h.call(a,W(b[1]), -W(b[2])-1,W(b[3]));f=W(b[4]||0)-f;g=W(b[5]||0)-g;h=W(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,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,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;L(c)&&(c=fg.test(c)?W(c):a(c));V(c)&&(c=new Date(c));if(!aa(c)||!isFinite(c.getTime()))return c;for(;e;)(k=gg.exec(e))?(h=cb(h,k,1),e=h.pop()):(h.push(e),e=null);var n=c.getTimezoneOffset(); -f&&(n=xc(f,c.getTimezoneOffset()),c=Pb(c,f,!0));m(h,function(a){l=hg[a];g+=l?l(c,b.DATETIME_FORMATS,n):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function ag(){return function(b,a){A(a)&&(a=2);return db(b,a)}}function bg(){return function(b,a,c){a=Infinity===Math.abs(Number(a))?Number(a):W(a);if(isNaN(a))return b;V(b)&&(b=b.toString());if(!G(b)&&!L(b))return b;c=!c||isNaN(c)?0:W(c);c=0>c&&c>=-b.length?b.length+c:c;return 0<=a?b.slice(c,c+a):0===c?b.slice(a,b.length):b.slice(Math.max(0, -c+a),c)}}function Bd(b){function a(a,c){c=c?-1:1;return a.map(function(a){var d=1,h=Ya;if(z(a))h=a;else if(L(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))d="-"==a.charAt(0)?-1:1,a=a.substring(1);if(""!==a&&(h=b(a),h.constant))var l=h(),h=function(a){return a[l]}}return{get:h,descending:d*c}})}function c(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(b,e,f){if(!Ea(b))return b;G(e)||(e=[e]);0===e.length&&(e=["+"]);var g=a(e,f);b=Array.prototype.map.call(b, -function(a,b){return{value:a,predicateValues:g.map(function(d){var e=d.get(a);d=typeof e;if(null===e)d="string",e="null";else if("string"===d)e=e.toLowerCase();else if("object"===d)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),c(e)))break a;if(rc(e)&&(e=e.toString(),c(e)))break a;e=b}return{value:e,type:d}})}});b.sort(function(a,b){for(var c=0,d=0,e=g.length;db||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Kb(b,a){return function(c,d){var e,f;if(aa(c))return c;if(L(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1)); -if(ig.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},m(e,function(b,c){c=F};g.$observe("min",function(a){F=s(a);h.$validate()})}if(w(g.max)||g.ngMax){var u; -h.$validators.max=function(a){return!r(a)||A(u)||c(a)<=u};g.$observe("max",function(a){u=s(a);h.$validate()})}}}function Id(b,a,c,d){(d.$$hasNativeValidators=H(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function Jd(b,a,c,d,e){if(w(d)){b=b(d);if(!b.constant)throw J("ngModel")("constexpr",c,d);return b(a)}return e}function lc(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,Af=/<([\w:]+)/,Bf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,na={option:[1,'"],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};na.optgroup=na.option;na.tbody=na.tfoot=na.colgroup=na.caption=na.thead; -na.th=na.td;var Pa=Q.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),Q(O).on("load",a))},toString:function(){var b=[];m(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:kg,sort:[].sort,splice:[].splice},Ab={};m("multiple selected checked disabled readOnly required open".split(" "),function(b){Ab[M(b)]=b});var Tc={};m("input select option textarea button form details".split(" "), -function(b){Tc[b]=!0});var Uc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};m({data:Wb,removeData:ub,hasData:function(b){for(var a in ib[b.ng339])return!0;return!1}},function(b,a){Q[a]=b});m({data:Wb,inheritedData:zb,scope:function(b){return y.data(b,"$scope")||zb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return y.data(b,"$isolateScope")||y.data(b,"$isolateScopeNoTemplate")},controller:Qc,injector:function(b){return zb(b, -"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:wb,css:function(b,a,c){a=hb(a);if(w(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=b.nodeType;if(d!==Na&&2!==d&&8!==d)if(d=M(a),Ab[d])if(w(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||v).specified?d:t;else if(w(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(w(c))b[a]=c;else return b[a]}, -text:function(){function b(a,b){if(A(b)){var d=a.nodeType;return d===qa||d===Na?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(A(a)){if(b.multiple&&"select"===ta(b)){var c=[];m(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(A(a))return b.innerHTML;tb(b,!0);b.innerHTML=a},empty:Rc},function(b,a){Q.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Rc&&(2==b.length&&b!==wb&&b!==Qc? -a:d)===t){if(H(a)){for(e=0;e <= >= && || ! = |".split(" "),function(a){Mb[a]=!0});var qg={n:"\n",f:"\f",r:"\r", -t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index=a&&"string"===typeof 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=w(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw da("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">=");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:c.text, -left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=fa(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant(): -this.throwError("not a primary expression",this.peek());for(var c;c=this.expect("(","[",".");)"("===c.text?(a={type:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===c.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===c.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var c={type:q.CallExpression,callee:this.identifier(), -arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break; -a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:q.ArrayExpression,elements:a}},object:function(){var a=[],c;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;c={type:q.Property,kind:"init"};this.peek().constant?c.key=this.constant():this.peek().identifier?c.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");c.value=this.expression();a.push(c)}while(this.expect(","))}this.consume("}");return{type:q.ObjectExpression,properties:a}}, -throwError:function(a,c){throw da("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},consume:function(a){if(0===this.tokens.length)throw da("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},peekToken:function(){if(0===this.tokens.length)throw da("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a]; -var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},constants:{"true":{type:q.Literal,value:!0},"false":{type:q.Literal,value:!1},"null":{type:q.Literal,value:null},undefined:{type:q.Literal,value:t},"this":{type:q.ThisExpression}}};rd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:c,fn:{vars:[],body:[],own:{}},assign:{vars:[], -body:[],own:{}},inputs:[]};T(e,d.$filter);var f="",g;this.stage="assign";if(g=pd(e))this.state.computing="assign",f=this.nextId(),this.recurse(g,f),f="fn.assign="+this.generateFunction("assign","s,v,l");g=nd(e.body);d.stage="inputs";m(g,function(a,c){var e="fn"+c;d.state[e]={vars:[],body:[],own:{}};d.state.computing=e;var f=d.nextId();d.recurse(a,f);d.return_(f);d.state.inputs.push(e);a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(e);f='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+ -"var fn="+this.generateFunction("fn","s,l,a,i")+f+this.watchFns()+"return fn;";f=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","ifDefined","plus","text",f))(this.$filter,Ca,oa,ld,Xf,md,a);this.state=this.stage=t;f.literal=qd(e);f.constant=e.constant;return f},USE:"use",STRICT:"strict",watchFns:function(){var a=[],c=this.state.inputs,d=this;m(c,function(c){a.push("var "+c+"="+d.generateFunction(c,"s"))});c.length&&a.push("fn.inputs=["+c.join(",")+"];");return a.join("")}, -generateFunction:function(a,c){return"function("+c+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],c=this;m(this.state.filters,function(d,e){a.push(d+"=$filter("+c.escape(e)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,c,d,e,f,g){var h,l,k=this,n,r;e=e||v;if(!g&&w(a.watchId))c=c||this.nextId(),this.if_("i", -this.lazyAssign(c,this.computedMember("i",a.watchId)),this.lazyRecurse(a,c,d,e,f,!0));else switch(a.type){case q.Program:m(a.body,function(c,d){k.recurse(c.expression,t,t,function(a){l=a});d!==a.body.length-1?k.current().body.push(l,";"):k.return_(l)});break;case q.Literal:r=this.escape(a.value);this.assign(c,r);e(r);break;case q.UnaryExpression:this.recurse(a.argument,t,t,function(a){l=a});r=a.operator+"("+this.ifDefined(l,0)+")";this.assign(c,r);e(r);break;case q.BinaryExpression:this.recurse(a.left, -t,t,function(a){h=a});this.recurse(a.right,t,t,function(a){l=a});r="+"===a.operator?this.plus(h,l):"-"===a.operator?this.ifDefined(h,0)+a.operator+this.ifDefined(l,0):"("+h+")"+a.operator+"("+l+")";this.assign(c,r);e(r);break;case q.LogicalExpression:c=c||this.nextId();k.recurse(a.left,c);k.if_("&&"===a.operator?c:k.not(c),k.lazyRecurse(a.right,c));e(c);break;case q.ConditionalExpression:c=c||this.nextId();k.recurse(a.test,c);k.if_(c,k.lazyRecurse(a.alternate,c),k.lazyRecurse(a.consequent,c));e(c); -break;case q.Identifier:c=c||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ca(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){f&&1!==f&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(c,k.nonComputedMember("s",a.name))})},c&&k.lazyAssign(c,k.nonComputedMember("l", -a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(c);e(c);break;case q.MemberExpression:h=d&&(d.context=this.nextId())||this.nextId();c=c||this.nextId();k.recurse(a.object,h,t,function(){k.if_(k.notNull(h),function(){if(a.computed)l=k.nextId(),k.recurse(a.property,l),k.addEnsureSafeMemberName(l),f&&1!==f&&k.if_(k.not(k.computedMember(h,l)),k.lazyAssign(k.computedMember(h,l),"{}")),r=k.ensureSafeObject(k.computedMember(h,l)),k.assign(c,r),d&&(d.computed=!0,d.name=l);else{Ca(a.property.name); -f&&1!==f&&k.if_(k.not(k.nonComputedMember(h,a.property.name)),k.lazyAssign(k.nonComputedMember(h,a.property.name),"{}"));r=k.nonComputedMember(h,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))r=k.ensureSafeObject(r);k.assign(c,r);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(c,"undefined")});e(c)},!!f);break;case q.CallExpression:c=c||this.nextId();a.filter?(l=k.filter(a.callee.name),n=[],m(a.arguments,function(a){var c=k.nextId();k.recurse(a,c);n.push(c)}),r=l+ -"("+n.join(",")+")",k.assign(c,r),e(c)):(l=k.nextId(),h={},n=[],k.recurse(a.callee,l,h,function(){k.if_(k.notNull(l),function(){k.addEnsureSafeFunction(l);m(a.arguments,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(k.ensureSafeObject(a))})});h.name?(k.state.expensiveChecks||k.addEnsureSafeObject(h.context),r=k.member(h.context,h.name,h.computed)+"("+n.join(",")+")"):r=l+"("+n.join(",")+")";r=k.ensureSafeObject(r);k.assign(c,r)},function(){k.assign(c,"undefined")});e(c)}));break;case q.AssignmentExpression:l= -this.nextId();h={};if(!od(a.left))throw da("lval");this.recurse(a.left,t,h,function(){k.if_(k.notNull(h.context),function(){k.recurse(a.right,l);k.addEnsureSafeObject(k.member(h.context,h.name,h.computed));r=k.member(h.context,h.name,h.computed)+a.operator+l;k.assign(c,r);e(c||r)})},1);break;case q.ArrayExpression:n=[];m(a.elements,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(a)})});r="["+n.join(",")+"]";this.assign(c,r);e(r);break;case q.ObjectExpression:n=[];m(a.properties,function(a){k.recurse(a.value, -k.nextId(),t,function(c){n.push(k.escape(a.key.type===q.Identifier?a.key.name:""+a.key.value)+":"+c)})});r="{"+n.join(",")+"}";this.assign(c,r);e(r);break;case q.ThisExpression:this.assign(c,"s");e("s");break;case q.NGValueParameter:this.assign(c,"v"),e("v")}},getHasOwnProperty:function(a,c){var d=a+"."+c,e=this.current().own;e.hasOwnProperty(d)||(e[d]=this.nextId(!1,a+"&&("+this.escape(c)+" in "+a+")"));return e[d]},assign:function(a,c){if(a)return this.current().body.push(a,"=",c,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)|| -(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,c){return"ifDefined("+a+","+this.escape(c)+")"},plus:function(a,c){return"plus("+a+","+c+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,c,d){if(!0===a)c();else{var e=this.current().body;e.push("if(",a,"){");c();e.push("}");d&&(e.push("else{"),d(),e.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,c){return a+ -"."+c},computedMember:function(a,c){return a+"["+c+"]"},member:function(a,c,d){return d?this.computedMember(a,c):this.nonComputedMember(a,c)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+ -a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},lazyRecurse:function(a,c,d,e,f,g){var h=this;return function(){h.recurse(a,c,d,e,f,g)}},lazyAssign:function(a,c){var d=this;return function(){d.assign(a,c)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(L(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(V(a))return a.toString();if(!0===a)return"true"; -if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw da("esc");},nextId:function(a,c){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(c?"="+c:""));return d},current:function(){return this.state[this.state.computing]}};sd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=c;T(e,d.$filter);var f,g;if(f=pd(e))g=this.recurse(f);f=nd(e.body);var h;f&&(h=[],m(f,function(a,c){var e=d.recurse(a); -a.input=e;h.push(e);a.watchId=c}));var l=[];m(e.body,function(a){l.push(d.recurse(a.expression))});f=0===e.body.length?function(){}:1===e.body.length?l[0]:function(a,c){var d;m(l,function(e){d=e(a,c)});return d};g&&(f.assign=function(a,c,d){return g(a,d,c)});h&&(f.inputs=h);f.literal=qd(e);f.constant=e.constant;return f},recurse:function(a,c,d){var e,f,g=this,h;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case q.Literal:return this.value(a.value,c);case q.UnaryExpression:return f= -this.recurse(a.argument),this["unary"+a.operator](f,c);case q.BinaryExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.LogicalExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),c);case q.Identifier:return Ca(a.name,g.expression),g.identifier(a.name,g.expensiveChecks||Fb(a.name), -c,d,g.expression);case q.MemberExpression:return e=this.recurse(a.object,!1,!!d),a.computed||(Ca(a.property.name,g.expression),f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(e,f,c,d,g.expression):this.nonComputedMember(e,f,g.expensiveChecks,c,d,g.expression);case q.CallExpression:return h=[],m(a.arguments,function(a){h.push(g.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?function(a,d,e,g){for(var m= -[],q=0;q":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>c(e,f,g,h);return d?{value:e}:e}},"binary<=":function(a,c,d){return function(e, -f,g,h){e=a(e,f,g,h)<=c(e,f,g,h);return d?{value:e}:e}},"binary>=":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>=c(e,f,g,h);return d?{value:e}:e}},"binary&&":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)&&c(e,f,g,h);return d?{value:e}:e}},"binary||":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)||c(e,f,g,h);return d?{value:e}:e}},"ternary?:":function(a,c,d,e){return function(f,g,h,l){f=a(f,g,h,l)?c(f,g,h,l):d(f,g,h,l);return e?{value:f}:f}},value:function(a,c){return function(){return c? -{context:t,name:t,value:a}:a}},identifier:function(a,c,d,e,f){return function(g,h,l,k){g=h&&a in h?h:g;e&&1!==e&&g&&!g[a]&&(g[a]={});h=g?g[a]:t;c&&oa(h,f);return d?{context:g,name:a,value:h}:h}},computedMember:function(a,c,d,e,f){return function(g,h,l,k){var n=a(g,h,l,k),m,s;null!=n&&(m=c(g,h,l,k),Ca(m,f),e&&1!==e&&n&&!n[m]&&(n[m]={}),s=n[m],oa(s,f));return d?{context:n,name:m,value:s}:s}},nonComputedMember:function(a,c,d,e,f,g){return function(h,l,k,n){h=a(h,l,k,n);f&&1!==f&&h&&!h[c]&&(h[c]={}); -l=null!=h?h[c]:t;(d||Fb(c))&&oa(l,g);return e?{context:h,name:c,value:l}:l}},inputs:function(a,c){return function(d,e,f,g){return g?g[c]:a(d,e,f)}}};var hc=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d;this.ast=new q(this.lexer);this.astCompiler=d.csp?new sd(this.ast,c):new rd(this.ast,c)};hc.prototype={constructor:hc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};ga();ga();var Yf=Object.prototype.valueOf,Da=J("$sce"),pa={HTML:"html",CSS:"css",URL:"url", -RESOURCE_URL:"resourceUrl",JS:"js"},ea=J("$compile"),X=U.createElement("a"),wd=Ba(O.location.href);xd.$inject=["$document"];Lc.$inject=["$provide"];yd.$inject=["$locale"];Ad.$inject=["$locale"];var Dd=".",hg={yyyy:Y("FullYear",4),yy:Y("FullYear",2,0,!0),y:Y("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:Y("Month",2,1),M:Y("Month",1,1),dd:Y("Date",2),d:Y("Date",1),HH:Y("Hours",2),H:Y("Hours",1),hh:Y("Hours",2,-12),h:Y("Hours",1,-12),mm:Y("Minutes",2),m:Y("Minutes",1),ss:Y("Seconds",2),s:Y("Seconds", -1),sss:Y("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a,c,d){a=-1*d;return a=(0<=a?"+":"")+(Gb(Math[0=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1]}},gg=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,fg=/^\-?\d+$/;zd.$inject=["$locale"];var cg=ra(M),dg=ra(rb);Bd.$inject= -["$parse"];var ie=ra({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===sa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),sb={};m(Ab,function(a,c){function d(a,d,f){a.$watch(f[e],function(a){f.$set(c,!!a)})}if("multiple"!=a){var e=wa("ng-"+c),f=d;"checked"===a&&(f=function(a,c,f){f.ngModel!==f[e]&&d(a,c,f)});sb[e]=function(){return{restrict:"A", -priority:100,link:f}}}});m(Uc,function(a,c){sb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(jg))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});m(["src","srcset","href"],function(a){var c=wa("ng-"+a);sb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===sa.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href", -g=null);f.$observe(c,function(c){c?(f.$set(h,c),Ua&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Ib={$addControl:v,$$renameControl:function(a,c){a.$name=c},$removeControl:v,$setValidity:v,$setDirty:v,$setPristine:v,$setSubmitted:v};Gd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Od=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Gd,compile:function(d,e){d.addClass(Va).addClass(mb);var f=e.name?"name":a&&e.ngForm?"ngForm": -!1;return{pre:function(a,d,e,k){if(!("action"in e)){var n=function(c){a.$apply(function(){k.$commitViewValue();k.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",n,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",n,!1)},0,!1)})}var m=k.$$parentForm;f&&(Eb(a,k.$name,k,k.$name),e.$observe(f,function(c){k.$name!==c&&(Eb(a,k.$name,t,k.$name),m.$$renameControl(k,c),Eb(a,k.$name,k,k.$name))}));d.on("$destroy",function(){m.$removeControl(k);f&&Eb(a,e[f],t, -k.$name);P(k,Ib)})}}}}}]},je=Od(),we=Od(!0),ig=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,rg=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,sg=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,tg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Pd=/^(\d{4})-(\d{2})-(\d{2})$/,Qd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,mc=/^(\d{4})-W(\d\d)$/,Rd=/^(\d{4})-(\d\d)$/, -Sd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Td={text:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e)},date:lb("date",Pd,Kb(Pd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":lb("datetimelocal",Qd,Kb(Qd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:lb("time",Sd,Kb(Sd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:lb("week",mc,function(a,c){if(aa(a))return a;if(L(a)){mc.lastIndex=0;var d=mc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=Ed(e),f=7*(f-1);c&&(d=c.getHours(),g= -c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:lb("month",Rd,Kb(Rd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){Id(a,c,d,e);kb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:tg.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw Lb("numfmt",a);a=a.toString()}return a});if(w(d.min)||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)|| -A(h)||a>=h};d.$observe("min",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));h=V(a)&&!isNaN(a)?a:t;e.$validate()})}if(w(d.max)||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||A(l)||a<=l};d.$observe("max",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||rg.test(d)}},email:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e); -e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||sg.test(d)}},radio:function(a,c,d,e){A(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=Jd(l,a,"ngTrueValue",d.ngTrueValue,!0),n=Jd(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&& -a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ka(a,k)});e.$parsers.push(function(a){return a?k:n})},hidden:v,button:v,submit:v,reset:v,file:v},Fc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Td[M(h.type)]||Td.text)(f,g,h,l[0],c,a,d,e)}}}}],ug=/^(true|false|\d+)$/,Oe=function(){return{restrict:"A",priority:100,compile:function(a, -c){return ug.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)})}}}},oe=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],qe=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate)); -c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===t?"":a})}}}}],pe=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],Ne=ra({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), -re=lc("",!0),te=lc("Odd",0),se=lc("Even",1),ue=Ma({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),ve=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Kc={},vg={blur:!0,focus:!0};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=wa("ng-"+a);Kc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h= -d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};vg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ye=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;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= -qb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],ze=["$templateRequest","$anchorScroll","$animate",function(a,c,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(e,f){var g=f.ngInclude||f.src,h=f.onload||"",l=f.autoscroll;return function(e,f,m,s,q){var t=0,F,u,p,v=function(){u&&(u.remove(),u=null);F&&(F.$destroy(),F=null);p&&(d.leave(p).then(function(){u=null}),u=p,p=null)};e.$watch(g,function(g){var m=function(){!w(l)||l&&!e.$eval(l)|| -c()},r=++t;g?(a(g,!0).then(function(a){if(r===t){var c=e.$new();s.template=a;a=q(c,function(a){v();d.enter(a,null,f).then(m)});F=c;p=a;F.$emit("$includeContentLoaded",g);e.$eval(h)}},function(){r===t&&(v(),e.$emit("$includeContentError",g))}),e.$emit("$includeContentRequested",g)):(v(),s.template=null)})}}}}],Qe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Nc(f.template,U).childNodes)(c,function(a){d.append(a)}, -{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],Ae=Ma({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Me=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?R(f):f;e.$parsers.push(function(a){if(!A(a)){var c=[];a&&m(a.split(h),function(a){a&&c.push(g?R(a):a)});return c}});e.$formatters.push(function(a){return G(a)?a.join(f):t});e.$isEmpty=function(a){return!a|| -!a.length}}}},mb="ng-valid",Kd="ng-invalid",Va="ng-pristine",Jb="ng-dirty",Md="ng-pending",Lb=new J("ngModel"),wg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty= -!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=n(d.name||"",!1)(a);var r=f(d.ngModel),s=r.assign,q=r,C=s,F=null,u,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");q=function(a){var d=r(a);z(d)&&(d=c(a));return d};C=function(a,c){z(r(a))?g(a,{$$$p:p.$modelValue}):s(a,p.$modelValue)}}else if(!r.assign)throw Lb("nonassign",d.ngModel,ua(e));};this.$render=v;this.$isEmpty=function(a){return A(a)|| -""===a||null===a||a!==a};var K=e.inheritedData("$formController")||Ib,y=0;Hd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:K,$animate:g});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;g.removeClass(e,Jb);g.addClass(e,Va)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;g.removeClass(e,Va);g.addClass(e,Jb);K.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched= -function(){p.$touched=!0;p.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(F);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!V(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,c=p.$valid,d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(f){e||c===f||(p.$modelValue=f?a:t,p.$modelValue!==d&&p.$$writeModelToScope())})}};this.$$runValidators= -function(a,c,d){function e(){var d=!0;m(p.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d?!0:(m(p.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;m(p.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!z(k.then))throw Lb("$asyncValidators",k);g(h,t);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},v):h(!0)}function g(a,c){l===y&&p.$setValidity(a,c)}function h(a){l===y&&d(a)}y++;var l=y;(function(){var a= -p.$$parserName||"parse";if(u===t)g(a,null);else return u||(m(p.$validators,function(a,c){g(c,null)}),m(p.$asyncValidators,function(a,c){g(c,null)})),g(a,u),u;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=p.$viewValue;h.cancel(F);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=p.$$lastCommittedViewValue;if(u=A(c)?t:!0)for(var d= -0;df||e.$isEmpty(c)||c.length<=f}}}}},Ic=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=W(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};O.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(ce(),ee(ca),y(U).ready(function(){Zd(U,Ac)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document.head).prepend(''); + */ +(function (O, U, t) { + 'use strict'; + function J(b) { + return function () { + var a = arguments[0], c; + c = "[" + (b ? b + ":" : "") + a + "] http://errors.angularjs.org/1.4.3/" + (b ? b + "/" : "") + a; + for (a = 1; a < arguments.length; a++) { + c = c + (1 == a ? "?" : "&") + "p" + (a - 1) + "="; + var d = encodeURIComponent, e; + e = arguments[a]; + e = "function" == typeof e ? e.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof e ? "undefined" : "string" != typeof e ? JSON.stringify(e) : e; + c += d(e) + } + return Error(c) + } + } + + function Ea(b) { + if (null == b || Wa(b))return !1; + var a = "length" in Object(b) && b.length; + return b.nodeType === qa && a ? !0 : L(b) || G(b) || 0 === a || "number" === typeof a && 0 < a && a - 1 in b + } + + function m(b, a, c) { + var d, e; + if (b)if (z(b))for (d in b)"prototype" == d || "length" == d || "name" == d || b.hasOwnProperty && !b.hasOwnProperty(d) || a.call(c, b[d], d, b); else if (G(b) || Ea(b)) { + var f = "object" !== typeof b; + d = 0; + for (e = b.length; d < e; d++)(f || d in b) && a.call(c, b[d], d, b) + } else if (b.forEach && b.forEach !== m)b.forEach(a, c, b); else if (nc(b))for (d in b)a.call(c, b[d], d, b); else if ("function" === typeof b.hasOwnProperty)for (d in b)b.hasOwnProperty(d) && + a.call(c, b[d], d, b); else for (d in b)Xa.call(b, d) && a.call(c, b[d], d, b); + return b + } + + function oc(b, a, c) { + for (var d = Object.keys(b).sort(), e = 0; e < d.length; e++)a.call(c, b[d[e]], d[e]); + return d + } + + function pc(b) { + return function (a, c) { + b(c, a) + } + } + + function Ud() { + return ++nb + } + + function qc(b, a) { + a ? b.$$hashKey = a : delete b.$$hashKey + } + + function Nb(b, a, c) { + for (var d = b.$$hashKey, e = 0, f = a.length; e < f; ++e) { + var g = a[e]; + if (H(g) || z(g))for (var h = Object.keys(g), l = 0, k = h.length; l < k; l++) { + var n = h[l], r = g[n]; + c && H(r) ? aa(r) ? b[n] = new Date(r.valueOf()) : (H(b[n]) || + (b[n] = G(r) ? [] : {}), Nb(b[n], [r], !0)) : b[n] = r + } + } + qc(b, d); + return b + } + + function P(b) { + return Nb(b, za.call(arguments, 1), !1) + } + + function Vd(b) { + return Nb(b, za.call(arguments, 1), !0) + } + + function W(b) { + return parseInt(b, 10) + } + + function Ob(b, a) { + return P(Object.create(b), a) + } + + function v() { + } + + function Ya(b) { + return b + } + + function ra(b) { + return function () { + return b + } + } + + function rc(b) { + return z(b.toString) && b.toString !== Object.prototype.toString + } + + function A(b) { + return "undefined" === typeof b + } + + function w(b) { + return "undefined" !== typeof b + } + + function H(b) { + return null !== + b && "object" === typeof b + } + + function nc(b) { + return null !== b && "object" === typeof b && !sc(b) + } + + function L(b) { + return "string" === typeof b + } + + function V(b) { + return "number" === typeof b + } + + function aa(b) { + return "[object Date]" === sa.call(b) + } + + function z(b) { + return "function" === typeof b + } + + function Za(b) { + return "[object RegExp]" === sa.call(b) + } + + function Wa(b) { + return b && b.window === b + } + + function $a(b) { + return b && b.$evalAsync && b.$watch + } + + function ab(b) { + return "boolean" === typeof b + } + + function tc(b) { + return !(!b || !(b.nodeName || b.prop && b.attr && b.find)) + } + + function Wd(b) { + var a = {}; + b = b.split(","); + var c; + for (c = 0; c < b.length; c++)a[b[c]] = !0; + return a + } + + function ta(b) { + return M(b.nodeName || b[0] && b[0].nodeName) + } + + function bb(b, a) { + var c = b.indexOf(a); + 0 <= c && b.splice(c, 1); + return c + } + + function fa(b, a, c, d) { + if (Wa(b) || $a(b))throw Fa("cpws"); + if (uc.test(sa.call(a)))throw Fa("cpta"); + if (a) { + if (b === a)throw Fa("cpi"); + c = c || []; + d = d || []; + H(b) && (c.push(b), d.push(a)); + var e; + if (G(b))for (e = a.length = 0; e < b.length; e++)a.push(fa(b[e], null, c, d)); else { + var f = a.$$hashKey; + G(a) ? a.length = 0 : m(a, function (b, + c) { + delete a[c] + }); + if (nc(b))for (e in b)a[e] = fa(b[e], null, c, d); else if (b && "function" === typeof b.hasOwnProperty)for (e in b)b.hasOwnProperty(e) && (a[e] = fa(b[e], null, c, d)); else for (e in b)Xa.call(b, e) && (a[e] = fa(b[e], null, c, d)); + qc(a, f) + } + } else if (a = b, H(b)) { + if (c && -1 !== (f = c.indexOf(b)))return d[f]; + if (G(b))return fa(b, [], c, d); + if (uc.test(sa.call(b)))a = new b.constructor(b); else if (aa(b))a = new Date(b.getTime()); else if (Za(b))a = new RegExp(b.source, b.toString().match(/[^\/]*$/)[0]), a.lastIndex = b.lastIndex; else return e = + Object.create(sc(b)), fa(b, e, c, d); + d && (c.push(b), d.push(a)) + } + return a + } + + function ia(b, a) { + if (G(b)) { + a = a || []; + for (var c = 0, d = b.length; c < d; c++)a[c] = b[c] + } else if (H(b))for (c in a = a || {}, b)if ("$" !== c.charAt(0) || "$" !== c.charAt(1))a[c] = b[c]; + return a || b + } + + function ka(b, a) { + if (b === a)return !0; + if (null === b || null === a)return !1; + if (b !== b && a !== a)return !0; + var c = typeof b, d; + if (c == typeof a && "object" == c)if (G(b)) { + if (!G(a))return !1; + if ((c = b.length) == a.length) { + for (d = 0; d < c; d++)if (!ka(b[d], a[d]))return !1; + return !0 + } + } else { + if (aa(b))return aa(a) ? + ka(b.getTime(), a.getTime()) : !1; + if (Za(b))return Za(a) ? b.toString() == a.toString() : !1; + if ($a(b) || $a(a) || Wa(b) || Wa(a) || G(a) || aa(a) || Za(a))return !1; + c = ga(); + for (d in b)if ("$" !== d.charAt(0) && !z(b[d])) { + if (!ka(b[d], a[d]))return !1; + c[d] = !0 + } + for (d in a)if (!(d in c || "$" === d.charAt(0) || a[d] === t || z(a[d])))return !1; + return !0 + } + return !1 + } + + function cb(b, a, c) { + return b.concat(za.call(a, c)) + } + + function vc(b, a) { + var c = 2 < arguments.length ? za.call(arguments, 2) : []; + return !z(a) || a instanceof RegExp ? a : c.length ? function () { + return arguments.length ? + a.apply(b, cb(c, arguments, 0)) : a.apply(b, c) + } : function () { + return arguments.length ? a.apply(b, arguments) : a.call(b) + } + } + + function Xd(b, a) { + var c = a; + "string" === typeof b && "$" === b.charAt(0) && "$" === b.charAt(1) ? c = t : Wa(a) ? c = "$WINDOW" : a && U === a ? c = "$DOCUMENT" : $a(a) && (c = "$SCOPE"); + return c + } + + function db(b, a) { + if ("undefined" === typeof b)return t; + V(a) || (a = a ? 2 : null); + return JSON.stringify(b, Xd, a) + } + + function wc(b) { + return L(b) ? JSON.parse(b) : b + } + + function xc(b, a) { + var c = Date.parse("Jan 01, 1970 00:00:00 " + b) / 6E4; + return isNaN(c) ? a : c + } + + function Pb(b, + a, c) { + c = c ? -1 : 1; + var d = xc(a, b.getTimezoneOffset()); + a = b; + b = c * (d - b.getTimezoneOffset()); + a = new Date(a.getTime()); + a.setMinutes(a.getMinutes() + b); + return a + } + + function ua(b) { + b = y(b).clone(); + try { + b.empty() + } catch (a) { + } + var c = y("
    ").append(b).html(); + try { + return b[0].nodeType === Na ? M(c) : c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function (a, b) { + return "<" + M(b) + }) + } catch (d) { + return M(c) + } + } + + function yc(b) { + try { + return decodeURIComponent(b) + } catch (a) { + } + } + + function zc(b) { + var a = {}, c, d; + m((b || "").split("&"), function (b) { + b && (c = b.replace(/\+/g, + "%20").split("="), d = yc(c[0]), w(d) && (b = w(c[1]) ? yc(c[1]) : !0, Xa.call(a, d) ? G(a[d]) ? a[d].push(b) : a[d] = [a[d], b] : a[d] = b)) + }); + return a + } + + function Qb(b) { + var a = []; + m(b, function (b, d) { + G(b) ? m(b, function (b) { + a.push(ma(d, !0) + (!0 === b ? "" : "=" + ma(b, !0))) + }) : a.push(ma(d, !0) + (!0 === b ? "" : "=" + ma(b, !0))) + }); + return a.length ? a.join("&") : "" + } + + function ob(b) { + return ma(b, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+") + } + + function ma(b, a) { + return encodeURIComponent(b).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, + "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%20/g, a ? "%20" : "+") + } + + function Yd(b, a) { + var c, d, e = Oa.length; + for (d = 0; d < e; ++d)if (c = Oa[d] + a, L(c = b.getAttribute(c)))return c; + return null + } + + function Zd(b, a) { + var c, d, e = {}; + m(Oa, function (a) { + a += "app"; + !c && b.hasAttribute && b.hasAttribute(a) && (c = b, d = b.getAttribute(a)) + }); + m(Oa, function (a) { + a += "app"; + var e; + !c && (e = b.querySelector("[" + a.replace(":", "\\:") + "]")) && (c = e, d = e.getAttribute(a)) + }); + c && (e.strictDi = null !== Yd(c, "strict-di"), a(c, d ? [d] : [], e)) + } + + function Ac(b, a, c) { + H(c) || + (c = {}); + c = P({strictDi: !1}, c); + var d = function () { + b = y(b); + if (b.injector()) { + var d = b[0] === U ? "document" : ua(b); + throw Fa("btstrpd", d.replace(//, ">")); + } + a = a || []; + a.unshift(["$provide", function (a) { + a.value("$rootElement", b) + }]); + c.debugInfoEnabled && a.push(["$compileProvider", function (a) { + a.debugInfoEnabled(!0) + }]); + a.unshift("ng"); + d = eb(a, c.strictDi); + d.invoke(["$rootScope", "$rootElement", "$compile", "$injector", function (a, b, c, d) { + a.$apply(function () { + b.data("$injector", d); + c(b)(a) + }) + }]); + return d + }, e = + /^NG_ENABLE_DEBUG_INFO!/, f = /^NG_DEFER_BOOTSTRAP!/; + O && e.test(O.name) && (c.debugInfoEnabled = !0, O.name = O.name.replace(e, "")); + if (O && !f.test(O.name))return d(); + O.name = O.name.replace(f, ""); + ca.resumeBootstrap = function (b) { + m(b, function (b) { + a.push(b) + }); + return d() + }; + z(ca.resumeDeferredBootstrap) && ca.resumeDeferredBootstrap() + } + + function $d() { + O.name = "NG_ENABLE_DEBUG_INFO!" + O.name; + O.location.reload() + } + + function ae(b) { + b = ca.element(b).injector(); + if (!b)throw Fa("test"); + return b.get("$$testability") + } + + function Bc(b, a) { + a = a || + "_"; + return b.replace(be, function (b, d) { + return (d ? a : "") + b.toLowerCase() + }) + } + + function ce() { + var b; + if (!Cc) { + var a = pb(); + la = O.jQuery; + w(a) && (la = null === a ? t : O[a]); + la && la.fn.on ? (y = la, P(la.fn, { + scope: Pa.scope, + isolateScope: Pa.isolateScope, + controller: Pa.controller, + injector: Pa.injector, + inheritedData: Pa.inheritedData + }), b = la.cleanData, la.cleanData = function (a) { + var d; + if (Rb)Rb = !1; else for (var e = 0, f; null != (f = a[e]); e++)(d = la._data(f, "events")) && d.$destroy && la(f).triggerHandler("$destroy"); + b(a) + }) : y = Q; + ca.element = y; + Cc = !0 + } + } + + function Sb(b, + a, c) { + if (!b)throw Fa("areq", a || "?", c || "required"); + return b + } + + function Qa(b, a, c) { + c && G(b) && (b = b[b.length - 1]); + Sb(z(b), a, "not a function, got " + (b && "object" === typeof b ? b.constructor.name || "Object" : typeof b)); + return b + } + + function Ra(b, a) { + if ("hasOwnProperty" === b)throw Fa("badname", a); + } + + function Dc(b, a, c) { + if (!a)return b; + a = a.split("."); + for (var d, e = b, f = a.length, g = 0; g < f; g++)d = a[g], b && (b = (e = b)[d]); + return !c && z(b) ? vc(e, b) : b + } + + function qb(b) { + var a = b[0]; + b = b[b.length - 1]; + var c = [a]; + do { + a = a.nextSibling; + if (!a)break; + c.push(a) + } while (a !== + b); + return y(c) + } + + function ga() { + return Object.create(null) + } + + function de(b) { + function a(a, b, c) { + return a[b] || (a[b] = c()) + } + + var c = J("$injector"), d = J("ng"); + b = a(b, "angular", Object); + b.$$minErr = b.$$minErr || J; + return a(b, "module", function () { + var b = {}; + return function (f, g, h) { + if ("hasOwnProperty" === f)throw d("badname", "module"); + g && b.hasOwnProperty(f) && (b[f] = null); + return a(b, f, function () { + function a(b, c, e, f) { + f || (f = d); + return function () { + f[e || "push"]([b, c, arguments]); + return C + } + } + + function b(a, c) { + return function (b, e) { + e && z(e) && + (e.$$moduleName = f); + d.push([a, c, arguments]); + return C + } + } + + if (!g)throw c("nomod", f); + var d = [], e = [], s = [], x = a("$injector", "invoke", "push", e), C = { + _invokeQueue: d, + _configBlocks: e, + _runBlocks: s, + requires: g, + name: f, + provider: b("$provide", "provider"), + factory: b("$provide", "factory"), + service: b("$provide", "service"), + value: a("$provide", "value"), + constant: a("$provide", "constant", "unshift"), + decorator: b("$provide", "decorator"), + animation: b("$animateProvider", "register"), + filter: b("$filterProvider", "register"), + controller: b("$controllerProvider", + "register"), + directive: b("$compileProvider", "directive"), + config: x, + run: function (a) { + s.push(a); + return this + } + }; + h && x(h); + return C + }) + } + }) + } + + function ee(b) { + P(b, { + bootstrap: Ac, + copy: fa, + extend: P, + merge: Vd, + equals: ka, + element: y, + forEach: m, + injector: eb, + noop: v, + bind: vc, + toJson: db, + fromJson: wc, + identity: Ya, + isUndefined: A, + isDefined: w, + isString: L, + isFunction: z, + isObject: H, + isNumber: V, + isElement: tc, + isArray: G, + version: fe, + isDate: aa, + lowercase: M, + uppercase: rb, + callbacks: {counter: 0}, + getTestability: ae, + $$minErr: J, + $$csp: fb, + reloadWithDebugInfo: $d + }); + gb = de(O); + try { + gb("ngLocale") + } catch (a) { + gb("ngLocale", []).provider("$locale", ge) + } + gb("ng", ["ngLocale"], ["$provide", function (a) { + a.provider({$$sanitizeUri: he}); + a.provider("$compile", Ec).directive({ + a: ie, + input: Fc, + textarea: Fc, + form: je, + script: ke, + select: le, + style: me, + option: ne, + ngBind: oe, + ngBindHtml: pe, + ngBindTemplate: qe, + ngClass: re, + ngClassEven: se, + ngClassOdd: te, + ngCloak: ue, + ngController: ve, + ngForm: we, + ngHide: xe, + ngIf: ye, + ngInclude: ze, + ngInit: Ae, + ngNonBindable: Be, + ngPluralize: Ce, + ngRepeat: De, + ngShow: Ee, + ngStyle: Fe, + ngSwitch: Ge, + ngSwitchWhen: He, + ngSwitchDefault: Ie, + ngOptions: Je, + ngTransclude: Ke, + ngModel: Le, + ngList: Me, + ngChange: Ne, + pattern: Gc, + ngPattern: Gc, + required: Hc, + ngRequired: Hc, + minlength: Ic, + ngMinlength: Ic, + maxlength: Jc, + ngMaxlength: Jc, + ngValue: Oe, + ngModelOptions: Pe + }).directive({ngInclude: Qe}).directive(sb).directive(Kc); + a.provider({ + $anchorScroll: Re, + $animate: Se, + $$animateQueue: Te, + $$AnimateRunner: Ue, + $browser: Ve, + $cacheFactory: We, + $controller: Xe, + $document: Ye, + $exceptionHandler: Ze, + $filter: Lc, + $interpolate: $e, + $interval: af, + $http: bf, + $httpParamSerializer: cf, + $httpParamSerializerJQLike: df, + $httpBackend: ef, + $location: ff, + $log: gf, + $parse: hf, + $rootScope: jf, + $q: kf, + $$q: lf, + $sce: mf, + $sceDelegate: nf, + $sniffer: of, + $templateCache: pf, + $templateRequest: qf, + $$testability: rf, + $timeout: sf, + $window: tf, + $$rAF: uf, + $$jqLite: vf, + $$HashMap: wf, + $$cookieReader: xf + }) + }]) + } + + function hb(b) { + return b.replace(yf, function (a, b, d, e) { + return e ? d.toUpperCase() : d + }).replace(zf, "Moz$1") + } + + function Mc(b) { + b = b.nodeType; + return b === qa || !b || 9 === b + } + + function Nc(b, a) { + var c, d, e = a.createDocumentFragment(), f = []; + if (Tb.test(b)) { + c = + c || e.appendChild(a.createElement("div")); + d = (Af.exec(b) || ["", ""])[1].toLowerCase(); + d = na[d] || na._default; + c.innerHTML = d[1] + b.replace(Bf, "<$1>") + d[2]; + for (d = d[0]; d--;)c = c.lastChild; + f = cb(f, c.childNodes); + c = e.firstChild; + c.textContent = "" + } else f.push(a.createTextNode(b)); + e.textContent = ""; + e.innerHTML = ""; + m(f, function (a) { + e.appendChild(a) + }); + return e + } + + function Q(b) { + if (b instanceof Q)return b; + var a; + L(b) && (b = R(b), a = !0); + if (!(this instanceof Q)) { + if (a && "<" != b.charAt(0))throw Ub("nosel"); + return new Q(b) + } + if (a) { + a = U; + var c; + b = (c = Cf.exec(b)) ? [a.createElement(c[1])] : (c = Nc(b, a)) ? c.childNodes : [] + } + Oc(this, b) + } + + function Vb(b) { + return b.cloneNode(!0) + } + + function tb(b, a) { + a || ub(b); + if (b.querySelectorAll)for (var c = b.querySelectorAll("*"), d = 0, e = c.length; d < e; d++)ub(c[d]) + } + + function Pc(b, a, c, d) { + if (w(d))throw Ub("offargs"); + var e = (d = vb(b)) && d.events, f = d && d.handle; + if (f)if (a)m(a.split(" "), function (a) { + if (w(c)) { + var d = e[a]; + bb(d || [], c); + if (d && 0 < d.length)return + } + b.removeEventListener(a, f, !1); + delete e[a] + }); else for (a in e)"$destroy" !== a && b.removeEventListener(a, + f, !1), delete e[a] + } + + function ub(b, a) { + var c = b.ng339, d = c && ib[c]; + d && (a ? delete d.data[a] : (d.handle && (d.events.$destroy && d.handle({}, "$destroy"), Pc(b)), delete ib[c], b.ng339 = t)) + } + + function vb(b, a) { + var c = b.ng339, c = c && ib[c]; + a && !c && (b.ng339 = c = ++Df, c = ib[c] = {events: {}, data: {}, handle: t}); + return c + } + + function Wb(b, a, c) { + if (Mc(b)) { + var d = w(c), e = !d && a && !H(a), f = !a; + b = (b = vb(b, !e)) && b.data; + if (d)b[a] = c; else { + if (f)return b; + if (e)return b && b[a]; + P(b, a) + } + } + } + + function wb(b, a) { + return b.getAttribute ? -1 < (" " + (b.getAttribute("class") || "") + + " ").replace(/[\n\t]/g, " ").indexOf(" " + a + " ") : !1 + } + + function xb(b, a) { + a && b.setAttribute && m(a.split(" "), function (a) { + b.setAttribute("class", R((" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + R(a) + " ", " "))) + }) + } + + function yb(b, a) { + if (a && b.setAttribute) { + var c = (" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " "); + m(a.split(" "), function (a) { + a = R(a); + -1 === c.indexOf(" " + a + " ") && (c += a + " ") + }); + b.setAttribute("class", R(c)) + } + } + + function Oc(b, a) { + if (a)if (a.nodeType)b[b.length++] = a; else { + var c = + a.length; + if ("number" === typeof c && a.window !== a) { + if (c)for (var d = 0; d < c; d++)b[b.length++] = a[d] + } else b[b.length++] = a + } + } + + function Qc(b, a) { + return zb(b, "$" + (a || "ngController") + "Controller") + } + + function zb(b, a, c) { + 9 == b.nodeType && (b = b.documentElement); + for (a = G(a) ? a : [a]; b;) { + for (var d = 0, e = a.length; d < e; d++)if ((c = y.data(b, a[d])) !== t)return c; + b = b.parentNode || 11 === b.nodeType && b.host + } + } + + function Rc(b) { + for (tb(b, !0); b.firstChild;)b.removeChild(b.firstChild) + } + + function Xb(b, a) { + a || tb(b); + var c = b.parentNode; + c && c.removeChild(b) + } + + function Ef(b, + a) { + a = a || O; + if ("complete" === a.document.readyState)a.setTimeout(b); else y(a).on("load", b) + } + + function Sc(b, a) { + var c = Ab[a.toLowerCase()]; + return c && Tc[ta(b)] && c + } + + function Ff(b, a) { + var c = b.nodeName; + return ("INPUT" === c || "TEXTAREA" === c) && Uc[a] + } + + function Gf(b, a) { + var c = function (c, e) { + c.isDefaultPrevented = function () { + return c.defaultPrevented + }; + var f = a[e || c.type], g = f ? f.length : 0; + if (g) { + if (A(c.immediatePropagationStopped)) { + var h = c.stopImmediatePropagation; + c.stopImmediatePropagation = function () { + c.immediatePropagationStopped = !0; + c.stopPropagation && c.stopPropagation(); + h && h.call(c) + } + } + c.isImmediatePropagationStopped = function () { + return !0 === c.immediatePropagationStopped + }; + 1 < g && (f = ia(f)); + for (var l = 0; l < g; l++)c.isImmediatePropagationStopped() || f[l].call(b, c) + } + }; + c.elem = b; + return c + } + + function vf() { + this.$get = function () { + return P(Q, { + hasClass: function (b, a) { + b.attr && (b = b[0]); + return wb(b, a) + }, addClass: function (b, a) { + b.attr && (b = b[0]); + return yb(b, a) + }, removeClass: function (b, a) { + b.attr && (b = b[0]); + return xb(b, a) + } + }) + } + } + + function Ga(b, a) { + var c = b && b.$$hashKey; + if (c)return "function" === typeof c && (c = b.$$hashKey()), c; + c = typeof b; + return c = "function" == c || "object" == c && null !== b ? b.$$hashKey = c + ":" + (a || Ud)() : c + ":" + b + } + + function Sa(b, a) { + if (a) { + var c = 0; + this.nextUid = function () { + return ++c + } + } + m(b, this.put, this) + } + + function Hf(b) { + return (b = b.toString().replace(Vc, "").match(Wc)) ? "function(" + (b[1] || "").replace(/[\s\r\n]+/, " ") + ")" : "fn" + } + + function eb(b, a) { + function c(a) { + return function (b, c) { + if (H(b))m(b, pc(a)); else return a(b, c) + } + } + + function d(a, b) { + Ra(a, "service"); + if (z(b) || G(b))b = s.instantiate(b); + if (!b.$get)throw Ha("pget", a); + return r[a + "Provider"] = b + } + + function e(a, b) { + return function () { + var c = C.invoke(b, this); + if (A(c))throw Ha("undef", a); + return c + } + } + + function f(a, b, c) { + return d(a, {$get: !1 !== c ? e(a, b) : b}) + } + + function g(a) { + var b = [], c; + m(a, function (a) { + function d(a) { + var b, c; + b = 0; + for (c = a.length; b < c; b++) { + var e = a[b], f = s.get(e[0]); + f[e[1]].apply(f, e[2]) + } + } + + if (!n.get(a)) { + n.put(a, !0); + try { + L(a) ? (c = gb(a), b = b.concat(g(c.requires)).concat(c._runBlocks), d(c._invokeQueue), d(c._configBlocks)) : z(a) ? b.push(s.invoke(a)) : G(a) ? + b.push(s.invoke(a)) : Qa(a, "module") + } catch (e) { + throw G(a) && (a = a[a.length - 1]), e.message && e.stack && -1 == e.stack.indexOf(e.message) && (e = e.message + "\n" + e.stack), Ha("modulerr", a, e.stack || e.message || e); + } + } + }); + return b + } + + function h(b, c) { + function d(a, e) { + if (b.hasOwnProperty(a)) { + if (b[a] === l)throw Ha("cdep", a + " <- " + k.join(" <- ")); + return b[a] + } + try { + return k.unshift(a), b[a] = l, b[a] = c(a, e) + } catch (f) { + throw b[a] === l && delete b[a], f; + } finally { + k.shift() + } + } + + function e(b, c, f, g) { + "string" === typeof f && (g = f, f = null); + var h = [], k = eb.$$annotate(b, + a, g), l, s, n; + s = 0; + for (l = k.length; s < l; s++) { + n = k[s]; + if ("string" !== typeof n)throw Ha("itkn", n); + h.push(f && f.hasOwnProperty(n) ? f[n] : d(n, g)) + } + G(b) && (b = b[l]); + return b.apply(c, h) + } + + return { + invoke: e, instantiate: function (a, b, c) { + var d = Object.create((G(a) ? a[a.length - 1] : a).prototype || null); + a = e(a, d, b, c); + return H(a) || z(a) ? a : d + }, get: d, annotate: eb.$$annotate, has: function (a) { + return r.hasOwnProperty(a + "Provider") || b.hasOwnProperty(a) + } + } + } + + a = !0 === a; + var l = {}, k = [], n = new Sa([], !0), r = { + $provide: { + provider: c(d), factory: c(f), service: c(function (a, + b) { + return f(a, ["$injector", function (a) { + return a.instantiate(b) + }]) + }), value: c(function (a, b) { + return f(a, ra(b), !1) + }), constant: c(function (a, b) { + Ra(a, "constant"); + r[a] = b; + x[a] = b + }), decorator: function (a, b) { + var c = s.get(a + "Provider"), d = c.$get; + c.$get = function () { + var a = C.invoke(d, c); + return C.invoke(b, null, {$delegate: a}) + } + } + } + }, s = r.$injector = h(r, function (a, b) { + ca.isString(b) && k.push(b); + throw Ha("unpr", k.join(" <- ")); + }), x = {}, C = x.$injector = h(x, function (a, b) { + var c = s.get(a + "Provider", b); + return C.invoke(c.$get, c, t, a) + }); + m(g(b), + function (a) { + a && C.invoke(a) + }); + return C + } + + function Re() { + var b = !0; + this.disableAutoScrolling = function () { + b = !1 + }; + this.$get = ["$window", "$location", "$rootScope", function (a, c, d) { + function e(a) { + var b = null; + Array.prototype.some.call(a, function (a) { + if ("a" === ta(a))return b = a, !0 + }); + return b + } + + function f(b) { + if (b) { + b.scrollIntoView(); + var c; + c = g.yOffset; + z(c) ? c = c() : tc(c) ? (c = c[0], c = "fixed" !== a.getComputedStyle(c).position ? 0 : c.getBoundingClientRect().bottom) : V(c) || (c = 0); + c && (b = b.getBoundingClientRect().top, a.scrollBy(0, b - c)) + } else a.scrollTo(0, + 0) + } + + function g(a) { + a = L(a) ? a : c.hash(); + var b; + a ? (b = h.getElementById(a)) ? f(b) : (b = e(h.getElementsByName(a))) ? f(b) : "top" === a && f(null) : f(null) + } + + var h = a.document; + b && d.$watch(function () { + return c.hash() + }, function (a, b) { + a === b && "" === a || Ef(function () { + d.$evalAsync(g) + }) + }); + return g + }] + } + + function jb(b, a) { + if (!b && !a)return ""; + if (!b)return a; + if (!a)return b; + G(b) && (b = b.join(" ")); + G(a) && (a = a.join(" ")); + return b + " " + a + } + + function If(b) { + L(b) && (b = b.split(" ")); + var a = ga(); + m(b, function (b) { + b.length && (a[b] = !0) + }); + return a + } + + function Ia(b) { + return H(b) ? + b : {} + } + + function Jf(b, a, c, d) { + function e(a) { + try { + a.apply(null, za.call(arguments, 1)) + } finally { + if (C--, 0 === C)for (; F.length;)try { + F.pop()() + } catch (b) { + c.error(b) + } + } + } + + function f() { + g(); + h() + } + + function g() { + a:{ + try { + u = n.state; + break a + } catch (a) { + } + u = void 0 + } + u = A(u) ? null : u; + ka(u, D) && (u = D); + D = u + } + + function h() { + if (K !== l.url() || p !== u)K = l.url(), p = u, m(B, function (a) { + a(l.url(), u) + }) + } + + var l = this, k = b.location, n = b.history, r = b.setTimeout, s = b.clearTimeout, x = {}; + l.isMock = !1; + var C = 0, F = []; + l.$$completeOutstandingRequest = e; + l.$$incOutstandingRequestCount = + function () { + C++ + }; + l.notifyWhenNoOutstandingRequests = function (a) { + 0 === C ? a() : F.push(a) + }; + var u, p, K = k.href, q = a.find("base"), I = null; + g(); + p = u; + l.url = function (a, c, e) { + A(e) && (e = null); + k !== b.location && (k = b.location); + n !== b.history && (n = b.history); + if (a) { + var f = p === e; + if (K === a && (!d.history || f))return l; + var h = K && Ja(K) === Ja(a); + K = a; + p = e; + if (!d.history || h && f) { + if (!h || I)I = a; + c ? k.replace(a) : h ? (c = k, e = a.indexOf("#"), a = -1 === e ? "" : a.substr(e), c.hash = a) : k.href = a + } else n[c ? "replaceState" : "pushState"](e, "", a), g(), p = u; + return l + } + return I || + k.href.replace(/%27/g, "'") + }; + l.state = function () { + return u + }; + var B = [], N = !1, D = null; + l.onUrlChange = function (a) { + if (!N) { + if (d.history)y(b).on("popstate", f); + y(b).on("hashchange", f); + N = !0 + } + B.push(a); + return a + }; + l.$$applicationDestroyed = function () { + y(b).off("hashchange popstate", f) + }; + l.$$checkUrlChange = h; + l.baseHref = function () { + var a = q.attr("href"); + return a ? a.replace(/^(https?\:)?\/\/[^\/]*/, "") : "" + }; + l.defer = function (a, b) { + var c; + C++; + c = r(function () { + delete x[c]; + e(a) + }, b || 0); + x[c] = !0; + return c + }; + l.defer.cancel = function (a) { + return x[a] ? + (delete x[a], s(a), e(v), !0) : !1 + } + } + + function Ve() { + this.$get = ["$window", "$log", "$sniffer", "$document", function (b, a, c, d) { + return new Jf(b, d, a, c) + }] + } + + function We() { + this.$get = function () { + function b(b, d) { + function e(a) { + a != r && (s ? s == a && (s = a.n) : s = a, f(a.n, a.p), f(a, r), r = a, r.n = null) + } + + function f(a, b) { + a != b && (a && (a.p = b), b && (b.n = a)) + } + + if (b in a)throw J("$cacheFactory")("iid", b); + var g = 0, h = P({}, d, {id: b}), l = {}, k = d && d.capacity || Number.MAX_VALUE, n = {}, r = null, s = null; + return a[b] = { + put: function (a, b) { + if (!A(b)) { + if (k < Number.MAX_VALUE) { + var c = + n[a] || (n[a] = {key: a}); + e(c) + } + a in l || g++; + l[a] = b; + g > k && this.remove(s.key); + return b + } + }, get: function (a) { + if (k < Number.MAX_VALUE) { + var b = n[a]; + if (!b)return; + e(b) + } + return l[a] + }, remove: function (a) { + if (k < Number.MAX_VALUE) { + var b = n[a]; + if (!b)return; + b == r && (r = b.p); + b == s && (s = b.n); + f(b.n, b.p); + delete n[a] + } + delete l[a]; + g-- + }, removeAll: function () { + l = {}; + g = 0; + n = {}; + r = s = null + }, destroy: function () { + n = h = l = null; + delete a[b] + }, info: function () { + return P({}, h, {size: g}) + } + } + } + + var a = {}; + b.info = function () { + var b = {}; + m(a, function (a, e) { + b[e] = a.info() + }); + return b + }; + b.get = function (b) { + return a[b] + }; + return b + } + } + + function pf() { + this.$get = ["$cacheFactory", function (b) { + return b("templates") + }] + } + + function Ec(b, a) { + function c(a, b, c) { + var d = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/, e = {}; + m(a, function (a, f) { + var g = a.match(d); + if (!g)throw ea("iscp", b, f, a, c ? "controller bindings definition" : "isolate scope definition"); + e[f] = {mode: g[1][0], collection: "*" === g[2], optional: "?" === g[3], attrName: g[4] || f} + }); + return e + } + + function d(a) { + var b = a.charAt(0); + if (!b || b !== M(b))throw ea("baddir", a); + if (a !== a.trim())throw ea("baddir", + a); + } + + var e = {}, f = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/, g = /(([\w\-]+)(?:\:([^;]+))?;?)/, h = Wd("ngSrc,ngSrcset,src,srcset"), l = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/, k = /^(on[a-z]+|formaction)$/; + this.directive = function s(a, f) { + Ra(a, "directive"); + L(a) ? (d(a), Sb(f, "directiveFactory"), e.hasOwnProperty(a) || (e[a] = [], b.factory(a + "Directive", ["$injector", "$exceptionHandler", function (b, d) { + var f = []; + m(e[a], function (e, g) { + try { + var h = b.invoke(e); + z(h) ? h = {compile: ra(h)} : !h.compile && h.link && (h.compile = ra(h.link)); + h.priority = h.priority || + 0; + h.index = g; + h.name = h.name || a; + h.require = h.require || h.controller && h.name; + h.restrict = h.restrict || "EA"; + var k = h, l = h, s = h.name, n = {isolateScope: null, bindToController: null}; + H(l.scope) && (!0 === l.bindToController ? (n.bindToController = c(l.scope, s, !0), n.isolateScope = {}) : n.isolateScope = c(l.scope, s, !1)); + H(l.bindToController) && (n.bindToController = c(l.bindToController, s, !0)); + if (H(n.bindToController)) { + var C = l.controller, $ = l.controllerAs; + if (!C)throw ea("noctrl", s); + var ha; + a:if ($ && L($))ha = $; else { + if (L(C)) { + var m = Xc.exec(C); + if (m) { + ha = m[3]; + break a + } + } + ha = void 0 + } + if (!ha)throw ea("noident", s); + } + var q = k.$$bindings = n; + H(q.isolateScope) && (h.$$isolateBindings = q.isolateScope); + h.$$moduleName = e.$$moduleName; + f.push(h) + } catch (t) { + d(t) + } + }); + return f + }])), e[a].push(f)) : m(a, pc(s)); + return this + }; + this.aHrefSanitizationWhitelist = function (b) { + return w(b) ? (a.aHrefSanitizationWhitelist(b), this) : a.aHrefSanitizationWhitelist() + }; + this.imgSrcSanitizationWhitelist = function (b) { + return w(b) ? (a.imgSrcSanitizationWhitelist(b), this) : a.imgSrcSanitizationWhitelist() + }; + var n = !0; + this.debugInfoEnabled = function (a) { + return w(a) ? (n = a, this) : n + }; + this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$templateRequest", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function (a, b, c, d, u, p, K, q, I, B, N) { + function D(a, b) { + try { + a.addClass(b) + } catch (c) { + } + } + + function Z(a, b, c, d, e) { + a instanceof y || (a = y(a)); + m(a, function (b, c) { + b.nodeType == Na && b.nodeValue.match(/\S+/) && (a[c] = y(b).wrap("").parent()[0]) + }); + var f = S(a, b, a, c, d, e); + Z.$$addScopeClass(a); + var g = null; + return function (b, c, d) { + Sb(b, "scope"); + d = d || {}; + var e = d.parentBoundTranscludeFn, h = d.transcludeControllers; + d = d.futureParentElement; + e && e.$$boundTransclude && (e = e.$$boundTransclude); + g || (g = (d = d && d[0]) ? "foreignobject" !== ta(d) && d.toString().match(/SVG/) ? "svg" : "html" : "html"); + d = "html" !== g ? y(Yb(g, y("
    ").append(a).html())) : c ? Pa.clone.call(a) : a; + if (h)for (var k in h)d.data("$" + k + "Controller", h[k].instance); + Z.$$addScopeInfo(d, b); + c && c(d, b); + f && f(b, d, d, e); + return d + } + } + + function S(a, b, c, d, e, f) { + function g(a, + c, d, e) { + var f, k, l, s, n, B, C; + if (p)for (C = Array(c.length), s = 0; s < h.length; s += 3)f = h[s], C[f] = c[f]; else C = c; + s = 0; + for (n = h.length; s < n;)if (k = C[h[s++]], c = h[s++], f = h[s++], c) { + if (c.scope) { + if (l = a.$new(), Z.$$addScopeInfo(y(k), l), B = c.$$destroyBindings)c.$$destroyBindings = null, l.$on("$destroyed", B) + } else l = a; + B = c.transcludeOnThisElement ? $(a, c.transclude, e) : !c.templateOnThisElement && e ? e : !e && b ? $(a, b) : null; + c(f, l, k, d, B, c) + } else f && f(a, k.childNodes, t, e) + } + + for (var h = [], k, l, s, n, p, B = 0; B < a.length; B++) { + k = new aa; + l = ha(a[B], [], k, 0 === B ? + d : t, e); + (f = l.length ? E(l, a[B], k, b, c, null, [], [], f) : null) && f.scope && Z.$$addScopeClass(k.$$element); + k = f && f.terminal || !(s = a[B].childNodes) || !s.length ? null : S(s, f ? (f.transcludeOnThisElement || !f.templateOnThisElement) && f.transclude : b); + if (f || k)h.push(B, f, k), n = !0, p = p || f; + f = null + } + return n ? g : null + } + + function $(a, b, c) { + return function (d, e, f, g, h) { + d || (d = a.$new(!1, h), d.$$transcluded = !0); + return b(d, e, {parentBoundTranscludeFn: c, transcludeControllers: f, futureParentElement: g}) + } + } + + function ha(a, b, c, d, e) { + var h = c.$attr, k; + switch (a.nodeType) { + case qa: + w(b, + wa(ta(a)), "E", d, e); + for (var l, s, n, p = a.attributes, B = 0, C = p && p.length; B < C; B++) { + var x = !1, S = !1; + l = p[B]; + k = l.name; + s = R(l.value); + l = wa(k); + if (n = ia.test(l))k = k.replace(Zc, "").substr(8).replace(/_(.)/g, function (a, b) { + return b.toUpperCase() + }); + var F = l.replace(/(Start|End)$/, ""); + A(F) && l === F + "Start" && (x = k, S = k.substr(0, k.length - 5) + "end", k = k.substr(0, k.length - 6)); + l = wa(k.toLowerCase()); + h[l] = k; + if (n || !c.hasOwnProperty(l))c[l] = s, Sc(a, l) && (c[l] = !0); + V(a, b, s, l, n); + w(b, l, "A", d, e, x, S) + } + a = a.className; + H(a) && (a = a.animVal); + if (L(a) && + "" !== a)for (; k = g.exec(a);)l = wa(k[2]), w(b, l, "C", d, e) && (c[l] = R(k[3])), a = a.substr(k.index + k[0].length); + break; + case Na: + if (11 === Ua)for (; a.parentNode && a.nextSibling && a.nextSibling.nodeType === Na;)a.nodeValue += a.nextSibling.nodeValue, a.parentNode.removeChild(a.nextSibling); + xa(b, a.nodeValue); + break; + case 8: + try { + if (k = f.exec(a.nodeValue))l = wa(k[1]), w(b, l, "M", d, e) && (c[l] = R(k[2])) + } catch ($) { + } + } + b.sort(Aa); + return b + } + + function va(a, b, c) { + var d = [], e = 0; + if (b && a.hasAttribute && a.hasAttribute(b)) { + do { + if (!a)throw ea("uterdir", b, c); + a.nodeType == qa && (a.hasAttribute(b) && e++, a.hasAttribute(c) && e--); + d.push(a); + a = a.nextSibling + } while (0 < e) + } else d.push(a); + return y(d) + } + + function Yc(a, b, c) { + return function (d, e, f, g, h) { + e = va(e[0], b, c); + return a(d, e, f, g, h) + } + } + + function E(a, b, d, e, f, g, h, k, s) { + function n(a, b, c, d) { + if (a) { + c && (a = Yc(a, c, d)); + a.require = E.require; + a.directiveName = w; + if (u === E || E.$$isolateScope)a = X(a, {isolateScope: !0}); + h.push(a) + } + if (b) { + c && (b = Yc(b, c, d)); + b.require = E.require; + b.directiveName = w; + if (u === E || E.$$isolateScope)b = X(b, {isolateScope: !0}); + k.push(b) + } + } + + function B(a, b, c, d) { + var e; + if (L(b)) { + var f = b.match(l); + b = b.substring(f[0].length); + var g = f[1] || f[3], f = "?" === f[2]; + "^^" === g ? c = c.parent() : e = (e = d && d[b]) && e.instance; + e || (d = "$" + b + "Controller", e = g ? c.inheritedData(d) : c.data(d)); + if (!e && !f)throw ea("ctreq", b, a); + } else if (G(b))for (e = [], g = 0, f = b.length; g < f; g++)e[g] = B(a, b[g], c, d); + return e || null + } + + function x(a, b, c, d, e, f) { + var g = ga(), h; + for (h in d) { + var k = d[h], l = { + $scope: k === u || k.$$isolateScope ? e : f, + $element: a, + $attrs: b, + $transclude: c + }, s = k.controller; + "@" == s && (s = b[k.name]); + l = p(s, + l, !0, k.controllerAs); + g[k.name] = l; + q || a.data("$" + k.name + "Controller", l.instance) + } + return g + } + + function S(a, c, e, f, g, l) { + function s(a, b, c) { + var d; + $a(a) || (c = b, b = a, a = t); + q && (d = m); + c || (c = q ? ja.parent() : ja); + return g(a, b, d, c, va) + } + + var n, p, C, F, m, ha, ja; + b === e ? (f = d, ja = d.$$element) : (ja = y(e), f = new aa(ja, d)); + u && (F = c.$new(!0)); + g && (ha = s, ha.$$boundTransclude = g); + N && (m = x(ja, f, ha, N, F, c)); + u && (Z.$$addScopeInfo(ja, F, !0, !(D && (D === u || D === u.$$originalDirective))), Z.$$addScopeClass(ja, !0), F.$$isolateBindings = u.$$isolateBindings, W(c, f, F, + F.$$isolateBindings, u, F)); + if (m) { + var K = u || $, I; + K && m[K.name] && (p = K.$$bindings.bindToController, (C = m[K.name]) && C.identifier && p && (I = C, l.$$destroyBindings = W(c, f, C.instance, p, K))); + for (n in m) { + C = m[n]; + var E = C(); + E !== C.instance && (C.instance = E, ja.data("$" + n + "Controller", E), C === I && (l.$$destroyBindings(), l.$$destroyBindings = W(c, f, E, p, K))) + } + } + n = 0; + for (l = h.length; n < l; n++)p = h[n], Y(p, p.isolateScope ? F : c, ja, f, p.require && B(p.directiveName, p.require, ja, m), ha); + var va = c; + u && (u.template || null === u.templateUrl) && (va = F); + a && a(va, + e.childNodes, t, g); + for (n = k.length - 1; 0 <= n; n--)p = k[n], Y(p, p.isolateScope ? F : c, ja, f, p.require && B(p.directiveName, p.require, ja, m), ha) + } + + s = s || {}; + for (var F = -Number.MAX_VALUE, $ = s.newScopeDirective, N = s.controllerDirectives, u = s.newIsolateScopeDirective, D = s.templateDirective, m = s.nonTlbTranscludeDirective, K = !1, I = !1, q = s.hasElementTranscludeDirective, ba = d.$$element = y(b), E, w, v, A = e, Aa, xa = 0, Ta = a.length; xa < Ta; xa++) { + E = a[xa]; + var M = E.$$start, P = E.$$end; + M && (ba = va(b, M, P)); + v = t; + if (F > E.priority)break; + if (v = E.scope)E.templateUrl || + (H(v) ? (O("new/isolated scope", u || $, E, ba), u = E) : O("new/isolated scope", u, E, ba)), $ = $ || E; + w = E.name; + !E.templateUrl && E.controller && (v = E.controller, N = N || ga(), O("'" + w + "' controller", N[w], E, ba), N[w] = E); + if (v = E.transclude)K = !0, E.$$tlb || (O("transclusion", m, E, ba), m = E), "element" == v ? (q = !0, F = E.priority, v = ba, ba = d.$$element = y(U.createComment(" " + w + ": " + d[w] + " ")), b = ba[0], T(f, za.call(v, 0), b), A = Z(v, e, F, g && g.name, {nonTlbTranscludeDirective: m})) : (v = y(Vb(b)).contents(), ba.empty(), A = Z(v, e)); + if (E.template)if (I = !0, O("template", + D, E, ba), D = E, v = z(E.template) ? E.template(ba, d) : E.template, v = fa(v), E.replace) { + g = E; + v = Tb.test(v) ? $c(Yb(E.templateNamespace, R(v))) : []; + b = v[0]; + if (1 != v.length || b.nodeType !== qa)throw ea("tplrt", w, ""); + T(f, ba, b); + Ta = {$attr: {}}; + v = ha(b, [], Ta); + var Q = a.splice(xa + 1, a.length - (xa + 1)); + u && ad(v); + a = a.concat(v).concat(Q); + J(d, Ta); + Ta = a.length + } else ba.html(v); + if (E.templateUrl)I = !0, O("template", D, E, ba), D = E, E.replace && (g = E), S = Lf(a.splice(xa, a.length - xa), ba, d, f, K && A, h, k, { + controllerDirectives: N, newScopeDirective: $ !== E && $, newIsolateScopeDirective: u, + templateDirective: D, nonTlbTranscludeDirective: m + }), Ta = a.length; else if (E.compile)try { + Aa = E.compile(ba, d, A), z(Aa) ? n(null, Aa, M, P) : Aa && n(Aa.pre, Aa.post, M, P) + } catch (Kf) { + c(Kf, ua(ba)) + } + E.terminal && (S.terminal = !0, F = Math.max(F, E.priority)) + } + S.scope = $ && !0 === $.scope; + S.transcludeOnThisElement = K; + S.templateOnThisElement = I; + S.transclude = A; + s.hasElementTranscludeDirective = q; + return S + } + + function ad(a) { + for (var b = 0, c = a.length; b < c; b++)a[b] = Ob(a[b], {$$isolateScope: !0}) + } + + function w(b, d, f, g, h, k, l) { + if (d === h)return null; + h = null; + if (e.hasOwnProperty(d)) { + var n; + d = a.get(d + "Directive"); + for (var p = 0, B = d.length; p < B; p++)try { + n = d[p], (g === t || g > n.priority) && -1 != n.restrict.indexOf(f) && (k && (n = Ob(n, { + $$start: k, + $$end: l + })), b.push(n), h = n) + } catch (x) { + c(x) + } + } + return h + } + + function A(b) { + if (e.hasOwnProperty(b))for (var c = a.get(b + "Directive"), d = 0, f = c.length; d < f; d++)if (b = c[d], b.multiElement)return !0; + return !1 + } + + function J(a, b) { + var c = b.$attr, d = a.$attr, e = a.$$element; + m(a, function (d, e) { + "$" != e.charAt(0) && (b[e] && b[e] !== d && (d += ("style" === e ? ";" : " ") + b[e]), a.$set(e, d, !0, c[e])) + }); + m(b, function (b, f) { + "class" == + f ? (D(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 Lf(a, b, c, e, f, g, h, k) { + var l = [], s, n, p = b[0], B = a.shift(), C = Ob(B, { + templateUrl: null, + transclude: null, + replace: null, + $$originalDirective: B + }), x = z(B.templateUrl) ? B.templateUrl(b, c) : B.templateUrl, N = B.templateNamespace; + b.empty(); + d(x).then(function (d) { + var F, u; + d = fa(d); + if (B.replace) { + d = Tb.test(d) ? $c(Yb(N, R(d))) : + []; + F = d[0]; + if (1 != d.length || F.nodeType !== qa)throw ea("tplrt", B.name, x); + d = {$attr: {}}; + T(e, b, F); + var K = ha(F, [], d); + H(B.scope) && ad(K); + a = K.concat(a); + J(c, d) + } else F = p, b.html(d); + a.unshift(C); + s = E(a, F, c, f, b, B, g, h, k); + m(e, function (a, c) { + a == F && (e[c] = b[0]) + }); + for (n = S(b[0].childNodes, f); l.length;) { + d = l.shift(); + u = l.shift(); + var I = l.shift(), va = l.shift(), K = b[0]; + if (!d.$$destroyed) { + if (u !== p) { + var Z = u.className; + k.hasElementTranscludeDirective && B.replace || (K = Vb(F)); + T(I, y(u), K); + D(y(K), Z) + } + u = s.transcludeOnThisElement ? $(d, s.transclude, + va) : va; + s(n, d, K, e, u, s) + } + } + l = null + }); + return function (a, b, c, d, e) { + a = e; + b.$$destroyed || (l ? l.push(b, c, d, a) : (s.transcludeOnThisElement && (a = $(b, s.transclude, e)), s(n, b, c, d, a, s))) + } + } + + function Aa(a, b) { + var c = b.priority - a.priority; + return 0 !== c ? c : a.name !== b.name ? a.name < b.name ? -1 : 1 : a.index - b.index + } + + function O(a, b, c, d) { + function e(a) { + return a ? " (module: " + a + ")" : "" + } + + if (b)throw ea("multidir", b.name, e(b.$$moduleName), c.name, e(c.$$moduleName), a, ua(d)); + } + + function xa(a, c) { + var d = b(c, !0); + d && a.push({ + priority: 0, compile: function (a) { + a = + a.parent(); + var b = !!a.length; + b && Z.$$addBindingClass(a); + return function (a, c) { + var e = c.parent(); + b || Z.$$addBindingClass(e); + Z.$$addBindingInfo(e, d.expressions); + a.$watch(d, function (a) { + c[0].nodeValue = a + }) + } + } + }) + } + + function Yb(a, b) { + a = M(a || "html"); + switch (a) { + case "svg": + case "math": + var c = U.createElement("div"); + c.innerHTML = "<" + a + ">" + b + ""; + return c.childNodes[0].childNodes; + default: + return b + } + } + + function Q(a, b) { + if ("srcdoc" == b)return I.HTML; + var c = ta(a); + if ("xlinkHref" == b || "form" == c && "action" == b || "img" != c && ("src" == b || + "ngSrc" == b))return I.RESOURCE_URL + } + + function V(a, c, d, e, f) { + var g = Q(a, e); + f = h[e] || f; + var l = b(d, !0, g, f); + if (l) { + if ("multiple" === e && "select" === ta(a))throw ea("selmulti", ua(a)); + c.push({ + priority: 100, compile: function () { + return { + pre: function (a, c, h) { + c = h.$$observers || (h.$$observers = {}); + if (k.test(e))throw ea("nodomevents"); + var s = h[e]; + s !== d && (l = s && b(s, !0, g, f), d = s); + l && (h[e] = l(a), (c[e] || (c[e] = [])).$$inter = !0, (h.$$observers && h.$$observers[e].$$scope || a).$watch(l, function (a, b) { + "class" === e && a != b ? h.$updateClass(a, b) : h.$set(e, + a) + })) + } + } + } + }) + } + } + + function T(a, b, c) { + var d = b[0], e = b.length, f = d.parentNode, g, h; + if (a)for (g = 0, h = a.length; g < h; g++)if (a[g] == d) { + a[g++] = c; + h = g + e - 1; + for (var k = a.length; g < k; g++, h++)h < k ? a[g] = a[h] : delete a[g]; + a.length -= e - 1; + a.context === d && (a.context = c); + break + } + f && f.replaceChild(c, d); + a = U.createDocumentFragment(); + a.appendChild(d); + y.hasData(d) && (y(c).data(y(d).data()), la ? (Rb = !0, la.cleanData([d])) : delete y.cache[d[y.expando]]); + d = 1; + for (e = b.length; d < e; d++)f = b[d], y(f).remove(), a.appendChild(f), delete b[d]; + b[0] = c; + b.length = 1 + } + + function X(a, + b) { + return P(function () { + return a.apply(null, arguments) + }, a, b) + } + + function Y(a, b, d, e, f, g) { + try { + a(b, d, e, f, g) + } catch (h) { + c(h, ua(d)) + } + } + + function W(a, c, d, e, f, g) { + var h; + m(e, function (e, g) { + var k = e.attrName, l = e.optional, s = e.mode, n, p, B, C; + Xa.call(c, k) || (c[k] = t); + switch (s) { + case "@": + c[k] || l || (d[g] = t); + c.$observe(k, function (a) { + d[g] = a + }); + c.$$observers[k].$$scope = a; + c[k] && (d[g] = b(c[k])(a)); + break; + case "=": + if (l && !c[k])break; + p = u(c[k]); + C = p.literal ? ka : function (a, b) { + return a === b || a !== a && b !== b + }; + B = p.assign || function () { + n = d[g] = p(a); + throw ea("nonassign", + c[k], f.name); + }; + n = d[g] = p(a); + l = function (b) { + C(b, d[g]) || (C(b, n) ? B(a, b = d[g]) : d[g] = b); + return n = b + }; + l.$stateful = !0; + l = e.collection ? a.$watchCollection(c[k], l) : a.$watch(u(c[k], l), null, p.literal); + h = h || []; + h.push(l); + break; + case "&": + p = u(c[k]); + if (p === v && l)break; + d[g] = function (b) { + return p(a, b) + } + } + }); + e = h ? function () { + for (var a = 0, b = h.length; a < b; ++a)h[a]() + } : v; + return g && e !== v ? (g.$on("$destroy", e), v) : e + } + + var aa = function (a, b) { + if (b) { + var c = Object.keys(b), d, e, f; + d = 0; + for (e = c.length; d < e; d++)f = c[d], this[f] = b[f] + } else this.$attr = {}; + this.$$element = + a + }; + aa.prototype = { + $normalize: wa, $addClass: function (a) { + a && 0 < a.length && B.addClass(this.$$element, a) + }, $removeClass: function (a) { + a && 0 < a.length && B.removeClass(this.$$element, a) + }, $updateClass: function (a, b) { + var c = bd(a, b); + c && c.length && B.addClass(this.$$element, c); + (c = bd(b, a)) && c.length && B.removeClass(this.$$element, c) + }, $set: function (a, b, d, e) { + var f = this.$$element[0], g = Sc(f, a), h = Ff(f, a), f = a; + g ? (this.$$element.prop(a, b), e = g) : h && (this[h] = b, f = h); + this[a] = b; + e ? this.$attr[a] = e : (e = this.$attr[a]) || (this.$attr[a] = e = Bc(a, + "-")); + g = ta(this.$$element); + if ("a" === g && "href" === a || "img" === g && "src" === a)this[a] = b = N(b, "src" === a); else if ("img" === g && "srcset" === a) { + for (var g = "", h = R(b), k = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/, k = /\s/.test(h) ? k : /(,)/, h = h.split(k), k = Math.floor(h.length / 2), l = 0; l < k; l++)var s = 2 * l, g = g + N(R(h[s]), !0), g = g + (" " + R(h[s + 1])); + h = R(h[2 * l]).split(/\s/); + g += N(R(h[0]), !0); + 2 === h.length && (g += " " + R(h[1])); + this[a] = b = g + } + !1 !== d && (null === b || b === t ? this.$$element.removeAttr(e) : this.$$element.attr(e, b)); + (a = this.$$observers) && m(a[f], + function (a) { + try { + a(b) + } catch (d) { + c(d) + } + }) + }, $observe: function (a, b) { + var c = this, d = c.$$observers || (c.$$observers = ga()), e = d[a] || (d[a] = []); + e.push(b); + K.$evalAsync(function () { + !e.$$inter && c.hasOwnProperty(a) && b(c[a]) + }); + return function () { + bb(e, b) + } + } + }; + var ca = b.startSymbol(), da = b.endSymbol(), fa = "{{" == ca || "}}" == da ? Ya : function (a) { + return a.replace(/\{\{/g, ca).replace(/}}/g, da) + }, ia = /^ngAttr[A-Z]/; + Z.$$addBindingInfo = n ? function (a, b) { + var c = a.data("$binding") || []; + G(b) ? c = c.concat(b) : c.push(b); + a.data("$binding", c) + } : v; + Z.$$addBindingClass = + n ? function (a) { + D(a, "ng-binding") + } : v; + Z.$$addScopeInfo = n ? function (a, b, c, d) { + a.data(c ? d ? "$isolateScopeNoTemplate" : "$isolateScope" : "$scope", b) + } : v; + Z.$$addScopeClass = n ? function (a, b) { + D(a, b ? "ng-isolate-scope" : "ng-scope") + } : v; + return Z + }] + } + + function wa(b) { + return hb(b.replace(Zc, "")) + } + + function bd(b, a) { + var c = "", d = b.split(/\s+/), e = a.split(/\s+/), f = 0; + a:for (; f < d.length; f++) { + for (var g = d[f], h = 0; h < e.length; h++)if (g == e[h])continue a; + c += (0 < c.length ? " " : "") + g + } + return c + } + + function $c(b) { + b = y(b); + var a = b.length; + if (1 >= a)return b; + for (; a--;)8 === + b[a].nodeType && Mf.call(b, a, 1); + return b + } + + function Xe() { + var b = {}, a = !1; + this.register = function (a, d) { + Ra(a, "controller"); + H(a) ? P(b, a) : b[a] = d + }; + this.allowGlobals = function () { + a = !0 + }; + this.$get = ["$injector", "$window", function (c, d) { + function e(a, b, c, d) { + if (!a || !H(a.$scope))throw J("$controller")("noscp", d, b); + a.$scope[b] = c + } + + return function (f, g, h, l) { + var k, n, r; + h = !0 === h; + l && L(l) && (r = l); + if (L(f)) { + l = f.match(Xc); + if (!l)throw Nf("ctrlfmt", f); + n = l[1]; + r = r || l[3]; + f = b.hasOwnProperty(n) ? b[n] : Dc(g.$scope, n, !0) || (a ? Dc(d, n, !0) : t); + Qa(f, + n, !0) + } + if (h)return h = (G(f) ? f[f.length - 1] : f).prototype, k = Object.create(h || null), r && e(g, r, k, n || f.name), P(function () { + var a = c.invoke(f, k, g, n); + a !== k && (H(a) || z(a)) && (k = a, r && e(g, r, k, n || f.name)); + return k + }, {instance: k, identifier: r}); + k = c.instantiate(f, g, n); + r && e(g, r, k, n || f.name); + return k + } + }] + } + + function Ye() { + this.$get = ["$window", function (b) { + return y(b.document) + }] + } + + function Ze() { + this.$get = ["$log", function (b) { + return function (a, c) { + b.error.apply(b, arguments) + } + }] + } + + function Zb(b) { + return H(b) ? aa(b) ? b.toISOString() : db(b) : b + } + + function cf() { + this.$get = function () { + return function (b) { + if (!b)return ""; + var a = []; + oc(b, function (b, d) { + null === b || A(b) || (G(b) ? m(b, function (b, c) { + a.push(ma(d) + "=" + ma(Zb(b))) + }) : a.push(ma(d) + "=" + ma(Zb(b)))) + }); + return a.join("&") + } + } + } + + function df() { + this.$get = function () { + return function (b) { + function a(b, e, f) { + null === b || A(b) || (G(b) ? m(b, function (b) { + a(b, e + "[]") + }) : H(b) && !aa(b) ? oc(b, function (b, c) { + a(b, e + (f ? "" : "[") + c + (f ? "" : "]")) + }) : c.push(ma(e) + "=" + ma(Zb(b)))) + } + + if (!b)return ""; + var c = []; + a(b, "", !0); + return c.join("&") + } + } + } + + function $b(b, + a) { + if (L(b)) { + var c = b.replace(Of, "").trim(); + if (c) { + var d = a("Content-Type"); + (d = d && 0 === d.indexOf(cd)) || (d = (d = c.match(Pf)) && Qf[d[0]].test(c)); + d && (b = wc(c)) + } + } + return b + } + + function dd(b) { + var a = ga(), c; + L(b) ? m(b.split("\n"), function (b) { + c = b.indexOf(":"); + var e = M(R(b.substr(0, c))); + b = R(b.substr(c + 1)); + e && (a[e] = a[e] ? a[e] + ", " + b : b) + }) : H(b) && m(b, function (b, c) { + var f = M(c), g = R(b); + f && (a[f] = a[f] ? a[f] + ", " + g : g) + }); + return a + } + + function ed(b) { + var a; + return function (c) { + a || (a = dd(b)); + return c ? (c = a[M(c)], void 0 === c && (c = null), c) : a + } + } + + function fd(b, + a, c, d) { + if (z(d))return d(b, a, c); + m(d, function (d) { + b = d(b, a, c) + }); + return b + } + + function bf() { + var b = this.defaults = { + transformResponse: [$b], + transformRequest: [function (a) { + return H(a) && "[object File]" !== sa.call(a) && "[object Blob]" !== sa.call(a) && "[object FormData]" !== sa.call(a) ? db(a) : a + }], + headers: {common: {Accept: "application/json, text/plain, */*"}, post: ia(ac), put: ia(ac), patch: ia(ac)}, + xsrfCookieName: "XSRF-TOKEN", + xsrfHeaderName: "X-XSRF-TOKEN", + paramSerializer: "$httpParamSerializer" + }, a = !1; + this.useApplyAsync = function (b) { + return w(b) ? + (a = !!b, this) : a + }; + var c = this.interceptors = []; + this.$get = ["$httpBackend", "$$cookieReader", "$cacheFactory", "$rootScope", "$q", "$injector", function (d, e, f, g, h, l) { + function k(a) { + function c(a) { + var b = P({}, a); + b.data = a.data ? fd(a.data, a.headers, a.status, e.transformResponse) : a.data; + a = a.status; + return 200 <= a && 300 > a ? b : h.reject(b) + } + + function d(a, b) { + var c, e = {}; + m(a, function (a, d) { + z(a) ? (c = a(b), null != c && (e[d] = c)) : e[d] = a + }); + return e + } + + if (!ca.isObject(a))throw J("$http")("badreq", a); + var e = P({ + method: "get", transformRequest: b.transformRequest, + transformResponse: b.transformResponse, paramSerializer: b.paramSerializer + }, a); + e.headers = function (a) { + var c = b.headers, e = P({}, a.headers), f, g, h, c = P({}, c.common, c[M(a.method)]); + a:for (f in c) { + g = M(f); + for (h in e)if (M(h) === g)continue a; + e[f] = c[f] + } + return d(e, ia(a)) + }(a); + e.method = rb(e.method); + e.paramSerializer = L(e.paramSerializer) ? l.get(e.paramSerializer) : e.paramSerializer; + var f = [function (a) { + var d = a.headers, e = fd(a.data, ed(d), t, a.transformRequest); + A(e) && m(d, function (a, b) { + "content-type" === M(b) && delete d[b] + }); + A(a.withCredentials) && !A(b.withCredentials) && (a.withCredentials = b.withCredentials); + return n(a, e).then(c, c) + }, t], g = h.when(e); + for (m(x, 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(), g = g.then(a, k) + } + g.success = function (a) { + Qa(a, "fn"); + g.then(function (b) { + a(b.data, b.status, b.headers, e) + }); + return g + }; + g.error = function (a) { + Qa(a, "fn"); + g.then(null, function (b) { + a(b.data, b.status, b.headers, e) + }); + return g + }; + return g + } + + function n(c, f) { + function l(b, c, d, e) { + function f() { + n(c, b, d, e) + } + + N && (200 <= b && 300 > b ? N.put(S, [b, c, dd(d), e]) : N.remove(S)); + a ? g.$applyAsync(f) : (f(), g.$$phase || g.$apply()) + } + + function n(a, b, d, e) { + b = Math.max(b, 0); + (200 <= b && 300 > b ? I.resolve : I.reject)({ + data: a, + status: b, + headers: ed(d), + config: c, + statusText: e + }) + } + + function x(a) { + n(a.data, a.status, ia(a.headers()), a.statusText) + } + + function m() { + var a = k.pendingRequests.indexOf(c); + -1 !== a && k.pendingRequests.splice(a, 1) + } + + var I = h.defer(), B = I.promise, N, D, q = c.headers, S = r(c.url, c.paramSerializer(c.params)); + k.pendingRequests.push(c); + B.then(m, m); + !c.cache && !b.cache || !1 === c.cache || "GET" !== c.method && "JSONP" !== c.method || (N = H(c.cache) ? c.cache : H(b.cache) ? b.cache : s); + N && (D = N.get(S), w(D) ? D && z(D.then) ? D.then(x, x) : G(D) ? n(D[1], D[0], ia(D[2]), D[3]) : n(D, 200, {}, "OK") : N.put(S, B)); + A(D) && ((D = gd(c.url) ? e()[c.xsrfCookieName || b.xsrfCookieName] : t) && (q[c.xsrfHeaderName || b.xsrfHeaderName] = D), d(c.method, S, f, l, q, c.timeout, c.withCredentials, c.responseType)); + return B + } + + function r(a, b) { + 0 < b.length && (a += (-1 == a.indexOf("?") ? "?" : "&") + b); + return a + } + + var s = f("$http"); + b.paramSerializer = L(b.paramSerializer) ? l.get(b.paramSerializer) : b.paramSerializer; + var x = []; + m(c, function (a) { + x.unshift(L(a) ? l.get(a) : l.invoke(a)) + }); + k.pendingRequests = []; + (function (a) { + m(arguments, function (a) { + k[a] = function (b, c) { + return k(P({}, c || {}, {method: a, url: b})) + } + }) + })("get", "delete", "head", "jsonp"); + (function (a) { + m(arguments, function (a) { + k[a] = function (b, c, d) { + return k(P({}, d || {}, {method: a, url: b, data: c})) + } + }) + })("post", "put", "patch"); + k.defaults = b; + return k + }] + } + + function Rf() { + return new O.XMLHttpRequest + } + + function ef() { + this.$get = ["$browser", "$window", "$document", function (b, a, c) { + return Sf(b, Rf, b.defer, a.angular.callbacks, c[0]) + }] + } + + function Sf(b, a, c, d, e) { + function f(a, b, c) { + var f = e.createElement("script"), n = null; + f.type = "text/javascript"; + f.src = a; + f.async = !0; + n = function (a) { + f.removeEventListener("load", n, !1); + f.removeEventListener("error", n, !1); + e.body.removeChild(f); + f = null; + var g = -1, x = "unknown"; + a && ("load" !== a.type || d[b].called || (a = {type: "error"}), x = a.type, g = "error" === a.type ? 404 : 200); + c && c(g, x) + }; + f.addEventListener("load", + n, !1); + f.addEventListener("error", n, !1); + e.body.appendChild(f); + return n + } + + return function (e, h, l, k, n, r, s, x) { + function C() { + p && p(); + K && K.abort() + } + + function F(a, d, e, f, g) { + I !== t && c.cancel(I); + p = K = null; + a(d, e, f, g); + b.$$completeOutstandingRequest(v) + } + + b.$$incOutstandingRequestCount(); + h = h || b.url(); + if ("jsonp" == M(e)) { + var u = "_" + (d.counter++).toString(36); + d[u] = function (a) { + d[u].data = a; + d[u].called = !0 + }; + var p = f(h.replace("JSON_CALLBACK", "angular.callbacks." + u), u, function (a, b) { + F(k, a, d[u].data, "", b); + d[u] = v + }) + } else { + var K = a(); + K.open(e, + h, !0); + m(n, function (a, b) { + w(a) && K.setRequestHeader(b, a) + }); + K.onload = function () { + var a = K.statusText || "", b = "response" in K ? K.response : K.responseText, c = 1223 === K.status ? 204 : K.status; + 0 === c && (c = b ? 200 : "file" == Ba(h).protocol ? 404 : 0); + F(k, c, b, K.getAllResponseHeaders(), a) + }; + e = function () { + F(k, -1, null, null, "") + }; + K.onerror = e; + K.onabort = e; + s && (K.withCredentials = !0); + if (x)try { + K.responseType = x + } catch (q) { + if ("json" !== x)throw q; + } + K.send(l) + } + if (0 < r)var I = c(C, r); else r && z(r.then) && r.then(C) + } + } + + function $e() { + var b = "{{", a = "}}"; + this.startSymbol = + function (a) { + return a ? (b = a, this) : b + }; + this.endSymbol = function (b) { + return b ? (a = b, this) : a + }; + this.$get = ["$parse", "$exceptionHandler", "$sce", function (c, d, e) { + function f(a) { + return "\\\\\\" + a + } + + function g(c) { + return c.replace(n, b).replace(r, a) + } + + function h(f, h, n, r) { + function u(a) { + try { + var b = a; + a = n ? e.getTrusted(n, b) : e.valueOf(b); + var c; + if (r && !w(a))c = a; else if (null == a)c = ""; else { + switch (typeof a) { + case "string": + break; + case "number": + a = "" + a; + break; + default: + a = db(a) + } + c = a + } + return c + } catch (g) { + d(Ka.interr(f, g)) + } + } + + r = !!r; + for (var p, m, q = 0, I = + [], B = [], N = f.length, D = [], t = []; q < N;)if (-1 != (p = f.indexOf(b, q)) && -1 != (m = f.indexOf(a, p + l)))q !== p && D.push(g(f.substring(q, p))), q = f.substring(p + l, m), I.push(q), B.push(c(q, u)), q = m + k, t.push(D.length), D.push(""); else { + q !== N && D.push(g(f.substring(q))); + break + } + n && 1 < D.length && Ka.throwNoconcat(f); + if (!h || I.length) { + var S = function (a) { + for (var b = 0, c = I.length; b < c; b++) { + if (r && A(a[b]))return; + D[t[b]] = a[b] + } + return D.join("") + }; + return P(function (a) { + var b = 0, c = I.length, e = Array(c); + try { + for (; b < c; b++)e[b] = B[b](a); + return S(e) + } catch (g) { + d(Ka.interr(f, + g)) + } + }, { + exp: f, expressions: I, $$watchDelegate: function (a, b) { + var c; + return a.$watchGroup(B, function (d, e) { + var f = S(d); + z(b) && b.call(this, f, d !== e ? c : f, a); + c = f + }) + } + }) + } + } + + var l = b.length, k = a.length, n = new RegExp(b.replace(/./g, f), "g"), r = new RegExp(a.replace(/./g, f), "g"); + h.startSymbol = function () { + return b + }; + h.endSymbol = function () { + return a + }; + return h + }] + } + + function af() { + this.$get = ["$rootScope", "$window", "$q", "$$q", function (b, a, c, d) { + function e(e, h, l, k) { + var n = 4 < arguments.length, r = n ? za.call(arguments, 4) : [], s = a.setInterval, x = a.clearInterval, + C = 0, F = w(k) && !k, u = (F ? d : c).defer(), p = u.promise; + l = w(l) ? l : 0; + p.then(null, null, n ? function () { + e.apply(null, r) + } : e); + p.$$intervalId = s(function () { + u.notify(C++); + 0 < l && C >= l && (u.resolve(C), x(p.$$intervalId), delete f[p.$$intervalId]); + F || b.$apply() + }, h); + f[p.$$intervalId] = u; + return p + } + + var f = {}; + e.cancel = function (b) { + return b && b.$$intervalId in f ? (f[b.$$intervalId].reject("canceled"), a.clearInterval(b.$$intervalId), delete f[b.$$intervalId], !0) : !1 + }; + return e + }] + } + + function ge() { + 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", + ERANAMES: ["Before Christ", "Anno Domini"], + ERAS: ["BC", "AD"] + }, pluralCat: function (b) { + return 1 === b ? "one" : "other" + } + } + } + } + + function bc(b) { + b = b.split("/"); + for (var a = b.length; a--;)b[a] = ob(b[a]); + return b.join("/") + } + + function hd(b, a) { + var c = Ba(b); + a.$$protocol = c.protocol; + a.$$host = c.hostname; + a.$$port = W(c.port) || Tf[c.protocol] || null + } + + function id(b, a) { + var c = "/" !== b.charAt(0); + c && (b = "/" + b); + var d = Ba(b); + a.$$path = decodeURIComponent(c && "/" === d.pathname.charAt(0) ? d.pathname.substring(1) : d.pathname); + a.$$search = zc(d.search); + a.$$hash = decodeURIComponent(d.hash); + a.$$path && "/" != a.$$path.charAt(0) && (a.$$path = "/" + a.$$path) + } + + function ya(b, a) { + if (0 === a.indexOf(b))return a.substr(b.length) + } + + function Ja(b) { + var a = b.indexOf("#"); + return -1 == a ? b : b.substr(0, a) + } + + function Bb(b) { + return b.replace(/(#.+)|#$/, + "$1") + } + + function cc(b) { + return b.substr(0, Ja(b).lastIndexOf("/") + 1) + } + + function dc(b, a) { + this.$$html5 = !0; + a = a || ""; + var c = cc(b); + hd(b, this); + this.$$parse = function (a) { + var b = ya(c, a); + if (!L(b))throw Cb("ipthprfx", a, c); + id(b, this); + this.$$path || (this.$$path = "/"); + this.$$compose() + }; + this.$$compose = function () { + var a = Qb(this.$$search), b = this.$$hash ? "#" + ob(this.$$hash) : ""; + this.$$url = bc(this.$$path) + (a ? "?" + a : "") + b; + this.$$absUrl = c + this.$$url.substr(1) + }; + this.$$parseLinkUrl = function (d, e) { + if (e && "#" === e[0])return this.hash(e.slice(1)), + !0; + var f, g; + (f = ya(b, d)) !== t ? (g = f, g = (f = ya(a, f)) !== t ? c + (ya("/", f) || f) : b + g) : (f = ya(c, d)) !== t ? g = c + f : c == d + "/" && (g = c); + g && this.$$parse(g); + return !!g + } + } + + function ec(b, a) { + var c = cc(b); + hd(b, this); + this.$$parse = function (d) { + var e = ya(b, d) || ya(c, d), f; + A(e) || "#" !== e.charAt(0) ? this.$$html5 ? f = e : (f = "", A(e) && (b = d, this.replace())) : (f = ya(a, e), A(f) && (f = e)); + id(f, this); + d = this.$$path; + var e = b, g = /^\/[A-Z]:(\/.*)/; + 0 === f.indexOf(e) && (f = f.replace(e, "")); + g.exec(f) || (d = (f = g.exec(d)) ? f[1] : d); + this.$$path = d; + this.$$compose() + }; + this.$$compose = + function () { + var c = Qb(this.$$search), e = this.$$hash ? "#" + ob(this.$$hash) : ""; + this.$$url = bc(this.$$path) + (c ? "?" + c : "") + e; + this.$$absUrl = b + (this.$$url ? a + this.$$url : "") + }; + this.$$parseLinkUrl = function (a, c) { + return Ja(b) == Ja(a) ? (this.$$parse(a), !0) : !1 + } + } + + function jd(b, a) { + this.$$html5 = !0; + ec.apply(this, arguments); + var c = cc(b); + this.$$parseLinkUrl = function (d, e) { + if (e && "#" === e[0])return this.hash(e.slice(1)), !0; + var f, g; + b == Ja(d) ? f = d : (g = ya(c, d)) ? f = b + a + g : c === d + "/" && (f = c); + f && this.$$parse(f); + return !!f + }; + this.$$compose = function () { + var c = + Qb(this.$$search), e = this.$$hash ? "#" + ob(this.$$hash) : ""; + this.$$url = bc(this.$$path) + (c ? "?" + c : "") + e; + this.$$absUrl = b + a + this.$$url + } + } + + function Db(b) { + return function () { + return this[b] + } + } + + function kd(b, a) { + return function (c) { + if (A(c))return this[b]; + this[b] = a(c); + this.$$compose(); + return this + } + } + + function ff() { + var b = "", a = {enabled: !1, requireBase: !0, rewriteLinks: !0}; + this.hashPrefix = function (a) { + return w(a) ? (b = a, this) : b + }; + this.html5Mode = function (b) { + return ab(b) ? (a.enabled = b, this) : H(b) ? (ab(b.enabled) && (a.enabled = b.enabled), + ab(b.requireBase) && (a.requireBase = b.requireBase), ab(b.rewriteLinks) && (a.rewriteLinks = b.rewriteLinks), this) : a + }; + this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", "$window", function (c, d, e, f, g) { + function h(a, b, c) { + var e = k.url(), f = k.$$state; + try { + d.url(a, b, c), k.$$state = d.state() + } catch (g) { + throw k.url(e), k.$$state = f, g; + } + } + + function l(a, b) { + c.$broadcast("$locationChangeSuccess", k.absUrl(), a, k.$$state, b) + } + + var k, n; + n = d.baseHref(); + var r = d.url(), s; + if (a.enabled) { + if (!n && a.requireBase)throw Cb("nobase"); + s = r.substring(0, + r.indexOf("/", r.indexOf("//") + 2)) + (n || "/"); + n = e.history ? dc : jd + } else s = Ja(r), n = ec; + k = new n(s, "#" + b); + k.$$parseLinkUrl(r, r); + k.$$state = d.state(); + var x = /^\s*(javascript|mailto):/i; + f.on("click", function (b) { + if (a.rewriteLinks && !b.ctrlKey && !b.metaKey && !b.shiftKey && 2 != b.which && 2 != b.button) { + for (var e = y(b.target); "a" !== ta(e[0]);)if (e[0] === f[0] || !(e = e.parent())[0])return; + var h = e.prop("href"), l = e.attr("href") || e.attr("xlink:href"); + H(h) && "[object SVGAnimatedString]" === h.toString() && (h = Ba(h.animVal).href); + x.test(h) || !h || e.attr("target") || b.isDefaultPrevented() || !k.$$parseLinkUrl(h, l) || (b.preventDefault(), k.absUrl() != d.url() && (c.$apply(), g.angular["ff-684208-preventDefault"] = !0)) + } + }); + Bb(k.absUrl()) != Bb(r) && d.url(k.absUrl(), !0); + var C = !0; + d.onUrlChange(function (a, b) { + c.$evalAsync(function () { + var d = k.absUrl(), e = k.$$state, f; + k.$$parse(a); + k.$$state = b; + f = c.$broadcast("$locationChangeStart", a, d, b, e).defaultPrevented; + k.absUrl() === a && (f ? (k.$$parse(d), k.$$state = e, h(d, !1, e)) : (C = !1, l(d, e))) + }); + c.$$phase || c.$digest() + }); + c.$watch(function () { + var a = + Bb(d.url()), b = Bb(k.absUrl()), f = d.state(), g = k.$$replace, n = a !== b || k.$$html5 && e.history && f !== k.$$state; + if (C || n)C = !1, c.$evalAsync(function () { + var b = k.absUrl(), d = c.$broadcast("$locationChangeStart", b, a, k.$$state, f).defaultPrevented; + k.absUrl() === b && (d ? (k.$$parse(a), k.$$state = f) : (n && h(b, g, f === k.$$state ? null : k.$$state), l(a, f))) + }); + k.$$replace = !1 + }); + return k + }] + } + + function gf() { + var b = !0, a = this; + this.debugEnabled = function (a) { + return w(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 || v; + a = !1; + try { + a = !!e.apply + } catch (l) { + } + return a ? function () { + var a = []; + m(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 Ca(b, a) { + if ("__defineGetter__" === b || "__defineSetter__" === b || "__lookupGetter__" === b || "__lookupSetter__" === b || "__proto__" === b)throw da("isecfld", a); + return b + } + + function oa(b, a) { + if (b) { + if (b.constructor === b)throw da("isecfn", a); + if (b.window === b)throw da("isecwindow", a); + if (b.children && (b.nodeName || b.prop && b.attr && b.find))throw da("isecdom", a); + if (b === Object)throw da("isecobj", a); + } + return b + } + + function ld(b, a) { + if (b) { + if (b.constructor === b)throw da("isecfn", a); + if (b === Uf || b === Vf || b === Wf)throw da("isecff", a); + } + } + + function Xf(b, a) { + return "undefined" !== typeof b ? b : a + } + + function md(b, a) { + return "undefined" === typeof b ? a : "undefined" === typeof a ? b : b + a + } + + function T(b, a) { + var c, d; + switch (b.type) { + case q.Program: + c = !0; + m(b.body, function (b) { + T(b.expression, a); + c = c && b.expression.constant + }); + b.constant = c; + break; + case q.Literal: + b.constant = !0; + b.toWatch = []; + break; + case q.UnaryExpression: + T(b.argument, a); + b.constant = b.argument.constant; + b.toWatch = b.argument.toWatch; + break; + case q.BinaryExpression: + T(b.left, a); + T(b.right, a); + b.constant = b.left.constant && + b.right.constant; + b.toWatch = b.left.toWatch.concat(b.right.toWatch); + break; + case q.LogicalExpression: + T(b.left, a); + T(b.right, a); + b.constant = b.left.constant && b.right.constant; + b.toWatch = b.constant ? [] : [b]; + break; + case q.ConditionalExpression: + T(b.test, a); + T(b.alternate, a); + T(b.consequent, a); + b.constant = b.test.constant && b.alternate.constant && b.consequent.constant; + b.toWatch = b.constant ? [] : [b]; + break; + case q.Identifier: + b.constant = !1; + b.toWatch = [b]; + break; + case q.MemberExpression: + T(b.object, a); + b.computed && T(b.property, a); + b.constant = b.object.constant && (!b.computed || b.property.constant); + b.toWatch = [b]; + break; + case q.CallExpression: + c = b.filter ? !a(b.callee.name).$stateful : !1; + d = []; + m(b.arguments, function (b) { + T(b, a); + c = c && b.constant; + b.constant || d.push.apply(d, b.toWatch) + }); + b.constant = c; + b.toWatch = b.filter && !a(b.callee.name).$stateful ? d : [b]; + break; + case q.AssignmentExpression: + T(b.left, a); + T(b.right, a); + b.constant = b.left.constant && b.right.constant; + b.toWatch = [b]; + break; + case q.ArrayExpression: + c = !0; + d = []; + m(b.elements, function (b) { + T(b, a); + c = + c && b.constant; + b.constant || d.push.apply(d, b.toWatch) + }); + b.constant = c; + b.toWatch = d; + break; + case q.ObjectExpression: + c = !0; + d = []; + m(b.properties, function (b) { + T(b.value, a); + c = c && b.value.constant; + b.value.constant || d.push.apply(d, b.value.toWatch) + }); + b.constant = c; + b.toWatch = d; + break; + case q.ThisExpression: + b.constant = !1, b.toWatch = [] + } + } + + function nd(b) { + if (1 == b.length) { + b = b[0].expression; + var a = b.toWatch; + return 1 !== a.length ? a : a[0] !== b ? a : t + } + } + + function od(b) { + return b.type === q.Identifier || b.type === q.MemberExpression + } + + function pd(b) { + if (1 === + b.body.length && od(b.body[0].expression))return { + type: q.AssignmentExpression, + left: b.body[0].expression, + right: {type: q.NGValueParameter}, + operator: "=" + } + } + + function qd(b) { + return 0 === b.body.length || 1 === b.body.length && (b.body[0].expression.type === q.Literal || b.body[0].expression.type === q.ArrayExpression || b.body[0].expression.type === q.ObjectExpression) + } + + function rd(b, a) { + this.astBuilder = b; + this.$filter = a + } + + function sd(b, a) { + this.astBuilder = b; + this.$filter = a + } + + function Eb(b, a, c, d) { + oa(b, d); + a = a.split("."); + for (var e, f = 0; 1 < + a.length; f++) { + e = Ca(a.shift(), d); + var g = oa(b[e], d); + g || (g = {}, b[e] = g); + b = g + } + e = Ca(a.shift(), d); + oa(b[e], d); + return b[e] = c + } + + function Fb(b) { + return "constructor" == b + } + + function fc(b) { + return z(b.valueOf) ? b.valueOf() : Yf.call(b) + } + + function hf() { + var b = ga(), a = ga(); + this.$get = ["$filter", "$sniffer", function (c, d) { + function e(a, b) { + return null == a || null == b ? a === b : "object" === typeof a && (a = fc(a), "object" === typeof a) ? !1 : a === b || a !== a && b !== b + } + + function f(a, b, c, d, f) { + var g = d.inputs, h; + if (1 === g.length) { + var k = e, g = g[0]; + return a.$watch(function (a) { + var b = + g(a); + e(b, k) || (h = d(a, t, t, [b]), k = b && fc(b)); + return h + }, b, c, f) + } + for (var l = [], n = [], r = 0, m = g.length; r < m; r++)l[r] = e, n[r] = null; + return a.$watch(function (a) { + for (var b = !1, c = 0, f = g.length; c < f; c++) { + var k = g[c](a); + if (b || (b = !e(k, l[c])))n[c] = k, l[c] = k && fc(k) + } + b && (h = d(a, t, t, n)); + return h + }, b, c, f) + } + + function g(a, b, c, d) { + var e, f; + return e = a.$watch(function (a) { + return d(a) + }, function (a, c, d) { + f = a; + z(b) && b.apply(this, arguments); + w(a) && d.$$postDigest(function () { + w(f) && e() + }) + }, c) + } + + function h(a, b, c, d) { + function e(a) { + var b = !0; + m(a, function (a) { + w(a) || + (b = !1) + }); + return b + } + + var f, g; + return f = a.$watch(function (a) { + return d(a) + }, function (a, c, d) { + g = a; + z(b) && b.call(this, a, c, d); + e(a) && d.$$postDigest(function () { + e(g) && f() + }) + }, c) + } + + function l(a, b, c, d) { + var e; + return e = a.$watch(function (a) { + return d(a) + }, function (a, c, d) { + z(b) && b.apply(this, arguments); + e() + }, c) + } + + function k(a, b) { + if (!b)return a; + var c = a.$$watchDelegate, c = c !== h && c !== g ? function (c, d, e, f) { + e = a(c, d, e, f); + return b(e, c, d) + } : function (c, d, e, f) { + e = a(c, d, e, f); + c = b(e, c, d); + return w(e) ? c : e + }; + a.$$watchDelegate && a.$$watchDelegate !== + f ? c.$$watchDelegate = a.$$watchDelegate : b.$stateful || (c.$$watchDelegate = f, c.inputs = a.inputs ? a.inputs : [a]); + return c + } + + var n = {csp: d.csp, expensiveChecks: !1}, r = {csp: d.csp, expensiveChecks: !0}; + return function (d, e, C) { + var m, u, p; + switch (typeof d) { + case "string": + p = d = d.trim(); + var q = C ? a : b; + m = q[p]; + m || (":" === d.charAt(0) && ":" === d.charAt(1) && (u = !0, d = d.substring(2)), C = C ? r : n, m = new gc(C), m = (new hc(m, c, C)).parse(d), m.constant ? m.$$watchDelegate = l : u ? m.$$watchDelegate = m.literal ? h : g : m.inputs && (m.$$watchDelegate = f), q[p] = m); + return k(m, + e); + case "function": + return k(d, e); + default: + return v + } + } + }] + } + + function kf() { + this.$get = ["$rootScope", "$exceptionHandler", function (b, a) { + return td(function (a) { + b.$evalAsync(a) + }, a) + }] + } + + function lf() { + this.$get = ["$browser", "$exceptionHandler", function (b, a) { + return td(function (a) { + b.defer(a) + }, a) + }] + } + + function td(b, a) { + function c(a, b, c) { + function d(b) { + return function (c) { + e || (e = !0, b.call(a, c)) + } + } + + var e = !1; + return [d(b), d(c)] + } + + function d() { + this.$$state = {status: 0} + } + + function e(a, b) { + return function (c) { + b.call(a, c) + } + } + + function f(c) { + !c.processScheduled && + c.pending && (c.processScheduled = !0, b(function () { + var b, d, e; + e = c.pending; + c.processScheduled = !1; + c.pending = t; + for (var f = 0, g = e.length; f < g; ++f) { + d = e[f][0]; + b = e[f][c.status]; + try { + z(b) ? d.resolve(b(c.value)) : 1 === c.status ? d.resolve(c.value) : d.reject(c.value) + } catch (h) { + d.reject(h), a(h) + } + } + })) + } + + function g() { + this.promise = new d; + this.resolve = e(this, this.resolve); + this.reject = e(this, this.reject); + this.notify = e(this, this.notify) + } + + var h = J("$q", TypeError); + d.prototype = { + then: function (a, b, c) { + var d = new g; + this.$$state.pending = this.$$state.pending || + []; + this.$$state.pending.push([d, a, b, c]); + 0 < this.$$state.status && f(this.$$state); + return d.promise + }, "catch": function (a) { + return this.then(null, a) + }, "finally": function (a, b) { + return this.then(function (b) { + return k(b, !0, a) + }, function (b) { + return k(b, !1, a) + }, b) + } + }; + g.prototype = { + resolve: function (a) { + this.promise.$$state.status || (a === this.promise ? this.$$reject(h("qcycle", a)) : this.$$resolve(a)) + }, $$resolve: function (b) { + var d, e; + e = c(this, this.$$resolve, this.$$reject); + try { + if (H(b) || z(b))d = b && b.then; + z(d) ? (this.promise.$$state.status = -1, d.call(b, e[0], e[1], this.notify)) : (this.promise.$$state.value = b, this.promise.$$state.status = 1, f(this.promise.$$state)) + } catch (g) { + e[1](g), a(g) + } + }, reject: function (a) { + this.promise.$$state.status || this.$$reject(a) + }, $$reject: function (a) { + this.promise.$$state.value = a; + this.promise.$$state.status = 2; + f(this.promise.$$state) + }, notify: function (c) { + var d = this.promise.$$state.pending; + 0 >= this.promise.$$state.status && d && d.length && b(function () { + for (var b, e, f = 0, g = d.length; f < g; f++) { + e = d[f][0]; + b = d[f][3]; + try { + e.notify(z(b) ? + b(c) : c) + } catch (h) { + a(h) + } + } + }) + } + }; + var l = function (a, b) { + var c = new g; + b ? c.resolve(a) : c.reject(a); + return c.promise + }, k = function (a, b, c) { + var d = null; + try { + z(c) && (d = c()) + } catch (e) { + return l(e, !1) + } + return d && z(d.then) ? d.then(function () { + return l(a, b) + }, function (a) { + return l(a, !1) + }) : l(a, b) + }, n = function (a, b, c, d) { + var e = new g; + e.resolve(a); + return e.promise.then(b, c, d) + }, r = function x(a) { + if (!z(a))throw h("norslvr", a); + if (!(this instanceof x))return new x(a); + var b = new g; + a(function (a) { + b.resolve(a) + }, function (a) { + b.reject(a) + }); + return b.promise + }; + r.defer = function () { + return new g + }; + r.reject = function (a) { + var b = new g; + b.reject(a); + return b.promise + }; + r.when = n; + r.resolve = n; + r.all = function (a) { + var b = new g, c = 0, d = G(a) ? [] : {}; + m(a, function (a, e) { + c++; + n(a).then(function (a) { + d.hasOwnProperty(e) || (d[e] = a, --c || b.resolve(d)) + }, function (a) { + d.hasOwnProperty(e) || b.reject(a) + }) + }); + 0 === c && b.resolve(d); + return b.promise + }; + return r + } + + function uf() { + this.$get = ["$window", "$timeout", function (b, a) { + function c() { + for (var a = 0; a < n.length; a++) { + var b = n[a]; + b && (n[a] = null, b()) + } + k = n.length = 0 + } + + function d(a) { + var b = + n.length; + k++; + n.push(a); + 0 === b && (l = h(c)); + return function () { + 0 <= b && (b = n[b] = null, 0 === --k && l && (l(), l = null, n.length = 0)) + } + } + + var e = b.requestAnimationFrame || b.webkitRequestAnimationFrame, f = b.cancelAnimationFrame || b.webkitCancelAnimationFrame || b.webkitCancelRequestAnimationFrame, g = !!e, h = g ? function (a) { + var b = e(a); + return function () { + f(b) + } + } : function (b) { + var c = a(b, 16.66, !1); + return function () { + a.cancel(c) + } + }; + d.supported = g; + var l, k = 0, n = []; + return d + }] + } + + function jf() { + function b(a) { + function b() { + this.$$watchers = this.$$nextSibling = + this.$$childHead = this.$$childTail = null; + this.$$listeners = {}; + this.$$listenerCount = {}; + this.$$watchersCount = 0; + this.$id = ++nb; + this.$$ChildScope = null + } + + b.prototype = a; + return b + } + + var a = 10, c = J("$rootScope"), d = null, e = null; + this.digestTtl = function (b) { + arguments.length && (a = b); + return a + }; + this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser", function (f, g, h, l) { + function k(a) { + a.currentScope.$$destroyed = !0 + } + + function n() { + this.$id = ++nb; + this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = + this.$$childTail = null; + this.$root = this; + this.$$destroyed = !1; + this.$$listeners = {}; + this.$$listenerCount = {}; + this.$$watchersCount = 0; + this.$$isolateBindings = null + } + + function r(a) { + if (p.$$phase)throw c("inprog", p.$$phase); + p.$$phase = a + } + + function s(a, b) { + do a.$$watchersCount += b; while (a = a.$parent) + } + + function x(a, b, c) { + do a.$$listenerCount[c] -= b, 0 === a.$$listenerCount[c] && delete a.$$listenerCount[c]; while (a = a.$parent) + } + + function q() { + } + + function F() { + for (; I.length;)try { + I.shift()() + } catch (a) { + g(a) + } + e = null + } + + function u() { + null === e && (e = + l.defer(function () { + p.$apply(F) + })) + } + + n.prototype = { + constructor: n, $new: function (a, c) { + var d; + c = c || this; + a ? (d = new n, d.$root = this.$root) : (this.$$ChildScope || (this.$$ChildScope = b(this)), d = new this.$$ChildScope); + d.$parent = c; + d.$$prevSibling = c.$$childTail; + c.$$childHead ? (c.$$childTail.$$nextSibling = d, c.$$childTail = d) : c.$$childHead = c.$$childTail = d; + (a || c != this) && d.$on("$destroy", k); + return d + }, $watch: function (a, b, c, e) { + var f = h(a); + if (f.$$watchDelegate)return f.$$watchDelegate(this, b, c, f, a); + var g = this, k = g.$$watchers, l = + {fn: b, last: q, get: f, exp: e || a, eq: !!c}; + d = null; + z(b) || (l.fn = v); + k || (k = g.$$watchers = []); + k.unshift(l); + s(this, 1); + return function () { + 0 <= bb(k, l) && s(g, -1); + d = null + } + }, $watchGroup: function (a, b) { + function c() { + h = !1; + k ? (k = !1, b(e, e, g)) : b(e, d, g) + } + + var d = Array(a.length), e = Array(a.length), f = [], g = this, h = !1, k = !0; + if (!a.length) { + var l = !0; + g.$evalAsync(function () { + l && b(e, e, g) + }); + return function () { + l = !1 + } + } + if (1 === a.length)return this.$watch(a[0], function (a, c, f) { + e[0] = a; + d[0] = c; + b(e, a === c ? e : d, f) + }); + m(a, function (a, b) { + var k = g.$watch(a, function (a, + f) { + e[b] = a; + d[b] = f; + h || (h = !0, g.$evalAsync(c)) + }); + f.push(k) + }); + return function () { + for (; f.length;)f.shift()() + } + }, $watchCollection: function (a, b) { + function c(a) { + e = a; + var b, d, g, h; + if (!A(e)) { + if (H(e))if (Ea(e))for (f !== r && (f = r, m = f.length = 0, l++), a = e.length, m !== a && (l++, f.length = m = a), b = 0; b < a; b++)h = f[b], g = e[b], d = h !== h && g !== g, d || h === g || (l++, f[b] = g); else { + f !== s && (f = s = {}, m = 0, l++); + a = 0; + for (b in e)e.hasOwnProperty(b) && (a++, g = e[b], h = f[b], b in f ? (d = h !== h && g !== g, d || h === g || (l++, f[b] = g)) : (m++, f[b] = g, l++)); + if (m > a)for (b in l++, f)e.hasOwnProperty(b) || + (m--, delete f[b]) + } else f !== e && (f = e, l++); + return l + } + } + + c.$stateful = !0; + var d = this, e, f, g, k = 1 < b.length, l = 0, n = h(a, c), r = [], s = {}, p = !0, m = 0; + return this.$watch(n, function () { + p ? (p = !1, b(e, e, d)) : b(e, g, d); + if (k)if (H(e))if (Ea(e)) { + g = Array(e.length); + for (var a = 0; a < e.length; a++)g[a] = e[a] + } else for (a in g = {}, e)Xa.call(e, a) && (g[a] = e[a]); else g = e + }) + }, $digest: function () { + var b, f, h, k, n, s, m = a, x, u = [], E, I; + r("$digest"); + l.$$checkUrlChange(); + this === p && null !== e && (l.defer.cancel(e), F()); + d = null; + do { + s = !1; + for (x = this; t.length;) { + try { + I = t.shift(), + I.scope.$eval(I.expression, I.locals) + } catch (v) { + g(v) + } + d = null + } + a:do { + if (k = x.$$watchers)for (n = k.length; n--;)try { + if (b = k[n])if ((f = b.get(x)) !== (h = b.last) && !(b.eq ? ka(f, h) : "number" === typeof f && "number" === typeof h && isNaN(f) && isNaN(h)))s = !0, d = b, b.last = b.eq ? fa(f, null) : f, b.fn(f, h === q ? f : h, x), 5 > m && (E = 4 - m, u[E] || (u[E] = []), u[E].push({ + msg: z(b.exp) ? "fn: " + (b.exp.name || b.exp.toString()) : b.exp, + newVal: f, + oldVal: h + })); else if (b === d) { + s = !1; + break a + } + } catch (A) { + g(A) + } + if (!(k = x.$$watchersCount && x.$$childHead || x !== this && x.$$nextSibling))for (; x !== + this && !(k = x.$$nextSibling);)x = x.$parent + } while (x = k); + if ((s || t.length) && !m--)throw p.$$phase = null, c("infdig", a, u); + } while (s || t.length); + for (p.$$phase = null; w.length;)try { + w.shift()() + } catch (y) { + g(y) + } + }, $destroy: function () { + if (!this.$$destroyed) { + var a = this.$parent; + this.$broadcast("$destroy"); + this.$$destroyed = !0; + this === p && l.$$applicationDestroyed(); + s(this, -this.$$watchersCount); + for (var b in this.$$listenerCount)x(this, this.$$listenerCount[b], b); + a && a.$$childHead == this && (a.$$childHead = this.$$nextSibling); + a && a.$$childTail == + this && (a.$$childTail = this.$$prevSibling); + this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling); + this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling); + this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = v; + this.$on = this.$watch = this.$watchGroup = function () { + return v + }; + this.$$listeners = {}; + this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = this.$$watchers = null + } + }, $eval: function (a, b) { + return h(a)(this, b) + }, + $evalAsync: function (a, b) { + p.$$phase || t.length || l.defer(function () { + t.length && p.$digest() + }); + t.push({scope: this, expression: a, locals: b}) + }, $$postDigest: function (a) { + w.push(a) + }, $apply: function (a) { + try { + return r("$apply"), this.$eval(a) + } catch (b) { + g(b) + } finally { + p.$$phase = null; + try { + p.$digest() + } catch (c) { + throw g(c), c; + } + } + }, $applyAsync: function (a) { + function b() { + c.$eval(a) + } + + var c = this; + a && I.push(b); + u() + }, $on: function (a, b) { + var c = this.$$listeners[a]; + c || (this.$$listeners[a] = c = []); + c.push(b); + var d = this; + do d.$$listenerCount[a] || + (d.$$listenerCount[a] = 0), d.$$listenerCount[a]++; while (d = d.$parent); + var e = this; + return function () { + var d = c.indexOf(b); + -1 !== d && (c[d] = null, x(e, 1, a)) + } + }, $emit: function (a, b) { + var c = [], d, e = this, f = !1, h = { + name: a, targetScope: e, stopPropagation: function () { + f = !0 + }, preventDefault: function () { + h.defaultPrevented = !0 + }, defaultPrevented: !1 + }, k = cb([h], arguments, 1), l, n; + do { + d = e.$$listeners[a] || c; + h.currentScope = e; + l = 0; + for (n = d.length; l < n; l++)if (d[l])try { + d[l].apply(null, k) + } catch (r) { + g(r) + } else d.splice(l, 1), l--, n--; + if (f)return h.currentScope = + null, h; + e = e.$parent + } while (e); + h.currentScope = null; + return h + }, $broadcast: function (a, b) { + var c = this, d = this, e = { + name: a, targetScope: this, preventDefault: function () { + e.defaultPrevented = !0 + }, defaultPrevented: !1 + }; + if (!this.$$listenerCount[a])return e; + for (var f = cb([e], arguments, 1), h, k; c = d;) { + e.currentScope = c; + d = c.$$listeners[a] || []; + h = 0; + for (k = d.length; h < k; h++)if (d[h])try { + d[h].apply(null, f) + } catch (l) { + g(l) + } else d.splice(h, 1), h--, k--; + if (!(d = c.$$listenerCount[a] && c.$$childHead || c !== this && c.$$nextSibling))for (; c !== this && !(d = + c.$$nextSibling);)c = c.$parent + } + e.currentScope = null; + return e + } + }; + var p = new n, t = p.$$asyncQueue = [], w = p.$$postDigestQueue = [], I = p.$$applyAsyncQueue = []; + return p + }] + } + + function he() { + var b = /^\s*(https?|ftp|mailto|tel|file):/, a = /^\s*((https?|ftp|file|blob):|data:image\/)/; + this.aHrefSanitizationWhitelist = function (a) { + return w(a) ? (b = a, this) : b + }; + this.imgSrcSanitizationWhitelist = function (b) { + return w(b) ? (a = b, this) : a + }; + this.$get = function () { + return function (c, d) { + var e = d ? a : b, f; + f = Ba(c).href; + return "" === f || f.match(e) ? c : "unsafe:" + + f + } + } + } + + function Zf(b) { + if ("self" === b)return b; + if (L(b)) { + if (-1 < b.indexOf("***"))throw Da("iwcard", b); + b = ud(b).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"); + return new RegExp("^" + b + "$") + } + if (Za(b))return new RegExp("^" + b.source + "$"); + throw Da("imatcher"); + } + + function vd(b) { + var a = []; + w(b) && m(b, function (b) { + a.push(Zf(b)) + }); + return a + } + + function nf() { + this.SCE_CONTEXTS = pa; + var b = ["self"], a = []; + this.resourceUrlWhitelist = function (a) { + arguments.length && (b = vd(a)); + return b + }; + this.resourceUrlBlacklist = function (b) { + arguments.length && + (a = vd(b)); + return a + }; + this.$get = ["$injector", function (c) { + function d(a, b) { + return "self" === a ? gd(b) : !!a.exec(b.href) + } + + function e(a) { + var b = function (a) { + this.$$unwrapTrustedValue = function () { + return a + } + }; + a && (b.prototype = new a); + b.prototype.valueOf = function () { + return this.$$unwrapTrustedValue() + }; + b.prototype.toString = function () { + return this.$$unwrapTrustedValue().toString() + }; + return b + } + + var f = function (a) { + throw Da("unsafe"); + }; + c.has("$sanitize") && (f = c.get("$sanitize")); + var g = e(), h = {}; + h[pa.HTML] = e(g); + h[pa.CSS] = e(g); + h[pa.URL] = + e(g); + h[pa.JS] = e(g); + h[pa.RESOURCE_URL] = e(h[pa.URL]); + return { + trustAs: function (a, b) { + var c = h.hasOwnProperty(a) ? h[a] : null; + if (!c)throw Da("icontext", a, b); + if (null === b || b === t || "" === b)return b; + if ("string" !== typeof b)throw Da("itype", a); + return new c(b) + }, getTrusted: function (c, e) { + if (null === e || e === t || "" === e)return e; + var g = h.hasOwnProperty(c) ? h[c] : null; + if (g && e instanceof g)return e.$$unwrapTrustedValue(); + if (c === pa.RESOURCE_URL) { + var g = Ba(e.toString()), r, s, m = !1; + r = 0; + for (s = b.length; r < s; r++)if (d(b[r], g)) { + m = !0; + break + } + if (m)for (r = + 0, s = a.length; r < s; r++)if (d(a[r], g)) { + m = !1; + break + } + if (m)return e; + throw Da("insecurl", e.toString()); + } + if (c === pa.HTML)return f(e); + throw Da("unsafe"); + }, valueOf: function (a) { + return a instanceof g ? a.$$unwrapTrustedValue() : a + } + } + }] + } + + function mf() { + var b = !0; + this.enabled = function (a) { + arguments.length && (b = !!a); + return b + }; + this.$get = ["$parse", "$sceDelegate", function (a, c) { + if (b && 8 > Ua)throw Da("iequirks"); + var d = ia(pa); + d.isEnabled = function () { + return b + }; + d.trustAs = c.trustAs; + d.getTrusted = c.getTrusted; + d.valueOf = c.valueOf; + b || (d.trustAs = + d.getTrusted = function (a, b) { + return b + }, d.valueOf = Ya); + d.parseAs = function (b, c) { + var e = a(c); + return e.literal && e.constant ? e : a(c, function (a) { + return d.getTrusted(b, a) + }) + }; + var e = d.parseAs, f = d.getTrusted, g = d.trustAs; + m(pa, function (a, b) { + var c = M(b); + d[hb("parse_as_" + c)] = function (b) { + return e(a, b) + }; + d[hb("get_trusted_" + c)] = function (b) { + return f(a, b) + }; + d[hb("trust_as_" + c)] = function (b) { + return g(a, b) + } + }); + return d + }] + } + + function of() { + this.$get = ["$window", "$document", function (b, a) { + var c = {}, d = W((/android (\d+)/.exec(M((b.navigator || + {}).userAgent)) || [])[1]), e = /Boxee/i.test((b.navigator || {}).userAgent), f = a[0] || {}, g, h = /^(Moz|webkit|ms)(?=[A-Z])/, l = f.body && f.body.style, k = !1, n = !1; + if (l) { + for (var r in l)if (k = h.exec(r)) { + g = k[0]; + g = g.substr(0, 1).toUpperCase() + g.substr(1); + break + } + g || (g = "WebkitOpacity" in l && "webkit"); + k = !!("transition" in l || g + "Transition" in l); + n = !!("animation" in l || g + "Animation" in l); + !d || k && n || (k = L(l.webkitTransition), n = L(l.webkitAnimation)) + } + return { + history: !(!b.history || !b.history.pushState || 4 > d || e), hasEvent: function (a) { + if ("input" === + a && 11 >= Ua)return !1; + if (A(c[a])) { + var b = f.createElement("div"); + c[a] = "on" + a in b + } + return c[a] + }, csp: fb(), vendorPrefix: g, transitions: k, animations: n, android: d + } + }] + } + + function qf() { + this.$get = ["$templateCache", "$http", "$q", "$sce", function (b, a, c, d) { + function e(f, g) { + e.totalPendingRequests++; + L(f) && b.get(f) || (f = d.getTrustedResourceUrl(f)); + var h = a.defaults && a.defaults.transformResponse; + G(h) ? h = h.filter(function (a) { + return a !== $b + }) : h === $b && (h = null); + return a.get(f, {cache: b, transformResponse: h})["finally"](function () { + e.totalPendingRequests-- + }).then(function (a) { + b.put(f, + a.data); + return a.data + }, function (a) { + if (!g)throw ea("tpload", f, a.status, a.statusText); + return c.reject(a) + }) + } + + e.totalPendingRequests = 0; + return e + }] + } + + function rf() { + this.$get = ["$rootScope", "$browser", "$location", function (b, a, c) { + return { + findBindings: function (a, b, c) { + a = a.getElementsByClassName("ng-binding"); + var g = []; + m(a, function (a) { + var d = ca.element(a).data("$binding"); + d && m(d, function (d) { + c ? (new RegExp("(^|\\s)" + ud(b) + "(\\s|\\||$)")).test(d) && g.push(a) : -1 != d.indexOf(b) && g.push(a) + }) + }); + return g + }, findModels: function (a, + b, c) { + for (var g = ["ng-", "data-ng-", "ng\\:"], h = 0; h < g.length; ++h) { + var l = a.querySelectorAll("[" + g[h] + "model" + (c ? "=" : "*=") + '"' + b + '"]'); + if (l.length)return l + } + }, getLocation: function () { + return c.url() + }, setLocation: function (a) { + a !== c.url() && (c.url(a), b.$digest()) + }, whenStable: function (b) { + a.notifyWhenNoOutstandingRequests(b) + } + } + }] + } + + function sf() { + this.$get = ["$rootScope", "$browser", "$q", "$$q", "$exceptionHandler", function (b, a, c, d, e) { + function f(f, l, k) { + z(f) || (k = l, l = f, f = v); + var n = za.call(arguments, 3), r = w(k) && !k, s = (r ? d : c).defer(), + m = s.promise, q; + q = a.defer(function () { + try { + s.resolve(f.apply(null, n)) + } catch (a) { + s.reject(a), e(a) + } finally { + delete g[m.$$timeoutId] + } + r || b.$apply() + }, l); + m.$$timeoutId = q; + g[q] = s; + return m + } + + var g = {}; + f.cancel = function (b) { + return b && b.$$timeoutId in g ? (g[b.$$timeoutId].reject("canceled"), delete g[b.$$timeoutId], a.defer.cancel(b.$$timeoutId)) : !1 + }; + return f + }] + } + + function Ba(b) { + Ua && (X.setAttribute("href", b), b = X.href); + X.setAttribute("href", b); + return { + href: X.href, + protocol: X.protocol ? X.protocol.replace(/:$/, "") : "", + host: X.host, + search: X.search ? X.search.replace(/^\?/, "") : "", + hash: X.hash ? X.hash.replace(/^#/, "") : "", + hostname: X.hostname, + port: X.port, + pathname: "/" === X.pathname.charAt(0) ? X.pathname : "/" + X.pathname + } + } + + function gd(b) { + b = L(b) ? Ba(b) : b; + return b.protocol === wd.protocol && b.host === wd.host + } + + function tf() { + this.$get = ra(O) + } + + function xd(b) { + function a(a) { + try { + return decodeURIComponent(a) + } catch (b) { + return a + } + } + + var c = b[0] || {}, d = {}, e = ""; + return function () { + var b, g, h, l, k; + b = c.cookie || ""; + if (b !== e)for (e = b, b = e.split("; "), d = {}, h = 0; h < b.length; h++)g = + b[h], l = g.indexOf("="), 0 < l && (k = a(g.substring(0, l)), d[k] === t && (d[k] = a(g.substring(l + 1)))); + return d + } + } + + function xf() { + this.$get = xd + } + + function Lc(b) { + function a(c, d) { + if (H(c)) { + var e = {}; + m(c, function (b, c) { + e[c] = a(c, b) + }); + return e + } + return b.factory(c + "Filter", d) + } + + this.register = a; + this.$get = ["$injector", function (a) { + return function (b) { + return a.get(b + "Filter") + } + }]; + a("currency", yd); + a("date", zd); + a("filter", $f); + a("json", ag); + a("limitTo", bg); + a("lowercase", cg); + a("number", Ad); + a("orderBy", Bd); + a("uppercase", dg) + } + + function $f() { + return function (b, + a, c) { + if (!Ea(b)) { + if (null == b)return b; + throw J("filter")("notarray", b); + } + var d; + switch (ic(a)) { + case "function": + break; + case "boolean": + case "null": + case "number": + case "string": + d = !0; + case "object": + a = eg(a, c, d); + break; + default: + return b + } + return Array.prototype.filter.call(b, a) + } + } + + function eg(b, a, c) { + var d = H(b) && "$" in b; + !0 === a ? a = ka : z(a) || (a = function (a, b) { + if (A(a))return !1; + if (null === a || null === b)return a === b; + if (H(b) || H(a) && !rc(a))return !1; + a = M("" + a); + b = M("" + b); + return -1 !== a.indexOf(b) + }); + return function (e) { + return d && !H(e) ? La(e, + b.$, a, !1) : La(e, b, a, c) + } + } + + function La(b, a, c, d, e) { + var f = ic(b), g = ic(a); + if ("string" === g && "!" === a.charAt(0))return !La(b, a.substring(1), c, d); + if (G(b))return b.some(function (b) { + return La(b, a, c, d) + }); + switch (f) { + case "object": + var h; + if (d) { + for (h in b)if ("$" !== h.charAt(0) && La(b[h], a, c, !0))return !0; + return e ? !1 : La(b, a, c, !1) + } + if ("object" === g) { + for (h in a)if (e = a[h], !z(e) && !A(e) && (f = "$" === h, !La(f ? b : b[h], e, c, f, f)))return !1; + return !0 + } + return c(b, a); + case "function": + return !1; + default: + return c(b, a) + } + } + + function ic(b) { + return null === + b ? "null" : typeof b + } + + function yd(b) { + var a = b.NUMBER_FORMATS; + return function (b, d, e) { + A(d) && (d = a.CURRENCY_SYM); + A(e) && (e = a.PATTERNS[1].maxFrac); + return null == b ? b : Cd(b, a.PATTERNS[1], a.GROUP_SEP, a.DECIMAL_SEP, e).replace(/\u00A4/g, d) + } + } + + function Ad(b) { + var a = b.NUMBER_FORMATS; + return function (b, d) { + return null == b ? b : Cd(b, a.PATTERNS[0], a.GROUP_SEP, a.DECIMAL_SEP, d) + } + } + + function Cd(b, a, c, d, e) { + if (H(b))return ""; + var f = 0 > b; + b = Math.abs(b); + var g = Infinity === b; + if (!g && !isFinite(b))return ""; + var h = b + "", l = "", k = !1, n = []; + g && (l = "\u221e"); + if (!g && -1 !== h.indexOf("e")) { + var r = h.match(/([\d\.]+)e(-?)(\d+)/); + r && "-" == r[2] && r[3] > e + 1 ? b = 0 : (l = h, k = !0) + } + if (g || k)0 < e && 1 > b && (l = b.toFixed(e), b = parseFloat(l)); else { + g = (h.split(Dd)[1] || "").length; + A(e) && (e = Math.min(Math.max(a.minFrac, g), a.maxFrac)); + b = +(Math.round(+(b.toString() + "e" + e)).toString() + "e" + -e); + var g = ("" + b).split(Dd), h = g[0], g = g[1] || "", r = 0, s = a.lgSize, m = a.gSize; + if (h.length >= s + m)for (r = h.length - s, k = 0; k < r; k++)0 === (r - k) % m && 0 !== k && (l += c), l += h.charAt(k); + for (k = r; k < h.length; k++)0 === (h.length - k) % s && 0 !== k && + (l += c), l += h.charAt(k); + for (; g.length < e;)g += "0"; + e && "0" !== e && (l += d + g.substr(0, e)) + } + 0 === b && (f = !1); + n.push(f ? a.negPre : a.posPre, l, f ? a.negSuf : a.posSuf); + return n.join("") + } + + function Gb(b, a, c) { + var d = ""; + 0 > b && (d = "-", b = -b); + for (b = "" + b; b.length < a;)b = "0" + b; + c && (b = b.substr(b.length - a)); + return d + b + } + + function Y(b, a, c, d) { + c = c || 0; + return function (e) { + e = e["get" + b](); + if (0 < c || e > -c)e += c; + 0 === e && -12 == c && (e = 12); + return Gb(e, a, d) + } + } + + function Hb(b, a) { + return function (c, d) { + var e = c["get" + b](), f = rb(a ? "SHORT" + b : b); + return d[f][e] + } + } + + function Ed(b) { + var a = + (new Date(b, 0, 1)).getDay(); + return new Date(b, 0, (4 >= a ? 5 : 12) - a) + } + + function Fd(b) { + return function (a) { + var c = Ed(a.getFullYear()); + a = +new Date(a.getFullYear(), a.getMonth(), a.getDate() + (4 - a.getDay())) - +c; + a = 1 + Math.round(a / 6048E5); + return Gb(a, b) + } + } + + function jc(b, a) { + return 0 >= b.getFullYear() ? a.ERAS[0] : a.ERAS[1] + } + + function zd(b) { + function a(a) { + var b; + if (b = a.match(c)) { + a = new Date(0); + var f = 0, g = 0, h = b[8] ? a.setUTCFullYear : a.setFullYear, l = b[8] ? a.setUTCHours : a.setHours; + b[9] && (f = W(b[9] + b[10]), g = W(b[9] + b[11])); + h.call(a, W(b[1]), + W(b[2]) - 1, W(b[3])); + f = W(b[4] || 0) - f; + g = W(b[5] || 0) - g; + h = W(b[6] || 0); + b = Math.round(1E3 * parseFloat("0." + (b[7] || 0))); + l.call(a, f, g, 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, f) { + var g = "", h = [], l, k; + e = e || "mediumDate"; + e = b.DATETIME_FORMATS[e] || e; + L(c) && (c = fg.test(c) ? W(c) : a(c)); + V(c) && (c = new Date(c)); + if (!aa(c) || !isFinite(c.getTime()))return c; + for (; e;)(k = gg.exec(e)) ? (h = cb(h, k, 1), e = h.pop()) : (h.push(e), e = null); + var n = c.getTimezoneOffset(); + f && (n = xc(f, c.getTimezoneOffset()), c = Pb(c, f, !0)); + m(h, function (a) { + l = hg[a]; + g += l ? l(c, b.DATETIME_FORMATS, n) : a.replace(/(^'|'$)/g, "").replace(/''/g, "'") + }); + return g + } + } + + function ag() { + return function (b, a) { + A(a) && (a = 2); + return db(b, a) + } + } + + function bg() { + return function (b, a, c) { + a = Infinity === Math.abs(Number(a)) ? Number(a) : W(a); + if (isNaN(a))return b; + V(b) && (b = b.toString()); + if (!G(b) && !L(b))return b; + c = !c || isNaN(c) ? 0 : W(c); + c = 0 > c && c >= -b.length ? b.length + c : c; + return 0 <= a ? b.slice(c, c + a) : 0 === c ? b.slice(a, b.length) : b.slice(Math.max(0, + c + a), c) + } + } + + function Bd(b) { + function a(a, c) { + c = c ? -1 : 1; + return a.map(function (a) { + var d = 1, h = Ya; + if (z(a))h = a; else if (L(a)) { + if ("+" == a.charAt(0) || "-" == a.charAt(0))d = "-" == a.charAt(0) ? -1 : 1, a = a.substring(1); + if ("" !== a && (h = b(a), h.constant))var l = h(), h = function (a) { + return a[l] + } + } + return {get: h, descending: d * c} + }) + } + + function c(a) { + switch (typeof a) { + case "number": + case "boolean": + case "string": + return !0; + default: + return !1 + } + } + + return function (b, e, f) { + if (!Ea(b))return b; + G(e) || (e = [e]); + 0 === e.length && (e = ["+"]); + var g = a(e, f); + b = Array.prototype.map.call(b, + function (a, b) { + return { + value: a, predicateValues: g.map(function (d) { + var e = d.get(a); + d = typeof e; + if (null === e)d = "string", e = "null"; else if ("string" === d)e = e.toLowerCase(); else if ("object" === d)a:{ + if ("function" === typeof e.valueOf && (e = e.valueOf(), c(e)))break a; + if (rc(e) && (e = e.toString(), c(e)))break a; + e = b + } + return {value: e, type: d} + }) + } + }); + b.sort(function (a, b) { + for (var c = 0, d = 0, e = g.length; d < e; ++d) { + var c = a.predicateValues[d], f = b.predicateValues[d], m = 0; + c.type === f.type ? c.value !== f.value && (m = c.value < f.value ? -1 : 1) : m = c.type < f.type ? + -1 : 1; + if (c = m * g[d].descending)break + } + return c + }); + return b = b.map(function (a) { + return a.value + }) + } + } + + function Ma(b) { + z(b) && (b = {link: b}); + b.restrict = b.restrict || "AC"; + return ra(b) + } + + function Gd(b, a, c, d, e) { + var f = this, g = [], h = f.$$parentForm = b.parent().controller("form") || Ib; + f.$error = {}; + f.$$success = {}; + f.$pending = t; + f.$name = e(a.name || a.ngForm || "")(c); + f.$dirty = !1; + f.$pristine = !0; + f.$valid = !0; + f.$invalid = !1; + f.$submitted = !1; + h.$addControl(f); + f.$rollbackViewValue = function () { + m(g, function (a) { + a.$rollbackViewValue() + }) + }; + f.$commitViewValue = + function () { + m(g, function (a) { + a.$commitViewValue() + }) + }; + f.$addControl = function (a) { + Ra(a.$name, "input"); + g.push(a); + a.$name && (f[a.$name] = a) + }; + f.$$renameControl = function (a, b) { + var c = a.$name; + f[c] === a && delete f[c]; + f[b] = a; + a.$name = b + }; + f.$removeControl = function (a) { + a.$name && f[a.$name] === a && delete f[a.$name]; + m(f.$pending, function (b, c) { + f.$setValidity(c, null, a) + }); + m(f.$error, function (b, c) { + f.$setValidity(c, null, a) + }); + m(f.$$success, function (b, c) { + f.$setValidity(c, null, a) + }); + bb(g, a) + }; + Hd({ + ctrl: this, $element: b, set: function (a, b, + c) { + var d = a[b]; + d ? -1 === d.indexOf(c) && d.push(c) : a[b] = [c] + }, unset: function (a, b, c) { + var d = a[b]; + d && (bb(d, c), 0 === d.length && delete a[b]) + }, parentForm: h, $animate: d + }); + f.$setDirty = function () { + d.removeClass(b, Va); + d.addClass(b, Jb); + f.$dirty = !0; + f.$pristine = !1; + h.$setDirty() + }; + f.$setPristine = function () { + d.setClass(b, Va, Jb + " ng-submitted"); + f.$dirty = !1; + f.$pristine = !0; + f.$submitted = !1; + m(g, function (a) { + a.$setPristine() + }) + }; + f.$setUntouched = function () { + m(g, function (a) { + a.$setUntouched() + }) + }; + f.$setSubmitted = function () { + d.addClass(b, + "ng-submitted"); + f.$submitted = !0; + h.$setSubmitted() + } + } + + function kc(b) { + b.$formatters.push(function (a) { + return b.$isEmpty(a) ? a : a.toString() + }) + } + + function kb(b, a, c, d, e, f) { + var g = M(a[0].type); + if (!e.android) { + var h = !1; + a.on("compositionstart", function (a) { + h = !0 + }); + a.on("compositionend", function () { + h = !1; + l() + }) + } + var l = function (b) { + k && (f.defer.cancel(k), k = null); + if (!h) { + var e = a.val(); + b = b && b.type; + "password" === g || c.ngTrim && "false" === c.ngTrim || (e = R(e)); + (d.$viewValue !== e || "" === e && d.$$hasNativeValidators) && d.$setViewValue(e, b) + } + }; + if (e.hasEvent("input"))a.on("input", l); else { + var k, n = function (a, b, c) { + k || (k = f.defer(function () { + k = null; + b && b.value === c || l(a) + })) + }; + a.on("keydown", function (a) { + var b = a.keyCode; + 91 === b || 15 < b && 19 > b || 37 <= b && 40 >= b || n(a, this, this.value) + }); + if (e.hasEvent("paste"))a.on("paste cut", n) + } + a.on("change", l); + d.$render = function () { + a.val(d.$isEmpty(d.$viewValue) ? "" : d.$viewValue) + } + } + + function Kb(b, a) { + return function (c, d) { + var e, f; + if (aa(c))return c; + if (L(c)) { + '"' == c.charAt(0) && '"' == c.charAt(c.length - 1) && (c = c.substring(1, c.length - 1)); + if (ig.test(c))return new Date(c); + b.lastIndex = 0; + if (e = b.exec(c))return e.shift(), f = d ? { + yyyy: d.getFullYear(), + MM: d.getMonth() + 1, + dd: d.getDate(), + HH: d.getHours(), + mm: d.getMinutes(), + ss: d.getSeconds(), + sss: d.getMilliseconds() / 1E3 + } : {yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0}, m(e, function (b, c) { + c < a.length && (f[a[c]] = +b) + }), new Date(f.yyyy, f.MM - 1, f.dd, f.HH, f.mm, f.ss || 0, 1E3 * f.sss || 0) + } + return NaN + } + } + + function lb(b, a, c, d) { + return function (e, f, g, h, l, k, n) { + function r(a) { + return a && !(a.getTime && a.getTime() !== a.getTime()) + } + + function s(a) { + return w(a) ? + aa(a) ? a : c(a) : t + } + + Id(e, f, g, h); + kb(e, f, g, h, l, k); + var m = h && h.$options && h.$options.timezone, q; + h.$$parserName = b; + h.$parsers.push(function (b) { + return h.$isEmpty(b) ? null : a.test(b) ? (b = c(b, q), m && (b = Pb(b, m)), b) : t + }); + h.$formatters.push(function (a) { + if (a && !aa(a))throw Lb("datefmt", a); + if (r(a))return (q = a) && m && (q = Pb(q, m, !0)), n("date")(a, d, m); + q = null; + return "" + }); + if (w(g.min) || g.ngMin) { + var F; + h.$validators.min = function (a) { + return !r(a) || A(F) || c(a) >= F + }; + g.$observe("min", function (a) { + F = s(a); + h.$validate() + }) + } + if (w(g.max) || g.ngMax) { + var u; + h.$validators.max = function (a) { + return !r(a) || A(u) || c(a) <= u + }; + g.$observe("max", function (a) { + u = s(a); + h.$validate() + }) + } + } + } + + function Id(b, a, c, d) { + (d.$$hasNativeValidators = H(a[0].validity)) && d.$parsers.push(function (b) { + var c = a.prop("validity") || {}; + return c.badInput && !c.typeMismatch ? t : b + }) + } + + function Jd(b, a, c, d, e) { + if (w(d)) { + b = b(d); + if (!b.constant)throw J("ngModel")("constexpr", c, d); + return b(a) + } + return e + } + + function lc(b, a) { + b = "ngClass" + b; + return ["$animate", function (c) { + function d(a, b) { + var c = [], d = 0; + a:for (; d < a.length; d++) { + for (var e = + a[d], n = 0; n < b.length; n++)if (e == b[n])continue a; + c.push(e) + } + return c + } + + function e(a) { + var b = []; + return G(a) ? (m(a, function (a) { + b = b.concat(e(a)) + }), b) : L(a) ? a.split(" ") : H(a) ? (m(a, function (a, c) { + a && (b = b.concat(c.split(" "))) + }), b) : a + } + + return { + restrict: "AC", link: function (f, g, h) { + function l(a, b) { + var c = g.data("$classCounts") || ga(), d = []; + m(a, function (a) { + if (0 < b || c[a])c[a] = (c[a] || 0) + b, c[a] === +(0 < b) && d.push(a) + }); + g.data("$classCounts", c); + return d.join(" ") + } + + function k(b) { + if (!0 === a || f.$index % 2 === a) { + var k = e(b || []); + if (!n) { + var m = + l(k, 1); + h.$addClass(m) + } else if (!ka(b, n)) { + var q = e(n), m = d(k, q), k = d(q, k), m = l(m, 1), k = l(k, -1); + m && m.length && c.addClass(g, m); + k && k.length && c.removeClass(g, k) + } + } + n = ia(b) + } + + var n; + f.$watch(h[b], k, !0); + h.$observe("class", function (a) { + k(f.$eval(h[b])) + }); + "ngClass" !== b && f.$watch("$index", function (c, d) { + var g = c & 1; + if (g !== (d & 1)) { + var k = e(f.$eval(h[b])); + g === a ? (g = l(k, 1), h.$addClass(g)) : (g = l(k, -1), h.$removeClass(g)) + } + }) + } + } + }] + } + + function Hd(b) { + function a(a, b) { + b && !f[a] ? (k.addClass(e, a), f[a] = !0) : !b && f[a] && (k.removeClass(e, a), f[a] = !1) + } + + function c(b, c) { + b = b ? "-" + Bc(b, "-") : ""; + a(mb + b, !0 === c); + a(Kd + b, !1 === c) + } + + var d = b.ctrl, e = b.$element, f = {}, g = b.set, h = b.unset, l = b.parentForm, k = b.$animate; + f[Kd] = !(f[mb] = e.hasClass(mb)); + d.$setValidity = function (b, e, f) { + e === t ? (d.$pending || (d.$pending = {}), g(d.$pending, b, f)) : (d.$pending && h(d.$pending, b, f), Ld(d.$pending) && (d.$pending = t)); + ab(e) ? e ? (h(d.$error, b, f), g(d.$$success, b, f)) : (g(d.$error, b, f), h(d.$$success, b, f)) : (h(d.$error, b, f), h(d.$$success, b, f)); + d.$pending ? (a(Md, !0), d.$valid = d.$invalid = t, c("", null)) : (a(Md, + !1), d.$valid = Ld(d.$error), d.$invalid = !d.$valid, c("", d.$valid)); + e = d.$pending && d.$pending[b] ? t : d.$error[b] ? !1 : d.$$success[b] ? !0 : null; + c(b, e); + l.$setValidity(b, e, d) + } + } + + function Ld(b) { + if (b)for (var a in b)if (b.hasOwnProperty(a))return !1; + return !0 + } + + var jg = /^\/(.+)\/([a-z]*)$/, M = function (b) { + return L(b) ? b.toLowerCase() : b + }, Xa = Object.prototype.hasOwnProperty, rb = function (b) { + return L(b) ? b.toUpperCase() : b + }, Ua, y, la, za = [].slice, Mf = [].splice, kg = [].push, sa = Object.prototype.toString, sc = Object.getPrototypeOf, Fa = J("ng"), ca = + O.angular || (O.angular = {}), gb, nb = 0; + Ua = U.documentMode; + v.$inject = []; + Ya.$inject = []; + var G = Array.isArray, uc = /^\[object (Uint8(Clamped)?)|(Uint16)|(Uint32)|(Int8)|(Int16)|(Int32)|(Float(32)|(64))Array\]$/, R = function (b) { + return L(b) ? b.trim() : b + }, ud = function (b) { + return b.replace(/([-()\[\]{}+?*.$\^|,:#(?:<\/\1>|)$/, Tb = /<|&#?\w+;/, Af = /<([\w:]+)/, Bf = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, na = { + option: [1, '"], + thead: [1, "", "
    "], + col: [2, "", "
    "], + tr: [2, "", "
    "], + td: [3, "", "
    "], + _default: [0, "", ""] + }; + na.optgroup = na.option; + na.tbody = na.tfoot = na.colgroup = na.caption = na.thead; + na.th = na.td; + var Pa = Q.prototype = { + ready: function (b) { + function a() { + c || (c = !0, b()) + } + + var c = !1; + "complete" === U.readyState ? setTimeout(a) : (this.on("DOMContentLoaded", a), Q(O).on("load", a)) + }, toString: function () { + var b = []; + m(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: kg, sort: [].sort, splice: [].splice + }, Ab = {}; + m("multiple selected checked disabled readOnly required open".split(" "), function (b) { + Ab[M(b)] = b + }); + var Tc = {}; + m("input select option textarea button form details".split(" "), + function (b) { + Tc[b] = !0 + }); + var Uc = {ngMinlength: "minlength", ngMaxlength: "maxlength", ngMin: "min", ngMax: "max", ngPattern: "pattern"}; + m({ + data: Wb, removeData: ub, hasData: function (b) { + for (var a in ib[b.ng339])return !0; + return !1 + } + }, function (b, a) { + Q[a] = b + }); + m({ + data: Wb, inheritedData: zb, scope: function (b) { + return y.data(b, "$scope") || zb(b.parentNode || b, ["$isolateScope", "$scope"]) + }, isolateScope: function (b) { + return y.data(b, "$isolateScope") || y.data(b, "$isolateScopeNoTemplate") + }, controller: Qc, injector: function (b) { + return zb(b, + "$injector") + }, removeAttr: function (b, a) { + b.removeAttribute(a) + }, hasClass: wb, css: function (b, a, c) { + a = hb(a); + if (w(c))b.style[a] = c; else return b.style[a] + }, attr: function (b, a, c) { + var d = b.nodeType; + if (d !== Na && 2 !== d && 8 !== d)if (d = M(a), Ab[d])if (w(c))c ? (b[a] = !0, b.setAttribute(a, d)) : (b[a] = !1, b.removeAttribute(d)); else return b[a] || (b.attributes.getNamedItem(a) || v).specified ? d : t; else if (w(c))b.setAttribute(a, c); else if (b.getAttribute)return b = b.getAttribute(a, 2), null === b ? t : b + }, prop: function (b, a, c) { + if (w(c))b[a] = c; else return b[a] + }, + text: function () { + function b(a, b) { + if (A(b)) { + var d = a.nodeType; + return d === qa || d === Na ? a.textContent : "" + } + a.textContent = b + } + + b.$dv = ""; + return b + }(), val: function (b, a) { + if (A(a)) { + if (b.multiple && "select" === ta(b)) { + var c = []; + m(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 (A(a))return b.innerHTML; + tb(b, !0); + b.innerHTML = a + }, empty: Rc + }, function (b, a) { + Q.prototype[a] = function (a, d) { + var e, f, g = this.length; + if (b !== Rc && (2 == b.length && b !== wb && b !== Qc ? + a : d) === t) { + if (H(a)) { + for (e = 0; e < g; e++)if (b === Wb)b(this[e], a); else for (f in a)b(this[e], f, a[f]); + return this + } + e = b.$dv; + g = e === t ? Math.min(g, 1) : g; + for (f = 0; f < g; f++) { + var h = b(this[f], a, d); + e = e ? e + h : h + } + return e + } + for (e = 0; e < g; e++)b(this[e], a, d); + return this + } + }); + m({ + removeData: ub, on: function a(c, d, e, f) { + if (w(f))throw Ub("onargs"); + if (Mc(c)) { + var g = vb(c, !0); + f = g.events; + var h = g.handle; + h || (h = g.handle = Gf(c, f)); + for (var g = 0 <= d.indexOf(" ") ? d.split(" ") : [d], l = g.length; l--;) { + d = g[l]; + var k = f[d]; + k || (f[d] = [], "mouseenter" === d || "mouseleave" === + d ? a(c, lg[d], function (a) { + var c = a.relatedTarget; + c && (c === this || this.contains(c)) || h(a, d) + }) : "$destroy" !== d && c.addEventListener(d, h, !1), k = f[d]); + k.push(e) + } + } + }, off: Pc, one: function (a, c, d) { + a = y(a); + a.on(c, function f() { + a.off(c, d); + a.off(c, f) + }); + a.on(c, d) + }, replaceWith: function (a, c) { + var d, e = a.parentNode; + tb(a); + m(new Q(c), function (c) { + d ? e.insertBefore(c, d.nextSibling) : e.replaceChild(c, a); + d = c + }) + }, children: function (a) { + var c = []; + m(a.childNodes, function (a) { + a.nodeType === qa && c.push(a) + }); + return c + }, contents: function (a) { + return a.contentDocument || + a.childNodes || [] + }, append: function (a, c) { + var d = a.nodeType; + if (d === qa || 11 === d) { + c = new Q(c); + for (var d = 0, e = c.length; d < e; d++)a.appendChild(c[d]) + } + }, prepend: function (a, c) { + if (a.nodeType === qa) { + var d = a.firstChild; + m(new Q(c), function (c) { + a.insertBefore(c, d) + }) + } + }, wrap: function (a, c) { + c = y(c).eq(0).clone()[0]; + var d = a.parentNode; + d && d.replaceChild(c, a); + c.appendChild(a) + }, remove: Xb, detach: function (a) { + Xb(a, !0) + }, after: function (a, c) { + var d = a, e = a.parentNode; + c = new Q(c); + for (var f = 0, g = c.length; f < g; f++) { + var h = c[f]; + e.insertBefore(h, + d.nextSibling); + d = h + } + }, addClass: yb, removeClass: xb, toggleClass: function (a, c, d) { + c && m(c.split(" "), function (c) { + var f = d; + A(f) && (f = !wb(a, c)); + (f ? yb : xb)(a, c) + }) + }, parent: function (a) { + return (a = a.parentNode) && 11 !== a.nodeType ? a : null + }, next: function (a) { + return a.nextElementSibling + }, find: function (a, c) { + return a.getElementsByTagName ? a.getElementsByTagName(c) : [] + }, clone: Vb, triggerHandler: function (a, c, d) { + var e, f, g = c.type || c, h = vb(a); + if (h = (h = h && h.events) && h[g])e = { + preventDefault: function () { + this.defaultPrevented = !0 + }, isDefaultPrevented: function () { + return !0 === + this.defaultPrevented + }, stopImmediatePropagation: function () { + this.immediatePropagationStopped = !0 + }, isImmediatePropagationStopped: function () { + return !0 === this.immediatePropagationStopped + }, stopPropagation: v, type: g, target: a + }, c.type && (e = P(e, c)), c = ia(h), f = d ? [e].concat(d) : [e], m(c, function (c) { + e.isImmediatePropagationStopped() || c.apply(a, f) + }) + } + }, function (a, c) { + Q.prototype[c] = function (c, e, f) { + for (var g, h = 0, l = this.length; h < l; h++)A(g) ? (g = a(this[h], c, e, f), w(g) && (g = y(g))) : Oc(g, a(this[h], c, e, f)); + return w(g) ? g : this + }; + Q.prototype.bind = + Q.prototype.on; + Q.prototype.unbind = Q.prototype.off + }); + Sa.prototype = { + put: function (a, c) { + this[Ga(a, this.nextUid)] = c + }, get: function (a) { + return this[Ga(a, this.nextUid)] + }, remove: function (a) { + var c = this[a = Ga(a, this.nextUid)]; + delete this[a]; + return c + } + }; + var wf = [function () { + this.$get = [function () { + return Sa + }] + }], Wc = /^function\s*[^\(]*\(\s*([^\)]*)\)/m, mg = /,/, ng = /^\s*(_?)(\S+?)\1\s*$/, Vc = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg, Ha = J("$injector"); + eb.$$annotate = function (a, c, d) { + var e; + if ("function" === typeof a) { + if (!(e = a.$inject)) { + e = + []; + if (a.length) { + if (c)throw L(d) && d || (d = a.name || Hf(a)), Ha("strictdi", d); + c = a.toString().replace(Vc, ""); + c = c.match(Wc); + m(c[1].split(mg), function (a) { + a.replace(ng, function (a, c, d) { + e.push(d) + }) + }) + } + a.$inject = e + } + } else G(a) ? (c = a.length - 1, Qa(a[c], "fn"), e = a.slice(0, c)) : Qa(a, "fn", !0); + return e + }; + var Nd = J("$animate"), Ue = function () { + this.$get = ["$q", "$$rAF", function (a, c) { + function d() { + } + + d.all = v; + d.chain = v; + d.prototype = { + end: v, cancel: v, resume: v, pause: v, complete: v, then: function (d, f) { + return a(function (a) { + c(function () { + a() + }) + }).then(d, + f) + } + }; + return d + }] + }, Te = function () { + var a = new Sa, c = []; + this.$get = ["$$AnimateRunner", "$rootScope", function (d, e) { + function f(d, f, l) { + var k = a.get(d); + k || (a.put(d, k = {}), c.push(d)); + f && m(f.split(" "), function (a) { + a && (k[a] = !0) + }); + l && m(l.split(" "), function (a) { + a && (k[a] = !1) + }); + 1 < c.length || e.$$postDigest(function () { + m(c, function (c) { + var d = a.get(c); + if (d) { + var e = If(c.attr("class")), f = "", g = ""; + m(d, function (a, c) { + a !== !!e[c] && (a ? f += (f.length ? " " : "") + c : g += (g.length ? " " : "") + c) + }); + m(c, function (a) { + f && yb(a, f); + g && xb(a, g) + }); + a.remove(c) + } + }); + c.length = 0 + }) + } + + return { + enabled: v, on: v, off: v, pin: v, push: function (a, c, e, k) { + k && k(); + e = e || {}; + e.from && a.css(e.from); + e.to && a.css(e.to); + (e.addClass || e.removeClass) && f(a, e.addClass, e.removeClass); + return new d + } + } + }] + }, Se = ["$provide", function (a) { + var c = this; + this.$$registeredAnimations = Object.create(null); + this.register = function (d, e) { + if (d && "." !== d.charAt(0))throw Nd("notcsel", d); + var f = d + "-animation"; + c.$$registeredAnimations[d.substr(1)] = f; + a.factory(f, e) + }; + this.classNameFilter = function (a) { + if (1 === arguments.length && (this.$$classNameFilter = + a instanceof RegExp ? a : null) && /(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Nd("nongcls", "ng-animate"); + return this.$$classNameFilter + }; + this.$get = ["$$animateQueue", function (a) { + function c(a, d, e) { + if (e) { + var l; + a:{ + for (l = 0; l < e.length; l++) { + var k = e[l]; + if (1 === k.nodeType) { + l = k; + break a + } + } + l = void 0 + } + !l || l.parentNode || l.previousElementSibling || (e = null) + } + e ? e.after(a) : d.prepend(a) + } + + return { + on: a.on, off: a.off, pin: a.pin, enabled: a.enabled, cancel: function (a) { + a.end && a.end() + }, enter: function (f, g, h, l) { + g = + g && y(g); + h = h && y(h); + g = g || h.parent(); + c(f, g, h); + return a.push(f, "enter", Ia(l)) + }, move: function (f, g, h, l) { + g = g && y(g); + h = h && y(h); + g = g || h.parent(); + c(f, g, h); + return a.push(f, "move", Ia(l)) + }, leave: function (c, e) { + return a.push(c, "leave", Ia(e), function () { + c.remove() + }) + }, addClass: function (c, e, h) { + h = Ia(h); + h.addClass = jb(h.addclass, e); + return a.push(c, "addClass", h) + }, removeClass: function (c, e, h) { + h = Ia(h); + h.removeClass = jb(h.removeClass, e); + return a.push(c, "removeClass", h) + }, setClass: function (c, e, h, l) { + l = Ia(l); + l.addClass = jb(l.addClass, + e); + l.removeClass = jb(l.removeClass, h); + return a.push(c, "setClass", l) + }, animate: function (c, e, h, l, k) { + k = Ia(k); + k.from = k.from ? P(k.from, e) : e; + k.to = k.to ? P(k.to, h) : h; + k.tempClasses = jb(k.tempClasses, l || "ng-inline-animate"); + return a.push(c, "animate", k) + } + } + }] + }], ea = J("$compile"); + Ec.$inject = ["$provide", "$$sanitizeUriProvider"]; + var Zc = /^((?:x|data)[\:\-_])/i, Nf = J("$controller"), Xc = /^(\S+)(\s+as\s+(\w+))?$/, cd = "application/json", ac = {"Content-Type": cd + ";charset=utf-8"}, Pf = /^\[|^\{(?!\{)/, Qf = { + "[": /]$/, + "{": /}$/ + }, Of = /^\)\]\}',?\n/, + Ka = ca.$interpolateMinErr = J("$interpolate"); + Ka.throwNoconcat = function (a) { + throw Ka("noconcat", a); + }; + Ka.interr = function (a, c) { + return Ka("interr", a, c.toString()) + }; + var og = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, Tf = {http: 80, https: 443, ftp: 21}, Cb = J("$location"), pg = { + $$html5: !1, $$replace: !1, absUrl: Db("$$absUrl"), url: function (a) { + if (A(a))return this.$$url; + var c = og.exec(a); + (c[1] || "" === a) && this.path(decodeURIComponent(c[1])); + (c[2] || c[1] || "" === a) && this.search(c[3] || ""); + this.hash(c[5] || ""); + return this + }, protocol: Db("$$protocol"), + host: Db("$$host"), port: Db("$$port"), path: kd("$$path", function (a) { + a = null !== a ? a.toString() : ""; + return "/" == a.charAt(0) ? a : "/" + a + }), search: function (a, c) { + switch (arguments.length) { + case 0: + return this.$$search; + case 1: + if (L(a) || V(a))a = a.toString(), this.$$search = zc(a); else if (H(a))a = fa(a, {}), m(a, function (c, e) { + null == c && delete a[e] + }), this.$$search = a; else throw Cb("isrcharg"); + break; + default: + A(c) || null === c ? delete this.$$search[a] : this.$$search[a] = c + } + this.$$compose(); + return this + }, hash: kd("$$hash", function (a) { + return null !== + a ? a.toString() : "" + }), replace: function () { + this.$$replace = !0; + return this + } + }; + m([jd, ec, dc], function (a) { + a.prototype = Object.create(pg); + a.prototype.state = function (c) { + if (!arguments.length)return this.$$state; + if (a !== dc || !this.$$html5)throw Cb("nostate"); + this.$$state = A(c) ? null : c; + return this + } + }); + var da = J("$parse"), Uf = Function.prototype.call, Vf = Function.prototype.apply, Wf = Function.prototype.bind, Mb = ga(); + m("+ - * / % === !== == != < > <= >= && || ! = |".split(" "), function (a) { + Mb[a] = !0 + }); + var qg = { + n: "\n", f: "\f", r: "\r", + t: "\t", v: "\v", "'": "'", '"': '"' + }, gc = function (a) { + this.options = a + }; + gc.prototype = { + constructor: gc, lex: function (a) { + this.text = a; + this.index = 0; + for (this.tokens = []; this.index < this.text.length;)if (a = this.text.charAt(this.index), '"' === a || "'" === a)this.readString(a); else if (this.isNumber(a) || "." === a && this.isNumber(this.peek()))this.readNumber(); else if (this.isIdent(a))this.readIdent(); else if (this.is(a, "(){}[].,;:?"))this.tokens.push({ + index: this.index, + text: a + }), this.index++; else if (this.isWhitespace(a))this.index++; + else { + var c = a + this.peek(), d = c + this.peek(2), e = Mb[c], f = Mb[d]; + Mb[a] || e || f ? (a = f ? d : e ? c : a, this.tokens.push({ + index: this.index, + text: a, + operator: !0 + }), this.index += a.length) : this.throwError("Unexpected next character ", this.index, this.index + 1) + } + return this.tokens + }, is: function (a, c) { + return -1 !== c.indexOf(a) + }, peek: function (a) { + a = a || 1; + return this.index + a < this.text.length ? this.text.charAt(this.index + a) : !1 + }, isNumber: function (a) { + return "0" <= a && "9" >= a && "string" === typeof a + }, isWhitespace: function (a) { + return " " === a || "\r" === a || + "\t" === a || "\n" === a || "\v" === a || "\u00a0" === a + }, 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 = w(c) ? "s " + c + "-" + this.index + " [" + this.text.substring(c, d) + "]" : " " + d; + throw da("lexerr", a, c, this.text); + }, readNumber: function () { + for (var a = "", c = this.index; this.index < this.text.length;) { + var d = M(this.text.charAt(this.index)); + if ("." == d || this.isNumber(d))a += d; else { + var e = this.peek(); + if ("e" == d && this.isExpOperator(e))a += d; else if (this.isExpOperator(d) && e && this.isNumber(e) && "e" == a.charAt(a.length - 1))a += d; else if (!this.isExpOperator(d) || e && this.isNumber(e) || "e" != a.charAt(a.length - 1))break; else this.throwError("Invalid exponent") + } + this.index++ + } + this.tokens.push({index: c, text: a, constant: !0, value: Number(a)}) + }, readIdent: function () { + for (var a = this.index; this.index < this.text.length;) { + var c = this.text.charAt(this.index); + if (!this.isIdent(c) && !this.isNumber(c))break; + this.index++ + } + this.tokens.push({ + index: a, + text: this.text.slice(a, this.index), identifier: !0 + }) + }, readString: function (a) { + var c = this.index; + this.index++; + for (var d = "", e = a, f = !1; this.index < this.text.length;) { + var g = this.text.charAt(this.index), e = e + g; + if (f)"u" === g ? (f = this.text.substring(this.index + 1, this.index + 5), f.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + f + "]"), this.index += 4, d += String.fromCharCode(parseInt(f, 16))) : d += qg[g] || g, f = !1; else if ("\\" === g)f = !0; else { + if (g === a) { + this.index++; + this.tokens.push({ + index: c, text: e, constant: !0, + value: d + }); + return + } + d += g + } + this.index++ + } + this.throwError("Unterminated quote", c) + } + }; + var q = function (a, c) { + this.lexer = a; + this.options = c + }; + q.Program = "Program"; + q.ExpressionStatement = "ExpressionStatement"; + q.AssignmentExpression = "AssignmentExpression"; + q.ConditionalExpression = "ConditionalExpression"; + q.LogicalExpression = "LogicalExpression"; + q.BinaryExpression = "BinaryExpression"; + q.UnaryExpression = "UnaryExpression"; + q.CallExpression = "CallExpression"; + q.MemberExpression = "MemberExpression"; + q.Identifier = "Identifier"; + q.Literal = + "Literal"; + q.ArrayExpression = "ArrayExpression"; + q.Property = "Property"; + q.ObjectExpression = "ObjectExpression"; + q.ThisExpression = "ThisExpression"; + q.NGValueParameter = "NGValueParameter"; + q.prototype = { + ast: function (a) { + this.text = a; + this.tokens = this.lexer.lex(a); + a = this.program(); + 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]); + return a + }, + program: function () { + for (var a = []; ;)if (0 < this.tokens.length && !this.peek("}", ")", ";", "]") && a.push(this.expressionStatement()), !this.expect(";"))return { + type: q.Program, + body: a + } + }, + expressionStatement: function () { + return {type: q.ExpressionStatement, expression: this.filterChain()} + }, + filterChain: function () { + for (var a = this.expression(); this.expect("|");)a = this.filter(a); + return a + }, + expression: function () { + return this.assignment() + }, + assignment: function () { + var a = this.ternary(); + this.expect("=") && (a = {type: q.AssignmentExpression, left: a, right: this.assignment(), operator: "="}); + return a + }, + ternary: function () { + var a = this.logicalOR(), c, d; + return this.expect("?") && (c = this.expression(), this.consume(":")) ? + (d = this.expression(), {type: q.ConditionalExpression, test: a, alternate: c, consequent: d}) : a + }, + logicalOR: function () { + for (var a = this.logicalAND(); this.expect("||");)a = { + type: q.LogicalExpression, + operator: "||", + left: a, + right: this.logicalAND() + }; + return a + }, + logicalAND: function () { + for (var a = this.equality(); this.expect("&&");)a = { + type: q.LogicalExpression, + operator: "&&", + left: a, + right: this.equality() + }; + return a + }, + equality: function () { + for (var a = this.relational(), c; c = this.expect("==", "!=", "===", "!==");)a = { + type: q.BinaryExpression, + operator: c.text, left: a, right: this.relational() + }; + return a + }, + relational: function () { + for (var a = this.additive(), c; c = this.expect("<", ">", "<=", ">=");)a = { + type: q.BinaryExpression, + operator: c.text, + left: a, + right: this.additive() + }; + return a + }, + additive: function () { + for (var a = this.multiplicative(), c; c = this.expect("+", "-");)a = { + type: q.BinaryExpression, + operator: c.text, + left: a, + right: this.multiplicative() + }; + return a + }, + multiplicative: function () { + for (var a = this.unary(), c; c = this.expect("*", "/", "%");)a = { + type: q.BinaryExpression, operator: c.text, + left: a, right: this.unary() + }; + return a + }, + unary: function () { + var a; + return (a = this.expect("+", "-", "!")) ? { + type: q.UnaryExpression, + operator: a.text, + prefix: !0, + argument: this.unary() + } : this.primary() + }, + primary: function () { + var a; + this.expect("(") ? (a = this.filterChain(), this.consume(")")) : this.expect("[") ? a = this.arrayDeclaration() : this.expect("{") ? a = this.object() : this.constants.hasOwnProperty(this.peek().text) ? a = fa(this.constants[this.consume().text]) : this.peek().identifier ? a = this.identifier() : this.peek().constant ? a = this.constant() : + this.throwError("not a primary expression", this.peek()); + for (var c; c = this.expect("(", "[", ".");)"(" === c.text ? (a = { + type: q.CallExpression, + callee: a, + arguments: this.parseArguments() + }, this.consume(")")) : "[" === c.text ? (a = { + type: q.MemberExpression, + object: a, + property: this.expression(), + computed: !0 + }, this.consume("]")) : "." === c.text ? a = { + type: q.MemberExpression, + object: a, + property: this.identifier(), + computed: !1 + } : this.throwError("IMPOSSIBLE"); + return a + }, + filter: function (a) { + a = [a]; + for (var c = { + type: q.CallExpression, callee: this.identifier(), + arguments: a, filter: !0 + }; this.expect(":");)a.push(this.expression()); + return c + }, + parseArguments: function () { + var a = []; + if (")" !== this.peekToken().text) { + do a.push(this.expression()); while (this.expect(",")) + } + return a + }, + identifier: function () { + var a = this.consume(); + a.identifier || this.throwError("is not a valid identifier", a); + return {type: q.Identifier, name: a.text} + }, + constant: function () { + return {type: q.Literal, value: this.consume().value} + }, + arrayDeclaration: function () { + var a = []; + if ("]" !== this.peekToken().text) { + do { + if (this.peek("]"))break; + a.push(this.expression()) + } while (this.expect(",")) + } + this.consume("]"); + return {type: q.ArrayExpression, elements: a} + }, + object: function () { + var a = [], c; + if ("}" !== this.peekToken().text) { + do { + if (this.peek("}"))break; + c = {type: q.Property, kind: "init"}; + this.peek().constant ? c.key = this.constant() : this.peek().identifier ? c.key = this.identifier() : this.throwError("invalid key", this.peek()); + this.consume(":"); + c.value = this.expression(); + a.push(c) + } while (this.expect(",")) + } + this.consume("}"); + return {type: q.ObjectExpression, properties: a} + }, + throwError: function (a, c) { + throw da("syntax", c.text, a, c.index + 1, this.text, this.text.substring(c.index)); + }, + consume: function (a) { + if (0 === this.tokens.length)throw da("ueoe", this.text); + var c = this.expect(a); + c || this.throwError("is unexpected, expecting [" + a + "]", this.peek()); + return c + }, + peekToken: function () { + if (0 === this.tokens.length)throw da("ueoe", this.text); + return this.tokens[0] + }, + peek: function (a, c, d, e) { + return this.peekAhead(0, a, c, d, e) + }, + peekAhead: function (a, c, d, e, f) { + if (this.tokens.length > a) { + a = this.tokens[a]; + var g = a.text; + if (g === c || g === d || g === e || g === f || !(c || d || e || f))return a + } + return !1 + }, + expect: function (a, c, d, e) { + return (a = this.peek(a, c, d, e)) ? (this.tokens.shift(), a) : !1 + }, + constants: { + "true": {type: q.Literal, value: !0}, + "false": {type: q.Literal, value: !1}, + "null": {type: q.Literal, value: null}, + undefined: {type: q.Literal, value: t}, + "this": {type: q.ThisExpression} + } + }; + rd.prototype = { + compile: function (a, c) { + var d = this, e = this.astBuilder.ast(a); + this.state = { + nextId: 0, filters: {}, expensiveChecks: c, fn: {vars: [], body: [], own: {}}, assign: { + vars: [], + body: [], own: {} + }, inputs: [] + }; + T(e, d.$filter); + var f = "", g; + this.stage = "assign"; + if (g = pd(e))this.state.computing = "assign", f = this.nextId(), this.recurse(g, f), f = "fn.assign=" + this.generateFunction("assign", "s,v,l"); + g = nd(e.body); + d.stage = "inputs"; + m(g, function (a, c) { + var e = "fn" + c; + d.state[e] = {vars: [], body: [], own: {}}; + d.state.computing = e; + var f = d.nextId(); + d.recurse(a, f); + d.return_(f); + d.state.inputs.push(e); + a.watchId = c + }); + this.state.computing = "fn"; + this.stage = "main"; + this.recurse(e); + f = '"' + this.USE + " " + this.STRICT + '";\n' + this.filterPrefix() + + "var fn=" + this.generateFunction("fn", "s,l,a,i") + f + this.watchFns() + "return fn;"; + f = (new Function("$filter", "ensureSafeMemberName", "ensureSafeObject", "ensureSafeFunction", "ifDefined", "plus", "text", f))(this.$filter, Ca, oa, ld, Xf, md, a); + this.state = this.stage = t; + f.literal = qd(e); + f.constant = e.constant; + return f + }, USE: "use", STRICT: "strict", watchFns: function () { + var a = [], c = this.state.inputs, d = this; + m(c, function (c) { + a.push("var " + c + "=" + d.generateFunction(c, "s")) + }); + c.length && a.push("fn.inputs=[" + c.join(",") + "];"); + return a.join("") + }, + generateFunction: function (a, c) { + return "function(" + c + "){" + this.varsPrefix(a) + this.body(a) + "};" + }, filterPrefix: function () { + var a = [], c = this; + m(this.state.filters, function (d, e) { + a.push(d + "=$filter(" + c.escape(e) + ")") + }); + return a.length ? "var " + a.join(",") + ";" : "" + }, varsPrefix: function (a) { + return this.state[a].vars.length ? "var " + this.state[a].vars.join(",") + ";" : "" + }, body: function (a) { + return this.state[a].body.join("") + }, recurse: function (a, c, d, e, f, g) { + var h, l, k = this, n, r; + e = e || v; + if (!g && w(a.watchId))c = c || this.nextId(), this.if_("i", + this.lazyAssign(c, this.computedMember("i", a.watchId)), this.lazyRecurse(a, c, d, e, f, !0)); else switch (a.type) { + case q.Program: + m(a.body, function (c, d) { + k.recurse(c.expression, t, t, function (a) { + l = a + }); + d !== a.body.length - 1 ? k.current().body.push(l, ";") : k.return_(l) + }); + break; + case q.Literal: + r = this.escape(a.value); + this.assign(c, r); + e(r); + break; + case q.UnaryExpression: + this.recurse(a.argument, t, t, function (a) { + l = a + }); + r = a.operator + "(" + this.ifDefined(l, 0) + ")"; + this.assign(c, r); + e(r); + break; + case q.BinaryExpression: + this.recurse(a.left, + t, t, function (a) { + h = a + }); + this.recurse(a.right, t, t, function (a) { + l = a + }); + r = "+" === a.operator ? this.plus(h, l) : "-" === a.operator ? this.ifDefined(h, 0) + a.operator + this.ifDefined(l, 0) : "(" + h + ")" + a.operator + "(" + l + ")"; + this.assign(c, r); + e(r); + break; + case q.LogicalExpression: + c = c || this.nextId(); + k.recurse(a.left, c); + k.if_("&&" === a.operator ? c : k.not(c), k.lazyRecurse(a.right, c)); + e(c); + break; + case q.ConditionalExpression: + c = c || this.nextId(); + k.recurse(a.test, c); + k.if_(c, k.lazyRecurse(a.alternate, c), k.lazyRecurse(a.consequent, c)); + e(c); + break; + case q.Identifier: + c = c || this.nextId(); + d && (d.context = "inputs" === k.stage ? "s" : this.assign(this.nextId(), this.getHasOwnProperty("l", a.name) + "?l:s"), d.computed = !1, d.name = a.name); + Ca(a.name); + k.if_("inputs" === k.stage || k.not(k.getHasOwnProperty("l", a.name)), function () { + k.if_("inputs" === k.stage || "s", function () { + f && 1 !== f && k.if_(k.not(k.nonComputedMember("s", a.name)), k.lazyAssign(k.nonComputedMember("s", a.name), "{}")); + k.assign(c, k.nonComputedMember("s", a.name)) + }) + }, c && k.lazyAssign(c, k.nonComputedMember("l", + a.name))); + (k.state.expensiveChecks || Fb(a.name)) && k.addEnsureSafeObject(c); + e(c); + break; + case q.MemberExpression: + h = d && (d.context = this.nextId()) || this.nextId(); + c = c || this.nextId(); + k.recurse(a.object, h, t, function () { + k.if_(k.notNull(h), function () { + if (a.computed)l = k.nextId(), k.recurse(a.property, l), k.addEnsureSafeMemberName(l), f && 1 !== f && k.if_(k.not(k.computedMember(h, l)), k.lazyAssign(k.computedMember(h, l), "{}")), r = k.ensureSafeObject(k.computedMember(h, l)), k.assign(c, r), d && (d.computed = !0, d.name = l); else { + Ca(a.property.name); + f && 1 !== f && k.if_(k.not(k.nonComputedMember(h, a.property.name)), k.lazyAssign(k.nonComputedMember(h, a.property.name), "{}")); + r = k.nonComputedMember(h, a.property.name); + if (k.state.expensiveChecks || Fb(a.property.name))r = k.ensureSafeObject(r); + k.assign(c, r); + d && (d.computed = !1, d.name = a.property.name) + } + }, function () { + k.assign(c, "undefined") + }); + e(c) + }, !!f); + break; + case q.CallExpression: + c = c || this.nextId(); + a.filter ? (l = k.filter(a.callee.name), n = [], m(a.arguments, function (a) { + var c = k.nextId(); + k.recurse(a, c); + n.push(c) + }), r = l + + "(" + n.join(",") + ")", k.assign(c, r), e(c)) : (l = k.nextId(), h = {}, n = [], k.recurse(a.callee, l, h, function () { + k.if_(k.notNull(l), function () { + k.addEnsureSafeFunction(l); + m(a.arguments, function (a) { + k.recurse(a, k.nextId(), t, function (a) { + n.push(k.ensureSafeObject(a)) + }) + }); + h.name ? (k.state.expensiveChecks || k.addEnsureSafeObject(h.context), r = k.member(h.context, h.name, h.computed) + "(" + n.join(",") + ")") : r = l + "(" + n.join(",") + ")"; + r = k.ensureSafeObject(r); + k.assign(c, r) + }, function () { + k.assign(c, "undefined") + }); + e(c) + })); + break; + case q.AssignmentExpression: + l = + this.nextId(); + h = {}; + if (!od(a.left))throw da("lval"); + this.recurse(a.left, t, h, function () { + k.if_(k.notNull(h.context), function () { + k.recurse(a.right, l); + k.addEnsureSafeObject(k.member(h.context, h.name, h.computed)); + r = k.member(h.context, h.name, h.computed) + a.operator + l; + k.assign(c, r); + e(c || r) + }) + }, 1); + break; + case q.ArrayExpression: + n = []; + m(a.elements, function (a) { + k.recurse(a, k.nextId(), t, function (a) { + n.push(a) + }) + }); + r = "[" + n.join(",") + "]"; + this.assign(c, r); + e(r); + break; + case q.ObjectExpression: + n = []; + m(a.properties, function (a) { + k.recurse(a.value, + k.nextId(), t, function (c) { + n.push(k.escape(a.key.type === q.Identifier ? a.key.name : "" + a.key.value) + ":" + c) + }) + }); + r = "{" + n.join(",") + "}"; + this.assign(c, r); + e(r); + break; + case q.ThisExpression: + this.assign(c, "s"); + e("s"); + break; + case q.NGValueParameter: + this.assign(c, "v"), e("v") + } + }, getHasOwnProperty: function (a, c) { + var d = a + "." + c, e = this.current().own; + e.hasOwnProperty(d) || (e[d] = this.nextId(!1, a + "&&(" + this.escape(c) + " in " + a + ")")); + return e[d] + }, assign: function (a, c) { + if (a)return this.current().body.push(a, "=", c, ";"), a + }, filter: function (a) { + this.state.filters.hasOwnProperty(a) || + (this.state.filters[a] = this.nextId(!0)); + return this.state.filters[a] + }, ifDefined: function (a, c) { + return "ifDefined(" + a + "," + this.escape(c) + ")" + }, plus: function (a, c) { + return "plus(" + a + "," + c + ")" + }, return_: function (a) { + this.current().body.push("return ", a, ";") + }, if_: function (a, c, d) { + if (!0 === a)c(); else { + var e = this.current().body; + e.push("if(", a, "){"); + c(); + e.push("}"); + d && (e.push("else{"), d(), e.push("}")) + } + }, not: function (a) { + return "!(" + a + ")" + }, notNull: function (a) { + return a + "!=null" + }, nonComputedMember: function (a, c) { + return a + + "." + c + }, computedMember: function (a, c) { + return a + "[" + c + "]" + }, member: function (a, c, d) { + return d ? this.computedMember(a, c) : this.nonComputedMember(a, c) + }, addEnsureSafeObject: function (a) { + this.current().body.push(this.ensureSafeObject(a), ";") + }, addEnsureSafeMemberName: function (a) { + this.current().body.push(this.ensureSafeMemberName(a), ";") + }, addEnsureSafeFunction: function (a) { + this.current().body.push(this.ensureSafeFunction(a), ";") + }, ensureSafeObject: function (a) { + return "ensureSafeObject(" + a + ",text)" + }, ensureSafeMemberName: function (a) { + return "ensureSafeMemberName(" + + a + ",text)" + }, ensureSafeFunction: function (a) { + return "ensureSafeFunction(" + a + ",text)" + }, lazyRecurse: function (a, c, d, e, f, g) { + var h = this; + return function () { + h.recurse(a, c, d, e, f, g) + } + }, lazyAssign: function (a, c) { + var d = this; + return function () { + d.assign(a, c) + } + }, stringEscapeRegex: /[^ a-zA-Z0-9]/g, stringEscapeFn: function (a) { + return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) + }, escape: function (a) { + if (L(a))return "'" + a.replace(this.stringEscapeRegex, this.stringEscapeFn) + "'"; + if (V(a))return a.toString(); + if (!0 === a)return "true"; + if (!1 === a)return "false"; + if (null === a)return "null"; + if ("undefined" === typeof a)return "undefined"; + throw da("esc"); + }, nextId: function (a, c) { + var d = "v" + this.state.nextId++; + a || this.current().vars.push(d + (c ? "=" + c : "")); + return d + }, current: function () { + return this.state[this.state.computing] + } + }; + sd.prototype = { + compile: function (a, c) { + var d = this, e = this.astBuilder.ast(a); + this.expression = a; + this.expensiveChecks = c; + T(e, d.$filter); + var f, g; + if (f = pd(e))g = this.recurse(f); + f = nd(e.body); + var h; + f && (h = [], m(f, function (a, c) { + var e = d.recurse(a); + a.input = e; + h.push(e); + a.watchId = c + })); + var l = []; + m(e.body, function (a) { + l.push(d.recurse(a.expression)) + }); + f = 0 === e.body.length ? function () { + } : 1 === e.body.length ? l[0] : function (a, c) { + var d; + m(l, function (e) { + d = e(a, c) + }); + return d + }; + g && (f.assign = function (a, c, d) { + return g(a, d, c) + }); + h && (f.inputs = h); + f.literal = qd(e); + f.constant = e.constant; + return f + }, recurse: function (a, c, d) { + var e, f, g = this, h; + if (a.input)return this.inputs(a.input, a.watchId); + switch (a.type) { + case q.Literal: + return this.value(a.value, c); + case q.UnaryExpression: + return f = + this.recurse(a.argument), this["unary" + a.operator](f, c); + case q.BinaryExpression: + return e = this.recurse(a.left), f = this.recurse(a.right), this["binary" + a.operator](e, f, c); + case q.LogicalExpression: + return e = this.recurse(a.left), f = this.recurse(a.right), this["binary" + a.operator](e, f, c); + case q.ConditionalExpression: + return this["ternary?:"](this.recurse(a.test), this.recurse(a.alternate), this.recurse(a.consequent), c); + case q.Identifier: + return Ca(a.name, g.expression), g.identifier(a.name, g.expensiveChecks || Fb(a.name), + c, d, g.expression); + case q.MemberExpression: + return e = this.recurse(a.object, !1, !!d), a.computed || (Ca(a.property.name, g.expression), f = a.property.name), a.computed && (f = this.recurse(a.property)), a.computed ? this.computedMember(e, f, c, d, g.expression) : this.nonComputedMember(e, f, g.expensiveChecks, c, d, g.expression); + case q.CallExpression: + return h = [], m(a.arguments, function (a) { + h.push(g.recurse(a)) + }), a.filter && (f = this.$filter(a.callee.name)), a.filter || (f = this.recurse(a.callee, !0)), a.filter ? function (a, d, e, g) { + for (var m = + [], q = 0; q < h.length; ++q)m.push(h[q](a, d, e, g)); + a = f.apply(t, m, g); + return c ? {context: t, name: t, value: a} : a + } : function (a, d, e, r) { + var m = f(a, d, e, r), q; + if (null != m.value) { + oa(m.context, g.expression); + ld(m.value, g.expression); + q = []; + for (var t = 0; t < h.length; ++t)q.push(oa(h[t](a, d, e, r), g.expression)); + q = oa(m.value.apply(m.context, q), g.expression) + } + return c ? {value: q} : q + }; + case q.AssignmentExpression: + return e = this.recurse(a.left, !0, 1), f = this.recurse(a.right), function (a, d, h, r) { + var m = e(a, d, h, r); + a = f(a, d, h, r); + oa(m.value, g.expression); + m.context[m.name] = a; + return c ? {value: a} : a + }; + case q.ArrayExpression: + return h = [], m(a.elements, function (a) { + h.push(g.recurse(a)) + }), function (a, d, e, f) { + for (var g = [], m = 0; m < h.length; ++m)g.push(h[m](a, d, e, f)); + return c ? {value: g} : g + }; + case q.ObjectExpression: + return h = [], m(a.properties, function (a) { + h.push({ + key: a.key.type === q.Identifier ? a.key.name : "" + a.key.value, + value: g.recurse(a.value) + }) + }), function (a, d, e, f) { + for (var g = {}, m = 0; m < h.length; ++m)g[h[m].key] = h[m].value(a, d, e, f); + return c ? {value: g} : g + }; + case q.ThisExpression: + return function (a) { + return c ? + {value: a} : a + }; + case q.NGValueParameter: + return function (a, d, e, f) { + return c ? {value: e} : e + } + } + }, "unary+": function (a, c) { + return function (d, e, f, g) { + d = a(d, e, f, g); + d = w(d) ? +d : 0; + return c ? {value: d} : d + } + }, "unary-": function (a, c) { + return function (d, e, f, g) { + d = a(d, e, f, g); + d = w(d) ? -d : 0; + return c ? {value: d} : d + } + }, "unary!": function (a, c) { + return function (d, e, f, g) { + d = !a(d, e, f, g); + return c ? {value: d} : d + } + }, "binary+": function (a, c, d) { + return function (e, f, g, h) { + var l = a(e, f, g, h); + e = c(e, f, g, h); + l = md(l, e); + return d ? {value: l} : l + } + }, "binary-": function (a, c, d) { + return function (e, + f, g, h) { + var l = a(e, f, g, h); + e = c(e, f, g, h); + l = (w(l) ? l : 0) - (w(e) ? e : 0); + return d ? {value: l} : l + } + }, "binary*": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) * c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary/": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) / c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary%": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) % c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary===": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) === c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary!==": function (a, + c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) !== c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary==": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) == c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary!=": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) != c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary<": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) < c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary>": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) > c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary<=": function (a, c, d) { + return function (e, + f, g, h) { + e = a(e, f, g, h) <= c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary>=": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) >= c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary&&": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) && c(e, f, g, h); + return d ? {value: e} : e + } + }, "binary||": function (a, c, d) { + return function (e, f, g, h) { + e = a(e, f, g, h) || c(e, f, g, h); + return d ? {value: e} : e + } + }, "ternary?:": function (a, c, d, e) { + return function (f, g, h, l) { + f = a(f, g, h, l) ? c(f, g, h, l) : d(f, g, h, l); + return e ? {value: f} : f + } + }, value: function (a, c) { + return function () { + return c ? + {context: t, name: t, value: a} : a + } + }, identifier: function (a, c, d, e, f) { + return function (g, h, l, k) { + g = h && a in h ? h : g; + e && 1 !== e && g && !g[a] && (g[a] = {}); + h = g ? g[a] : t; + c && oa(h, f); + return d ? {context: g, name: a, value: h} : h + } + }, computedMember: function (a, c, d, e, f) { + return function (g, h, l, k) { + var n = a(g, h, l, k), m, s; + null != n && (m = c(g, h, l, k), Ca(m, f), e && 1 !== e && n && !n[m] && (n[m] = {}), s = n[m], oa(s, f)); + return d ? {context: n, name: m, value: s} : s + } + }, nonComputedMember: function (a, c, d, e, f, g) { + return function (h, l, k, n) { + h = a(h, l, k, n); + f && 1 !== f && h && !h[c] && (h[c] = {}); + l = null != h ? h[c] : t; + (d || Fb(c)) && oa(l, g); + return e ? {context: h, name: c, value: l} : l + } + }, inputs: function (a, c) { + return function (d, e, f, g) { + return g ? g[c] : a(d, e, f) + } + } + }; + var hc = function (a, c, d) { + this.lexer = a; + this.$filter = c; + this.options = d; + this.ast = new q(this.lexer); + this.astCompiler = d.csp ? new sd(this.ast, c) : new rd(this.ast, c) + }; + hc.prototype = { + constructor: hc, parse: function (a) { + return this.astCompiler.compile(a, this.options.expensiveChecks) + } + }; + ga(); + ga(); + var Yf = Object.prototype.valueOf, Da = J("$sce"), pa = { + HTML: "html", CSS: "css", URL: "url", + RESOURCE_URL: "resourceUrl", JS: "js" + }, ea = J("$compile"), X = U.createElement("a"), wd = Ba(O.location.href); + xd.$inject = ["$document"]; + Lc.$inject = ["$provide"]; + yd.$inject = ["$locale"]; + Ad.$inject = ["$locale"]; + var Dd = ".", hg = { + yyyy: Y("FullYear", 4), + yy: Y("FullYear", 2, 0, !0), + y: Y("FullYear", 1), + MMMM: Hb("Month"), + MMM: Hb("Month", !0), + MM: Y("Month", 2, 1), + M: Y("Month", 1, 1), + dd: Y("Date", 2), + d: Y("Date", 1), + HH: Y("Hours", 2), + H: Y("Hours", 1), + hh: Y("Hours", 2, -12), + h: Y("Hours", 1, -12), + mm: Y("Minutes", 2), + m: Y("Minutes", 1), + ss: Y("Seconds", 2), + s: Y("Seconds", + 1), + sss: Y("Milliseconds", 3), + EEEE: Hb("Day"), + EEE: Hb("Day", !0), + a: function (a, c) { + return 12 > a.getHours() ? c.AMPMS[0] : c.AMPMS[1] + }, + Z: function (a, c, d) { + a = -1 * d; + return a = (0 <= a ? "+" : "") + (Gb(Math[0 < a ? "floor" : "ceil"](a / 60), 2) + Gb(Math.abs(a % 60), 2)) + }, + ww: Fd(2), + w: Fd(1), + G: jc, + GG: jc, + GGG: jc, + GGGG: function (a, c) { + return 0 >= a.getFullYear() ? c.ERANAMES[0] : c.ERANAMES[1] + } + }, gg = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/, fg = /^\-?\d+$/; + zd.$inject = ["$locale"]; + var cg = ra(M), dg = ra(rb); + Bd.$inject = + ["$parse"]; + var ie = ra({ + restrict: "E", compile: function (a, c) { + if (!c.href && !c.xlinkHref)return function (a, c) { + if ("a" === c[0].nodeName.toLowerCase()) { + var f = "[object SVGAnimatedString]" === sa.call(c.prop("href")) ? "xlink:href" : "href"; + c.on("click", function (a) { + c.attr(f) || a.preventDefault() + }) + } + } + } + }), sb = {}; + m(Ab, function (a, c) { + function d(a, d, f) { + a.$watch(f[e], function (a) { + f.$set(c, !!a) + }) + } + + if ("multiple" != a) { + var e = wa("ng-" + c), f = d; + "checked" === a && (f = function (a, c, f) { + f.ngModel !== f[e] && d(a, c, f) + }); + sb[e] = function () { + return { + restrict: "A", + priority: 100, link: f + } + } + } + }); + m(Uc, function (a, c) { + sb[c] = function () { + return { + priority: 100, link: function (a, e, f) { + if ("ngPattern" === c && "/" == f.ngPattern.charAt(0) && (e = f.ngPattern.match(jg))) { + f.$set("ngPattern", new RegExp(e[1], e[2])); + return + } + a.$watch(f[c], function (a) { + f.$set(c, a) + }) + } + } + } + }); + m(["src", "srcset", "href"], function (a) { + var c = wa("ng-" + a); + sb[c] = function () { + return { + priority: 99, link: function (d, e, f) { + var g = a, h = a; + "href" === a && "[object SVGAnimatedString]" === sa.call(e.prop("href")) && (h = "xlinkHref", f.$attr[h] = "xlink:href", + g = null); + f.$observe(c, function (c) { + c ? (f.$set(h, c), Ua && g && e.prop(g, f[h])) : "href" === a && f.$set(h, null) + }) + } + } + } + }); + var Ib = { + $addControl: v, $$renameControl: function (a, c) { + a.$name = c + }, $removeControl: v, $setValidity: v, $setDirty: v, $setPristine: v, $setSubmitted: v + }; + Gd.$inject = ["$element", "$attrs", "$scope", "$animate", "$interpolate"]; + var Od = function (a) { + return ["$timeout", function (c) { + return { + name: "form", restrict: a ? "EAC" : "E", controller: Gd, compile: function (d, e) { + d.addClass(Va).addClass(mb); + var f = e.name ? "name" : a && e.ngForm ? "ngForm" : + !1; + return { + pre: function (a, d, e, k) { + if (!("action" in e)) { + var n = function (c) { + a.$apply(function () { + k.$commitViewValue(); + k.$setSubmitted() + }); + c.preventDefault() + }; + d[0].addEventListener("submit", n, !1); + d.on("$destroy", function () { + c(function () { + d[0].removeEventListener("submit", n, !1) + }, 0, !1) + }) + } + var m = k.$$parentForm; + f && (Eb(a, k.$name, k, k.$name), e.$observe(f, function (c) { + k.$name !== c && (Eb(a, k.$name, t, k.$name), m.$$renameControl(k, c), Eb(a, k.$name, k, k.$name)) + })); + d.on("$destroy", function () { + m.$removeControl(k); + f && Eb(a, e[f], t, + k.$name); + P(k, Ib) + }) + } + } + } + } + }] + }, je = Od(), we = Od(!0), ig = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/, rg = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, sg = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i, tg = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/, Pd = /^(\d{4})-(\d{2})-(\d{2})$/, Qd = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, mc = /^(\d{4})-W(\d\d)$/, Rd = /^(\d{4})-(\d\d)$/, + Sd = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, Td = { + text: function (a, c, d, e, f, g) { + kb(a, c, d, e, f, g); + kc(e) + }, + date: lb("date", Pd, Kb(Pd, ["yyyy", "MM", "dd"]), "yyyy-MM-dd"), + "datetime-local": lb("datetimelocal", Qd, Kb(Qd, "yyyy MM dd HH mm ss sss".split(" ")), "yyyy-MM-ddTHH:mm:ss.sss"), + time: lb("time", Sd, Kb(Sd, ["HH", "mm", "ss", "sss"]), "HH:mm:ss.sss"), + week: lb("week", mc, function (a, c) { + if (aa(a))return a; + if (L(a)) { + mc.lastIndex = 0; + var d = mc.exec(a); + if (d) { + var e = +d[1], f = +d[2], g = d = 0, h = 0, l = 0, k = Ed(e), f = 7 * (f - 1); + c && (d = c.getHours(), g = + c.getMinutes(), h = c.getSeconds(), l = c.getMilliseconds()); + return new Date(e, 0, k.getDate() + f, d, g, h, l) + } + } + return NaN + }, "yyyy-Www"), + month: lb("month", Rd, Kb(Rd, ["yyyy", "MM"]), "yyyy-MM"), + number: function (a, c, d, e, f, g) { + Id(a, c, d, e); + kb(a, c, d, e, f, g); + e.$$parserName = "number"; + e.$parsers.push(function (a) { + return e.$isEmpty(a) ? null : tg.test(a) ? parseFloat(a) : t + }); + e.$formatters.push(function (a) { + if (!e.$isEmpty(a)) { + if (!V(a))throw Lb("numfmt", a); + a = a.toString() + } + return a + }); + if (w(d.min) || d.ngMin) { + var h; + e.$validators.min = function (a) { + return e.$isEmpty(a) || + A(h) || a >= h + }; + d.$observe("min", function (a) { + w(a) && !V(a) && (a = parseFloat(a, 10)); + h = V(a) && !isNaN(a) ? a : t; + e.$validate() + }) + } + if (w(d.max) || d.ngMax) { + var l; + e.$validators.max = function (a) { + return e.$isEmpty(a) || A(l) || a <= l + }; + d.$observe("max", function (a) { + w(a) && !V(a) && (a = parseFloat(a, 10)); + l = V(a) && !isNaN(a) ? a : t; + e.$validate() + }) + } + }, + url: function (a, c, d, e, f, g) { + kb(a, c, d, e, f, g); + kc(e); + e.$$parserName = "url"; + e.$validators.url = function (a, c) { + var d = a || c; + return e.$isEmpty(d) || rg.test(d) + } + }, + email: function (a, c, d, e, f, g) { + kb(a, c, d, e, f, g); + kc(e); + e.$$parserName = "email"; + e.$validators.email = function (a, c) { + var d = a || c; + return e.$isEmpty(d) || sg.test(d) + } + }, + radio: function (a, c, d, e) { + A(d.name) && c.attr("name", ++nb); + c.on("click", function (a) { + c[0].checked && e.$setViewValue(d.value, a && a.type) + }); + e.$render = function () { + c[0].checked = d.value == e.$viewValue + }; + d.$observe("value", e.$render) + }, + checkbox: function (a, c, d, e, f, g, h, l) { + var k = Jd(l, a, "ngTrueValue", d.ngTrueValue, !0), n = Jd(l, a, "ngFalseValue", d.ngFalseValue, !1); + c.on("click", function (a) { + e.$setViewValue(c[0].checked, a && + a.type) + }); + e.$render = function () { + c[0].checked = e.$viewValue + }; + e.$isEmpty = function (a) { + return !1 === a + }; + e.$formatters.push(function (a) { + return ka(a, k) + }); + e.$parsers.push(function (a) { + return a ? k : n + }) + }, + hidden: v, + button: v, + submit: v, + reset: v, + file: v + }, Fc = ["$browser", "$sniffer", "$filter", "$parse", function (a, c, d, e) { + return { + restrict: "E", require: ["?ngModel"], link: { + pre: function (f, g, h, l) { + l[0] && (Td[M(h.type)] || Td.text)(f, g, h, l[0], c, a, d, e) + } + } + } + }], ug = /^(true|false|\d+)$/, Oe = function () { + return { + restrict: "A", priority: 100, compile: function (a, + c) { + return ug.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) + }) + } + } + } + }, oe = ["$compile", function (a) { + return { + restrict: "AC", compile: function (c) { + a.$$addBindingClass(c); + return function (c, e, f) { + a.$$addBindingInfo(e, f.ngBind); + e = e[0]; + c.$watch(f.ngBind, function (a) { + e.textContent = a === t ? "" : a + }) + } + } + } + }], qe = ["$interpolate", "$compile", function (a, c) { + return { + compile: function (d) { + c.$$addBindingClass(d); + return function (d, f, g) { + d = a(f.attr(g.$attr.ngBindTemplate)); + c.$$addBindingInfo(f, d.expressions); + f = f[0]; + g.$observe("ngBindTemplate", function (a) { + f.textContent = a === t ? "" : a + }) + } + } + } + }], pe = ["$sce", "$parse", "$compile", function (a, c, d) { + return { + restrict: "A", compile: function (e, f) { + var g = c(f.ngBindHtml), h = c(f.ngBindHtml, function (a) { + return (a || "").toString() + }); + d.$$addBindingClass(e); + return function (c, e, f) { + d.$$addBindingInfo(e, f.ngBindHtml); + c.$watch(h, function () { + e.html(a.getTrustedHtml(g(c)) || "") + }) + } + } + } + }], Ne = ra({ + restrict: "A", require: "ngModel", link: function (a, c, d, e) { + e.$viewChangeListeners.push(function () { + a.$eval(d.ngChange) + }) + } + }), + re = lc("", !0), te = lc("Odd", 0), se = lc("Even", 1), ue = Ma({ + compile: function (a, c) { + c.$set("ngCloak", t); + a.removeClass("ng-cloak") + } + }), ve = [function () { + return {restrict: "A", scope: !0, controller: "@", priority: 500} + }], Kc = {}, vg = {blur: !0, focus: !0}; + m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function (a) { + var c = wa("ng-" + a); + Kc[c] = ["$parse", "$rootScope", function (d, e) { + return { + restrict: "A", compile: function (f, g) { + var h = + d(g[c], null, !0); + return function (c, d) { + d.on(a, function (d) { + var f = function () { + h(c, {$event: d}) + }; + vg[a] && e.$$phase ? c.$evalAsync(f) : c.$apply(f) + }) + } + } + } + }] + }); + var ye = ["$animate", function (a) { + return { + multiElement: !0, + transclude: "element", + priority: 600, + terminal: !0, + restrict: "A", + $$tlb: !0, + link: function (c, d, e, f, g) { + var h, l, k; + c.$watch(e.ngIf, function (c) { + c ? l || g(function (c, f) { + l = f; + 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 = + qb(h.clone), a.leave(k).then(function () { + k = null + }), h = null)) + }) + } + } + }], ze = ["$templateRequest", "$anchorScroll", "$animate", function (a, c, d) { + return { + restrict: "ECA", + priority: 400, + terminal: !0, + transclude: "element", + controller: ca.noop, + compile: function (e, f) { + var g = f.ngInclude || f.src, h = f.onload || "", l = f.autoscroll; + return function (e, f, m, s, q) { + var t = 0, F, u, p, v = function () { + u && (u.remove(), u = null); + F && (F.$destroy(), F = null); + p && (d.leave(p).then(function () { + u = null + }), u = p, p = null) + }; + e.$watch(g, function (g) { + var m = function () { + !w(l) || l && !e.$eval(l) || + c() + }, r = ++t; + g ? (a(g, !0).then(function (a) { + if (r === t) { + var c = e.$new(); + s.template = a; + a = q(c, function (a) { + v(); + d.enter(a, null, f).then(m) + }); + F = c; + p = a; + F.$emit("$includeContentLoaded", g); + e.$eval(h) + } + }, function () { + r === t && (v(), e.$emit("$includeContentError", g)) + }), e.$emit("$includeContentRequested", g)) : (v(), s.template = null) + }) + } + } + } + }], Qe = ["$compile", function (a) { + return { + restrict: "ECA", priority: -400, require: "ngInclude", link: function (c, d, e, f) { + /SVG/.test(d[0].toString()) ? (d.empty(), a(Nc(f.template, U).childNodes)(c, function (a) { + d.append(a) + }, + {futureParentElement: d})) : (d.html(f.template), a(d.contents())(c)) + } + } + }], Ae = Ma({ + priority: 450, compile: function () { + return { + pre: function (a, c, d) { + a.$eval(d.ngInit) + } + } + } + }), Me = function () { + return { + restrict: "A", priority: 100, require: "ngModel", link: function (a, c, d, e) { + var f = c.attr(d.$attr.ngList) || ", ", g = "false" !== d.ngTrim, h = g ? R(f) : f; + e.$parsers.push(function (a) { + if (!A(a)) { + var c = []; + a && m(a.split(h), function (a) { + a && c.push(g ? R(a) : a) + }); + return c + } + }); + e.$formatters.push(function (a) { + return G(a) ? a.join(f) : t + }); + e.$isEmpty = function (a) { + return !a || !a.length + } + } + } + }, mb = "ng-valid", Kd = "ng-invalid", Va = "ng-pristine", Jb = "ng-dirty", Md = "ng-pending", Lb = new J("ngModel"), wg = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate", "$timeout", "$rootScope", "$q", "$interpolate", function (a, c, d, e, f, g, h, l, k, n) { + this.$modelValue = this.$viewValue = Number.NaN; + this.$$rawModelValue = t; + this.$validators = {}; + this.$asyncValidators = {}; + this.$parsers = []; + this.$formatters = []; + this.$viewChangeListeners = []; + this.$untouched = !0; + this.$touched = !1; + this.$pristine = !0; + this.$dirty = !1; + this.$valid = !0; + this.$invalid = !1; + this.$error = {}; + this.$$success = {}; + this.$pending = t; + this.$name = n(d.name || "", !1)(a); + var r = f(d.ngModel), s = r.assign, q = r, C = s, F = null, u, p = this; + this.$$setOptions = function (a) { + if ((p.$options = a) && a.getterSetter) { + var c = f(d.ngModel + "()"), g = f(d.ngModel + "($$$p)"); + q = function (a) { + var d = r(a); + z(d) && (d = c(a)); + return d + }; + C = function (a, c) { + z(r(a)) ? g(a, {$$$p: p.$modelValue}) : s(a, p.$modelValue) + } + } else if (!r.assign)throw Lb("nonassign", d.ngModel, ua(e)); + }; + this.$render = v; + this.$isEmpty = function (a) { + return A(a) || + "" === a || null === a || a !== a + }; + var K = e.inheritedData("$formController") || Ib, y = 0; + Hd({ + ctrl: this, $element: e, set: function (a, c) { + a[c] = !0 + }, unset: function (a, c) { + delete a[c] + }, parentForm: K, $animate: g + }); + this.$setPristine = function () { + p.$dirty = !1; + p.$pristine = !0; + g.removeClass(e, Jb); + g.addClass(e, Va) + }; + this.$setDirty = function () { + p.$dirty = !0; + p.$pristine = !1; + g.removeClass(e, Va); + g.addClass(e, Jb); + K.$setDirty() + }; + this.$setUntouched = function () { + p.$touched = !1; + p.$untouched = !0; + g.setClass(e, "ng-untouched", "ng-touched") + }; + this.$setTouched = + function () { + p.$touched = !0; + p.$untouched = !1; + g.setClass(e, "ng-touched", "ng-untouched") + }; + this.$rollbackViewValue = function () { + h.cancel(F); + p.$viewValue = p.$$lastCommittedViewValue; + p.$render() + }; + this.$validate = function () { + if (!V(p.$modelValue) || !isNaN(p.$modelValue)) { + var a = p.$$rawModelValue, c = p.$valid, d = p.$modelValue, e = p.$options && p.$options.allowInvalid; + p.$$runValidators(a, p.$$lastCommittedViewValue, function (f) { + e || c === f || (p.$modelValue = f ? a : t, p.$modelValue !== d && p.$$writeModelToScope()) + }) + } + }; + this.$$runValidators = + function (a, c, d) { + function e() { + var d = !0; + m(p.$validators, function (e, f) { + var h = e(a, c); + d = d && h; + g(f, h) + }); + return d ? !0 : (m(p.$asyncValidators, function (a, c) { + g(c, null) + }), !1) + } + + function f() { + var d = [], e = !0; + m(p.$asyncValidators, function (f, h) { + var k = f(a, c); + if (!k || !z(k.then))throw Lb("$asyncValidators", k); + g(h, t); + d.push(k.then(function () { + g(h, !0) + }, function (a) { + e = !1; + g(h, !1) + })) + }); + d.length ? k.all(d).then(function () { + h(e) + }, v) : h(!0) + } + + function g(a, c) { + l === y && p.$setValidity(a, c) + } + + function h(a) { + l === y && d(a) + } + + y++; + var l = y; + (function () { + var a = + p.$$parserName || "parse"; + if (u === t)g(a, null); else return u || (m(p.$validators, function (a, c) { + g(c, null) + }), m(p.$asyncValidators, function (a, c) { + g(c, null) + })), g(a, u), u; + return !0 + })() ? e() ? f() : h(!1) : h(!1) + }; + this.$commitViewValue = function () { + var a = p.$viewValue; + h.cancel(F); + if (p.$$lastCommittedViewValue !== a || "" === a && p.$$hasNativeValidators)p.$$lastCommittedViewValue = a, p.$pristine && this.$setDirty(), this.$$parseAndValidate() + }; + this.$$parseAndValidate = function () { + var c = p.$$lastCommittedViewValue; + if (u = A(c) ? t : !0)for (var d = + 0; d < p.$parsers.length; d++)if (c = p.$parsers[d](c), A(c)) { + u = !1; + break + } + V(p.$modelValue) && isNaN(p.$modelValue) && (p.$modelValue = q(a)); + var e = p.$modelValue, f = p.$options && p.$options.allowInvalid; + p.$$rawModelValue = c; + f && (p.$modelValue = c, p.$modelValue !== e && p.$$writeModelToScope()); + p.$$runValidators(c, p.$$lastCommittedViewValue, function (a) { + f || (p.$modelValue = a ? c : t, p.$modelValue !== e && p.$$writeModelToScope()) + }) + }; + this.$$writeModelToScope = function () { + C(a, p.$modelValue); + m(p.$viewChangeListeners, function (a) { + try { + a() + } catch (d) { + c(d) + } + }) + }; + this.$setViewValue = function (a, c) { + p.$viewValue = a; + p.$options && !p.$options.updateOnDefault || p.$$debounceViewValueCommit(c) + }; + this.$$debounceViewValueCommit = function (c) { + var d = 0, e = p.$options; + e && w(e.debounce) && (e = e.debounce, V(e) ? d = e : V(e[c]) ? d = e[c] : V(e["default"]) && (d = e["default"])); + h.cancel(F); + d ? F = h(function () { + p.$commitViewValue() + }, d) : l.$$phase ? p.$commitViewValue() : a.$apply(function () { + p.$commitViewValue() + }) + }; + a.$watch(function () { + var c = q(a); + if (c !== p.$modelValue && (p.$modelValue === p.$modelValue || c === c)) { + p.$modelValue = + p.$$rawModelValue = c; + u = t; + for (var d = p.$formatters, e = d.length, f = c; e--;)f = d[e](f); + p.$viewValue !== f && (p.$viewValue = p.$$lastCommittedViewValue = f, p.$render(), p.$$runValidators(c, f, v)) + } + return c + }) + }], Le = ["$rootScope", function (a) { + return { + restrict: "A", + require: ["ngModel", "^?form", "^?ngModelOptions"], + controller: wg, + priority: 1, + compile: function (c) { + c.addClass(Va).addClass("ng-untouched").addClass(mb); + return { + pre: function (a, c, f, g) { + var h = g[0], l = g[1] || Ib; + h.$$setOptions(g[2] && g[2].$options); + l.$addControl(h); + f.$observe("name", + function (a) { + h.$name !== a && l.$$renameControl(h, a) + }); + a.$on("$destroy", function () { + l.$removeControl(h) + }) + }, post: function (c, e, f, g) { + var h = g[0]; + if (h.$options && h.$options.updateOn)e.on(h.$options.updateOn, function (a) { + h.$$debounceViewValueCommit(a && a.type) + }); + e.on("blur", function (e) { + h.$touched || (a.$$phase ? c.$evalAsync(h.$setTouched) : c.$apply(h.$setTouched)) + }) + } + } + } + } + }], xg = /(\s+|^)default(\s+|$)/, Pe = function () { + return { + restrict: "A", controller: ["$scope", "$attrs", function (a, c) { + var d = this; + this.$options = fa(a.$eval(c.ngModelOptions)); + this.$options.updateOn !== t ? (this.$options.updateOnDefault = !1, this.$options.updateOn = R(this.$options.updateOn.replace(xg, function () { + d.$options.updateOnDefault = !0; + return " " + }))) : this.$options.updateOnDefault = !0 + }] + } + }, Be = Ma({ + terminal: !0, + priority: 1E3 + }), yg = J("ngOptions"), zg = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, + Je = ["$compile", "$parse", function (a, c) { + function d(a, d, e) { + function f(a, c, d, e, g) { + this.selectValue = a; + this.viewValue = c; + this.label = d; + this.group = e; + this.disabled = g + } + + function n(a) { + var c; + if (!q && Ea(a))c = a; else { + c = []; + for (var d in a)a.hasOwnProperty(d) && "$" !== d.charAt(0) && c.push(d) + } + return c + } + + var m = a.match(zg); + if (!m)throw yg("iexp", a, ua(d)); + var s = m[5] || m[7], q = m[6]; + a = / as /.test(m[0]) && m[1]; + var t = m[9]; + d = c(m[2] ? m[1] : s); + var v = a && c(a) || d, u = t && c(t), p = t ? function (a, c) { + return u(e, c) + } : function (a) { + return Ga(a) + }, w = function (a, + c) { + return p(a, z(a, c)) + }, y = c(m[2] || m[1]), A = c(m[3] || ""), B = c(m[4] || ""), N = c(m[8]), D = {}, z = q ? function (a, c) { + D[q] = c; + D[s] = a; + return D + } : function (a) { + D[s] = a; + return D + }; + return { + trackBy: t, getTrackByValue: w, getWatchables: c(N, function (a) { + var c = []; + a = a || []; + for (var d = n(a), f = d.length, g = 0; g < f; g++) { + var h = a === d ? g : d[g], k = z(a[h], h), h = p(a[h], k); + c.push(h); + if (m[2] || m[1])h = y(e, k), c.push(h); + m[4] && (k = B(e, k), c.push(k)) + } + return c + }), getOptions: function () { + for (var a = [], c = {}, d = N(e) || [], g = n(d), h = g.length, m = 0; m < h; m++) { + var r = d === g ? m : g[m], s = + z(d[r], r), q = v(e, s), r = p(q, s), u = y(e, s), x = A(e, s), s = B(e, s), q = new f(r, q, u, x, s); + a.push(q); + c[r] = q + } + return { + items: a, selectValueMap: c, getOptionFromViewValue: function (a) { + return c[w(a)] + }, getViewValueFromOption: function (a) { + return t ? ca.copy(a.viewValue) : a.viewValue + } + } + } + } + } + + var e = U.createElement("option"), f = U.createElement("optgroup"); + return { + restrict: "A", terminal: !0, require: ["select", "?ngModel"], link: function (c, h, l, k) { + function n(a, c) { + a.element = c; + c.disabled = a.disabled; + a.value !== c.value && (c.value = a.selectValue); + a.label !== + c.label && (c.label = a.label, c.textContent = a.label) + } + + function r(a, c, d, e) { + c && M(c.nodeName) === d ? d = c : (d = e.cloneNode(!1), c ? a.insertBefore(d, c) : a.appendChild(d)); + return d + } + + function s(a) { + for (var c; a;)c = a.nextSibling, Xb(a), a = c + } + + function q(a) { + var c = p && p[0], d = N && N[0]; + if (c || d)for (; a && (a === c || a === d);)a = a.nextSibling; + return a + } + + function t() { + var a = D && u.readValue(); + D = z.getOptions(); + var c = {}, d = h[0].firstChild; + B && h.prepend(p); + d = q(d); + D.items.forEach(function (a) { + var g, k; + a.group ? (g = c[a.group], g || (g = r(h[0], d, "optgroup", f), d = + g.nextSibling, g.label = a.group, g = c[a.group] = { + groupElement: g, + currentOptionElement: g.firstChild + }), k = r(g.groupElement, g.currentOptionElement, "option", e), n(a, k), g.currentOptionElement = k.nextSibling) : (k = r(h[0], d, "option", e), n(a, k), d = k.nextSibling) + }); + Object.keys(c).forEach(function (a) { + s(c[a].currentOptionElement) + }); + s(d); + v.$render(); + if (!v.$isEmpty(a)) { + var g = u.readValue(); + (z.trackBy ? ka(a, g) : a === g) || (v.$setViewValue(g), v.$render()) + } + } + + var v = k[1]; + if (v) { + var u = k[0]; + k = l.multiple; + for (var p, w = 0, A = h.children(), I = A.length; w < + I; w++)if ("" === A[w].value) { + p = A.eq(w); + break + } + var B = !!p, N = y(e.cloneNode(!1)); + N.val("?"); + var D, z = d(l.ngOptions, h, c); + k ? (v.$isEmpty = function (a) { + return !a || 0 === a.length + }, u.writeValue = function (a) { + D.items.forEach(function (a) { + a.element.selected = !1 + }); + a && a.forEach(function (a) { + (a = D.getOptionFromViewValue(a)) && !a.disabled && (a.element.selected = !0) + }) + }, u.readValue = function () { + var a = h.val() || [], c = []; + m(a, function (a) { + a = D.selectValueMap[a]; + a.disabled || c.push(D.getViewValueFromOption(a)) + }); + return c + }, z.trackBy && c.$watchCollection(function () { + if (G(v.$viewValue))return v.$viewValue.map(function (a) { + return z.getTrackByValue(a) + }) + }, + function () { + v.$render() + })) : (u.writeValue = function (a) { + var c = D.getOptionFromViewValue(a); + c && !c.disabled ? h[0].value !== c.selectValue && (N.remove(), B || p.remove(), h[0].value = c.selectValue, c.element.selected = !0, c.element.setAttribute("selected", "selected")) : null === a || B ? (N.remove(), B || h.prepend(p), h.val(""), p.prop("selected", !0), p.attr("selected", !0)) : (B || p.remove(), h.prepend(N), h.val("?"), N.prop("selected", !0), N.attr("selected", !0)) + }, u.readValue = function () { + var a = D.selectValueMap[h.val()]; + return a && !a.disabled ? + (B || p.remove(), N.remove(), D.getViewValueFromOption(a)) : null + }, z.trackBy && c.$watch(function () { + return z.getTrackByValue(v.$viewValue) + }, function () { + v.$render() + })); + B ? (p.remove(), a(p)(c), p.removeClass("ng-scope")) : p = y(e.cloneNode(!1)); + t(); + c.$watchCollection(z.getWatchables, t) + } + } + } + }], Ce = ["$locale", "$interpolate", "$log", function (a, c, d) { + var e = /{}/g, f = /^when(Minus)?(.+)$/; + return { + link: function (g, h, l) { + function k(a) { + h.text(a || "") + } + + var n = l.count, r = l.$attr.when && h.attr(l.$attr.when), s = l.offset || 0, q = g.$eval(r) || {}, t = + {}, w = c.startSymbol(), u = c.endSymbol(), p = w + n + "-" + s + u, y = ca.noop, z; + m(l, function (a, c) { + var d = f.exec(c); + d && (d = (d[1] ? "-" : "") + M(d[2]), q[d] = h.attr(l.$attr[c])) + }); + m(q, function (a, d) { + t[d] = c(a.replace(e, p)) + }); + g.$watch(n, function (c) { + var e = parseFloat(c), f = isNaN(e); + f || e in q || (e = a.pluralCat(e - s)); + e === z || f && V(z) && isNaN(z) || (y(), f = t[e], A(f) ? (null != c && d.debug("ngPluralize: no rule defined for '" + e + "' in " + r), y = v, k()) : y = g.$watch(f, k), z = e) + }) + } + } + }], De = ["$parse", "$animate", function (a, c) { + var d = J("ngRepeat"), e = function (a, c, + d, e, k, m, r) { + a[d] = e; + k && (a[k] = m); + a.$index = c; + a.$first = 0 === c; + a.$last = c === r - 1; + a.$middle = !(a.$first || a.$last); + a.$odd = !(a.$even = 0 === (c & 1)) + }; + return { + restrict: "A", + multiElement: !0, + transclude: "element", + priority: 1E3, + terminal: !0, + $$tlb: !0, + compile: function (f, g) { + var h = g.ngRepeat, l = U.createComment(" end ngRepeat: " + h + " "), k = h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); + if (!k)throw d("iexp", h); + var n = k[1], r = k[2], s = k[3], q = k[4], k = n.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/); + if (!k)throw d("iidexp", n); + var v = k[3] || k[1], w = k[2]; + if (s && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(s) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(s)))throw d("badident", s); + var u, p, z, A, I = {$id: Ga}; + q ? u = a(q) : (z = function (a, c) { + return Ga(c) + }, A = function (a) { + return a + }); + return function (a, f, g, k, n) { + u && (p = function (c, d, e) { + w && (I[w] = c); + I[v] = d; + I.$index = e; + return u(a, I) + }); + var q = ga(); + a.$watchCollection(r, function (g) { + var k, r, u = f[0], x, D = ga(), I, H, L, G, M, J, O; + s && (a[s] = g); + if (Ea(g))M = + g, r = p || z; else for (O in r = p || A, M = [], g)g.hasOwnProperty(O) && "$" !== O.charAt(0) && M.push(O); + I = M.length; + O = Array(I); + for (k = 0; k < I; k++)if (H = g === M ? k : M[k], L = g[H], G = r(H, L, k), q[G])J = q[G], delete q[G], D[G] = J, O[k] = J; else { + if (D[G])throw m(O, function (a) { + a && a.scope && (q[a.id] = a) + }), d("dupes", h, G, L); + O[k] = {id: G, scope: t, clone: t}; + D[G] = !0 + } + for (x in q) { + J = q[x]; + G = qb(J.clone); + c.leave(G); + if (G[0].parentNode)for (k = 0, r = G.length; k < r; k++)G[k].$$NG_REMOVED = !0; + J.scope.$destroy() + } + for (k = 0; k < I; k++)if (H = g === M ? k : M[k], L = g[H], J = O[k], J.scope) { + x = + u; + do x = x.nextSibling; while (x && x.$$NG_REMOVED); + J.clone[0] != x && c.move(qb(J.clone), null, y(u)); + u = J.clone[J.clone.length - 1]; + e(J.scope, k, v, L, w, H, I) + } else n(function (a, d) { + J.scope = d; + var f = l.cloneNode(!1); + a[a.length++] = f; + c.enter(a, null, y(u)); + u = f; + J.clone = a; + D[J.id] = J; + e(J.scope, k, v, L, w, H, I) + }); + q = D + }) + } + } + } + }], Ee = ["$animate", function (a) { + return { + restrict: "A", multiElement: !0, link: function (c, d, e) { + c.$watch(e.ngShow, function (c) { + a[c ? "removeClass" : "addClass"](d, "ng-hide", {tempClasses: "ng-hide-animate"}) + }) + } + } + }], xe = ["$animate", + function (a) { + return { + restrict: "A", multiElement: !0, link: function (c, d, e) { + c.$watch(e.ngHide, function (c) { + a[c ? "addClass" : "removeClass"](d, "ng-hide", {tempClasses: "ng-hide-animate"}) + }) + } + } + }], Fe = Ma(function (a, c, d) { + a.$watch(d.ngStyle, function (a, d) { + d && a !== d && m(d, function (a, d) { + c.css(d, "") + }); + a && c.css(a) + }, !0) + }), Ge = ["$animate", function (a) { + return { + require: "ngSwitch", controller: ["$scope", function () { + this.cases = {} + }], link: function (c, d, e, f) { + var g = [], h = [], l = [], k = [], n = function (a, c) { + return function () { + a.splice(c, 1) + } + }; + c.$watch(e.ngSwitch || + e.on, function (c) { + var d, e; + d = 0; + for (e = l.length; d < e; ++d)a.cancel(l[d]); + d = l.length = 0; + for (e = k.length; d < e; ++d) { + var q = qb(h[d].clone); + k[d].$destroy(); + (l[d] = a.leave(q)).then(n(l, d)) + } + h.length = 0; + k.length = 0; + (g = f.cases["!" + c] || f.cases["?"]) && m(g, function (c) { + c.transclude(function (d, e) { + k.push(e); + var f = c.element; + d[d.length++] = U.createComment(" end ngSwitchWhen: "); + h.push({clone: d}); + a.enter(d, f.parent(), f) + }) + }) + }) + } + } + }], He = Ma({ + transclude: "element", priority: 1200, require: "^ngSwitch", multiElement: !0, link: function (a, c, d, e, + f) { + e.cases["!" + d.ngSwitchWhen] = e.cases["!" + d.ngSwitchWhen] || []; + e.cases["!" + d.ngSwitchWhen].push({transclude: f, element: c}) + } + }), Ie = Ma({ + transclude: "element", + priority: 1200, + require: "^ngSwitch", + multiElement: !0, + link: function (a, c, d, e, f) { + e.cases["?"] = e.cases["?"] || []; + e.cases["?"].push({transclude: f, element: c}) + } + }), Ke = Ma({ + restrict: "EAC", link: function (a, c, d, e, f) { + if (!f)throw J("ngTransclude")("orphan", ua(c)); + f(function (a) { + c.empty(); + c.append(a) + }) + } + }), ke = ["$templateCache", function (a) { + return { + restrict: "E", terminal: !0, + compile: function (c, d) { + "text/ng-template" == d.type && a.put(d.id, c[0].text) + } + } + }], Ag = {$setViewValue: v, $render: v}, Bg = ["$element", "$scope", "$attrs", function (a, c, d) { + var e = this, f = new Sa; + e.ngModelCtrl = Ag; + e.unknownOption = y(U.createElement("option")); + e.renderUnknownOption = function (c) { + c = "? " + Ga(c) + " ?"; + e.unknownOption.val(c); + a.prepend(e.unknownOption); + a.val(c) + }; + c.$on("$destroy", function () { + e.renderUnknownOption = v + }); + e.removeUnknownOption = function () { + e.unknownOption.parent() && e.unknownOption.remove() + }; + e.readValue = + function () { + e.removeUnknownOption(); + return a.val() + }; + e.writeValue = function (c) { + e.hasOption(c) ? (e.removeUnknownOption(), a.val(c), "" === c && e.emptyOption.prop("selected", !0)) : null == c && e.emptyOption ? (e.removeUnknownOption(), a.val("")) : e.renderUnknownOption(c) + }; + e.addOption = function (a, c) { + Ra(a, '"option value"'); + "" === a && (e.emptyOption = c); + var d = f.get(a) || 0; + f.put(a, d + 1) + }; + e.removeOption = function (a) { + var c = f.get(a); + c && (1 === c ? (f.remove(a), "" === a && (e.emptyOption = t)) : f.put(a, c - 1)) + }; + e.hasOption = function (a) { + return !!f.get(a) + } + }], + le = function () { + return { + restrict: "E", require: ["select", "?ngModel"], controller: Bg, link: function (a, c, d, e) { + var f = e[1]; + if (f) { + var g = e[0]; + g.ngModelCtrl = f; + f.$render = function () { + g.writeValue(f.$viewValue) + }; + c.on("change", function () { + a.$apply(function () { + f.$setViewValue(g.readValue()) + }) + }); + if (d.multiple) { + g.readValue = function () { + var a = []; + m(c.find("option"), function (c) { + c.selected && a.push(c.value) + }); + return a + }; + g.writeValue = function (a) { + var d = new Sa(a); + m(c.find("option"), function (a) { + a.selected = w(d.get(a.value)) + }) + }; + var h, + l = NaN; + a.$watch(function () { + l !== f.$viewValue || ka(h, f.$viewValue) || (h = ia(f.$viewValue), f.$render()); + l = f.$viewValue + }); + f.$isEmpty = function (a) { + return !a || 0 === a.length + } + } + } + } + } + }, ne = ["$interpolate", function (a) { + function c(a) { + a[0].hasAttribute("selected") && (a[0].selected = !0) + } + + return { + restrict: "E", priority: 100, compile: function (d, e) { + if (A(e.value)) { + var f = a(d.text(), !0); + f || e.$set("value", d.text()) + } + return function (a, d, e) { + var k = d.parent(), m = k.data("$selectController") || k.parent().data("$selectController"); + m && m.ngModelCtrl && + (f ? a.$watch(f, function (a, f) { + e.$set("value", a); + f !== a && m.removeOption(f); + m.addOption(a, d); + m.ngModelCtrl.$render(); + c(d) + }) : (m.addOption(e.value, d), m.ngModelCtrl.$render(), c(d)), d.on("$destroy", function () { + m.removeOption(e.value); + m.ngModelCtrl.$render() + })) + } + } + } + }], me = ra({restrict: "E", terminal: !1}), Hc = function () { + return { + restrict: "A", require: "?ngModel", link: function (a, c, d, e) { + e && (d.required = !0, e.$validators.required = function (a, c) { + return !d.required || !e.$isEmpty(c) + }, d.$observe("required", function () { + e.$validate() + })) + } + } + }, + Gc = function () { + return { + restrict: "A", require: "?ngModel", link: function (a, c, d, e) { + if (e) { + var f, g = d.ngPattern || d.pattern; + d.$observe("pattern", function (a) { + L(a) && 0 < a.length && (a = new RegExp("^" + a + "$")); + if (a && !a.test)throw J("ngPattern")("noregexp", g, a, ua(c)); + f = a || t; + e.$validate() + }); + e.$validators.pattern = function (a) { + return e.$isEmpty(a) || A(f) || f.test(a) + } + } + } + } + }, Jc = function () { + return { + restrict: "A", require: "?ngModel", link: function (a, c, d, e) { + if (e) { + var f = -1; + d.$observe("maxlength", function (a) { + a = W(a); + f = isNaN(a) ? -1 : a; + e.$validate() + }); + e.$validators.maxlength = function (a, c) { + return 0 > f || e.$isEmpty(c) || c.length <= f + } + } + } + } + }, Ic = function () { + return { + restrict: "A", require: "?ngModel", link: function (a, c, d, e) { + if (e) { + var f = 0; + d.$observe("minlength", function (a) { + f = W(a) || 0; + e.$validate() + }); + e.$validators.minlength = function (a, c) { + return e.$isEmpty(c) || c.length >= f + } + } + } + } + }; + O.angular.bootstrap ? console.log("WARNING: Tried to load angular more than once.") : (ce(), ee(ca), y(U).ready(function () { + Zd(U, Ac) + })) +})(window, document); +!window.angular.$$csp() && window.angular.element(document.head).prepend(''); //# sourceMappingURL=angular.min.js.map diff --git a/apollo-portal/src/main/resources/static/vendor/angular/bootbox.min.js b/apollo-portal/src/main/resources/static/vendor/angular/bootbox.min.js index 4d8d8cb46..79e37a71b 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/bootbox.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/bootbox.min.js @@ -3,4 +3,265 @@ * * http://bootboxjs.com/license.txt */ -!function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.bootbox=b(a.jQuery)}(this,function a(b,c){"use strict";function d(a){var b=q[o.locale];return b?b[a]:q.en[a]}function e(a,c,d){a.stopPropagation(),a.preventDefault();var e=b.isFunction(d)&&d.call(c,a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},o,a),a.buttons||(a.buttons={}),c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-success":"btn-danger")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c,d){var e={className:"bootbox-"+a,buttons:l.apply(null,b)};return m(j(e,d,c),b)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var n={dialog:"",header:"",footer:"",closeButton:"",form:"
    ",inputs:{text:"",textarea:"",email:"",select:"",checkbox:"
    ",date:"",time:"",number:"",password:""}},o={locale:"zh_CN",backdrop:"static",animate:!0,className:null,closeButton:!0,show:!0,container:"body"},p={};p.alert=function(){var a;if(a=k("alert",["ok"],["message","callback"],arguments),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback.call(this):!0},p.dialog(a)},p.confirm=function(){var a;if(a=k("confirm",["cancel","confirm"],["message","callback"],arguments),a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,!1)},a.buttons.confirm.callback=function(){return a.callback.call(this,!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return p.dialog(a)},p.prompt=function(){var a,d,e,f,h,i,k;if(f=b(n.form),d={className:"bootbox-prompt",buttons:l("cancel","confirm"),value:"",inputType:"text"},a=m(j(d,arguments,["title","callback"]),["cancel","confirm"]),i=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback.call(this,null)},a.buttons.confirm.callback=function(){var c;switch(a.inputType){case"text":case"textarea":case"email":case"select":case"date":case"time":case"number":case"password":c=h.val();break;case"checkbox":var d=h.find("input:checked");c=[],g(d,function(a,d){c.push(b(d).val())})}return a.callback.call(this,c)},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");if(!n.inputs[a.inputType])throw new Error("invalid prompt type");switch(h=b(n.inputs[a.inputType]),a.inputType){case"text":case"textarea":case"email":case"date":case"time":case"number":case"password":h.val(a.value);break;case"select":var o={};if(k=a.inputOptions||[],!b.isArray(k))throw new Error("Please pass an array of input options");if(!k.length)throw new Error("prompt with select requires options");g(k,function(a,d){var e=h;if(d.value===c||d.text===c)throw new Error("given options in wrong format");d.group&&(o[d.group]||(o[d.group]=b("").attr("label",d.group)),e=o[d.group]),e.append("")}),g(o,function(a,b){h.append(b)}),h.val(a.value);break;case"checkbox":var q=b.isArray(a.value)?a.value:[a.value];if(k=a.inputOptions||[],!k.length)throw new Error("prompt with checkbox requires options");if(!k[0].value||!k[0].text)throw new Error("given options in wrong format");h=b("
    "),g(k,function(c,d){var e=b(n.inputs[a.inputType]);e.find("input").attr("value",d.value),e.find("label").append(d.text),g(q,function(a,b){b===d.value&&e.find("input").prop("checked",!0)}),h.append(e)})}return a.placeholder&&h.attr("placeholder",a.placeholder),a.pattern&&h.attr("pattern",a.pattern),a.maxlength&&h.attr("maxlength",a.maxlength),f.append(h),f.on("submit",function(a){a.preventDefault(),a.stopPropagation(),e.find(".btn-primary").click()}),e=p.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){h.focus()}),i===!0&&e.modal("show"),e},p.dialog=function(a){a=h(a);var d=b(n.dialog),f=d.find(".modal-dialog"),i=d.find(".modal-body"),j=a.buttons,k="",l={onEscape:a.onEscape};if(b.fn.modal===c)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details.");if(g(j,function(a,b){k+=" ",l[a]=b.callback}),i.find(".bootbox-body").html(a.message),a.animate===!0&&d.addClass("fade"),a.className&&d.addClass(a.className),"large"===a.size?f.addClass("modal-lg"):"small"===a.size&&f.addClass("modal-sm"),a.title&&i.before(n.header),a.closeButton){var m=b(n.closeButton);a.title?d.find(".modal-header").prepend(m):m.css("margin-top","-10px").prependTo(i)}return a.title&&d.find(".modal-title").html(a.title),k.length&&(i.after(n.footer),d.find(".modal-footer").html(k)),d.on("hidden.bs.modal",function(a){a.target===this&&d.remove()}),d.on("shown.bs.modal",function(){d.find(".btn-primary:first").focus()}),"static"!==a.backdrop&&d.on("click.dismiss.bs.modal",function(a){d.children(".modal-backdrop").length&&(a.currentTarget=d.children(".modal-backdrop").get(0)),a.target===a.currentTarget&&d.trigger("escape.close.bb")}),d.on("escape.close.bb",function(a){l.onEscape&&e(a,d,l.onEscape)}),d.on("click",".modal-footer button",function(a){var c=b(this).data("bb-handler");e(a,d,l[c])}),d.on("click",".bootbox-close-button",function(a){e(a,d,l.onEscape)}),d.on("keyup",function(a){27===a.which&&d.trigger("escape.close.bb")}),b(a.container).append(d),d.modal({backdrop:a.backdrop?"static":!1,keyboard:!1,show:!1}),a.show&&d.modal("show"),d},p.setDefaults=function(){var a={};2===arguments.length?a[arguments[0]]=arguments[1]:a=arguments[0],b.extend(o,a)},p.hideAll=function(){return b(".bootbox").modal("hide"),p};var q={bg_BG:{OK:"Ок",CANCEL:"Отказ",CONFIRM:"Потвърждавам"},br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},cs:{OK:"OK",CANCEL:"Zrušit",CONFIRM:"Potvrdit"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},el:{OK:"Εντάξει",CANCEL:"Ακύρωση",CONFIRM:"Επιβεβαίωση"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},et:{OK:"OK",CANCEL:"Katkesta",CONFIRM:"OK"},fa:{OK:"قبول",CANCEL:"لغو",CONFIRM:"تایید"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},he:{OK:"אישור",CANCEL:"ביטול",CONFIRM:"אישור"},hu:{OK:"OK",CANCEL:"Mégsem",CONFIRM:"Megerősít"},hr:{OK:"OK",CANCEL:"Odustani",CONFIRM:"Potvrdi"},id:{OK:"OK",CANCEL:"Batal",CONFIRM:"OK"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},ja:{OK:"OK",CANCEL:"キャンセル",CONFIRM:"確認"},lt:{OK:"Gerai",CANCEL:"Atšaukti",CONFIRM:"Patvirtinti"},lv:{OK:"Labi",CANCEL:"Atcelt",CONFIRM:"Apstiprināt"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},no:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},pt:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Confirmar"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},sq:{OK:"OK",CANCEL:"Anulo",CONFIRM:"Prano"},sv:{OK:"OK",CANCEL:"Avbryt",CONFIRM:"OK"},th:{OK:"ตกลง",CANCEL:"ยกเลิก",CONFIRM:"ยืนยัน"},tr:{OK:"Tamam",CANCEL:"İptal",CONFIRM:"Onayla"},zh_CN:{OK:"确定",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return p.addLocale=function(a,c){return b.each(["OK","CANCEL","CONFIRM"],function(a,b){if(!c[b])throw new Error("Please supply a translation for '"+b+"'")}),q[a]={OK:c.OK,CANCEL:c.CANCEL,CONFIRM:c.CONFIRM},p},p.removeLocale=function(a){return delete q[a],p},p.setLocale=function(a){return p.setDefaults("locale",a)},p.init=function(c){return a(c||b)},p}); \ No newline at end of file +!function (a, b) { + "use strict"; + "function" == typeof define && define.amd ? define(["jquery"], b) : "object" == typeof exports ? module.exports = b(require("jquery")) : a.bootbox = b(a.jQuery) +}(this, function a(b, c) { + "use strict"; + function d(a) { + var b = q[o.locale]; + return b ? b[a] : q.en[a] + } + + function e(a, c, d) { + a.stopPropagation(), a.preventDefault(); + var e = b.isFunction(d) && d.call(c, a) === !1; + e || c.modal("hide") + } + + function f(a) { + var b, c = 0; + for (b in a)c++; + return c + } + + function g(a, c) { + var d = 0; + b.each(a, function (a, b) { + c(a, b, d++) + }) + } + + function h(a) { + var c, d; + if ("object" != typeof a)throw new Error("Please supply an object of options"); + if (!a.message)throw new Error("Please specify a message"); + return a = b.extend({}, o, a), a.buttons || (a.buttons = {}), c = a.buttons, d = f(c), g(c, function (a, e, f) { + if (b.isFunction(e) && (e = c[a] = {callback: e}), "object" !== b.type(e))throw new Error("button with key " + a + " must be an object"); + e.label || (e.label = a), e.className || (e.className = 2 >= d && f === d - 1 ? "btn-success" : "btn-danger") + }), a + } + + function i(a, b) { + var c = a.length, d = {}; + if (1 > c || c > 2)throw new Error("Invalid argument length"); + return 2 === c || "string" == typeof a[0] ? (d[b[0]] = a[0], d[b[1]] = a[1]) : d = a[0], d + } + + function j(a, c, d) { + return b.extend(!0, {}, a, i(c, d)) + } + + function k(a, b, c, d) { + var e = {className: "bootbox-" + a, buttons: l.apply(null, b)}; + return m(j(e, d, c), b) + } + + function l() { + for (var a = {}, b = 0, c = arguments.length; c > b; b++) { + var e = arguments[b], f = e.toLowerCase(), g = e.toUpperCase(); + a[f] = {label: d(g)} + } + return a + } + + function m(a, b) { + var d = {}; + return g(b, function (a, b) { + d[b] = !0 + }), g(a.buttons, function (a) { + if (d[a] === c)throw new Error("button key " + a + " is not allowed (options are " + b.join("\n") + ")") + }), a + } + + var n = { + dialog: "", + header: "", + footer: "", + closeButton: "", + form: "
    ", + inputs: { + text: "", + textarea: "", + email: "", + select: "", + checkbox: "
    ", + date: "", + time: "", + number: "", + password: "" + } + }, o = { + locale: "zh_CN", + backdrop: "static", + animate: !0, + className: null, + closeButton: !0, + show: !0, + container: "body" + }, p = {}; + p.alert = function () { + var a; + if (a = k("alert", ["ok"], ["message", "callback"], arguments), a.callback && !b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided"); + return a.buttons.ok.callback = a.onEscape = function () { + return b.isFunction(a.callback) ? a.callback.call(this) : !0 + }, p.dialog(a) + }, p.confirm = function () { + var a; + if (a = k("confirm", ["cancel", "confirm"], ["message", "callback"], arguments), a.buttons.cancel.callback = a.onEscape = function () { + return a.callback.call(this, !1) + }, a.buttons.confirm.callback = function () { + return a.callback.call(this, !0) + }, !b.isFunction(a.callback))throw new Error("confirm requires a callback"); + return p.dialog(a) + }, p.prompt = function () { + var a, d, e, f, h, i, k; + if (f = b(n.form), d = { + className: "bootbox-prompt", + buttons: l("cancel", "confirm"), + value: "", + inputType: "text" + }, a = m(j(d, arguments, ["title", "callback"]), ["cancel", "confirm"]), i = a.show === c ? !0 : a.show, a.message = f, a.buttons.cancel.callback = a.onEscape = function () { + return a.callback.call(this, null) + }, a.buttons.confirm.callback = function () { + var c; + switch (a.inputType) { + case"text": + case"textarea": + case"email": + case"select": + case"date": + case"time": + case"number": + case"password": + c = h.val(); + break; + case"checkbox": + var d = h.find("input:checked"); + c = [], g(d, function (a, d) { + c.push(b(d).val()) + }) + } + return a.callback.call(this, c) + }, a.show = !1, !a.title)throw new Error("prompt requires a title"); + if (!b.isFunction(a.callback))throw new Error("prompt requires a callback"); + if (!n.inputs[a.inputType])throw new Error("invalid prompt type"); + switch (h = b(n.inputs[a.inputType]), a.inputType) { + case"text": + case"textarea": + case"email": + case"date": + case"time": + case"number": + case"password": + h.val(a.value); + break; + case"select": + var o = {}; + if (k = a.inputOptions || [], !b.isArray(k))throw new Error("Please pass an array of input options"); + if (!k.length)throw new Error("prompt with select requires options"); + g(k, function (a, d) { + var e = h; + if (d.value === c || d.text === c)throw new Error("given options in wrong format"); + d.group && (o[d.group] || (o[d.group] = b("").attr("label", d.group)), e = o[d.group]), e.append("") + }), g(o, function (a, b) { + h.append(b) + }), h.val(a.value); + break; + case"checkbox": + var q = b.isArray(a.value) ? a.value : [a.value]; + if (k = a.inputOptions || [], !k.length)throw new Error("prompt with checkbox requires options"); + if (!k[0].value || !k[0].text)throw new Error("given options in wrong format"); + h = b("
    "), g(k, function (c, d) { + var e = b(n.inputs[a.inputType]); + e.find("input").attr("value", d.value), e.find("label").append(d.text), g(q, function (a, b) { + b === d.value && e.find("input").prop("checked", !0) + }), h.append(e) + }) + } + return a.placeholder && h.attr("placeholder", a.placeholder), a.pattern && h.attr("pattern", a.pattern), a.maxlength && h.attr("maxlength", a.maxlength), f.append(h), f.on("submit", function (a) { + a.preventDefault(), a.stopPropagation(), e.find(".btn-primary").click() + }), e = p.dialog(a), e.off("shown.bs.modal"), e.on("shown.bs.modal", function () { + h.focus() + }), i === !0 && e.modal("show"), e + }, p.dialog = function (a) { + a = h(a); + var d = b(n.dialog), f = d.find(".modal-dialog"), i = d.find(".modal-body"), j = a.buttons, k = "", l = {onEscape: a.onEscape}; + if (b.fn.modal === c)throw new Error("$.fn.modal is not defined; please double check you have included the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ for more details."); + if (g(j, function (a, b) { + k += " ", l[a] = b.callback + }), i.find(".bootbox-body").html(a.message), a.animate === !0 && d.addClass("fade"), a.className && d.addClass(a.className), "large" === a.size ? f.addClass("modal-lg") : "small" === a.size && f.addClass("modal-sm"), a.title && i.before(n.header), a.closeButton) { + var m = b(n.closeButton); + a.title ? d.find(".modal-header").prepend(m) : m.css("margin-top", "-10px").prependTo(i) + } + return a.title && d.find(".modal-title").html(a.title), k.length && (i.after(n.footer), d.find(".modal-footer").html(k)), d.on("hidden.bs.modal", function (a) { + a.target === this && d.remove() + }), d.on("shown.bs.modal", function () { + d.find(".btn-primary:first").focus() + }), "static" !== a.backdrop && d.on("click.dismiss.bs.modal", function (a) { + d.children(".modal-backdrop").length && (a.currentTarget = d.children(".modal-backdrop").get(0)), a.target === a.currentTarget && d.trigger("escape.close.bb") + }), d.on("escape.close.bb", function (a) { + l.onEscape && e(a, d, l.onEscape) + }), d.on("click", ".modal-footer button", function (a) { + var c = b(this).data("bb-handler"); + e(a, d, l[c]) + }), d.on("click", ".bootbox-close-button", function (a) { + e(a, d, l.onEscape) + }), d.on("keyup", function (a) { + 27 === a.which && d.trigger("escape.close.bb") + }), b(a.container).append(d), d.modal({ + backdrop: a.backdrop ? "static" : !1, + keyboard: !1, + show: !1 + }), a.show && d.modal("show"), d + }, p.setDefaults = function () { + var a = {}; + 2 === arguments.length ? a[arguments[0]] = arguments[1] : a = arguments[0], b.extend(o, a) + }, p.hideAll = function () { + return b(".bootbox").modal("hide"), p + }; + var q = { + bg_BG: {OK: "Ок", CANCEL: "Отказ", CONFIRM: "Потвърждавам"}, + br: {OK: "OK", CANCEL: "Cancelar", CONFIRM: "Sim"}, + cs: {OK: "OK", CANCEL: "Zrušit", CONFIRM: "Potvrdit"}, + da: {OK: "OK", CANCEL: "Annuller", CONFIRM: "Accepter"}, + de: {OK: "OK", CANCEL: "Abbrechen", CONFIRM: "Akzeptieren"}, + el: {OK: "Εντάξει", CANCEL: "Ακύρωση", CONFIRM: "Επιβεβαίωση"}, + en: {OK: "OK", CANCEL: "Cancel", CONFIRM: "OK"}, + es: {OK: "OK", CANCEL: "Cancelar", CONFIRM: "Aceptar"}, + et: {OK: "OK", CANCEL: "Katkesta", CONFIRM: "OK"}, + fa: {OK: "قبول", CANCEL: "لغو", CONFIRM: "تایید"}, + fi: {OK: "OK", CANCEL: "Peruuta", CONFIRM: "OK"}, + fr: {OK: "OK", CANCEL: "Annuler", CONFIRM: "D'accord"}, + he: {OK: "אישור", CANCEL: "ביטול", CONFIRM: "אישור"}, + hu: {OK: "OK", CANCEL: "Mégsem", CONFIRM: "Megerősít"}, + hr: {OK: "OK", CANCEL: "Odustani", CONFIRM: "Potvrdi"}, + id: {OK: "OK", CANCEL: "Batal", CONFIRM: "OK"}, + it: {OK: "OK", CANCEL: "Annulla", CONFIRM: "Conferma"}, + ja: {OK: "OK", CANCEL: "キャンセル", CONFIRM: "確認"}, + lt: {OK: "Gerai", CANCEL: "Atšaukti", CONFIRM: "Patvirtinti"}, + lv: {OK: "Labi", CANCEL: "Atcelt", CONFIRM: "Apstiprināt"}, + nl: {OK: "OK", CANCEL: "Annuleren", CONFIRM: "Accepteren"}, + no: {OK: "OK", CANCEL: "Avbryt", CONFIRM: "OK"}, + pl: {OK: "OK", CANCEL: "Anuluj", CONFIRM: "Potwierdź"}, + pt: {OK: "OK", CANCEL: "Cancelar", CONFIRM: "Confirmar"}, + ru: {OK: "OK", CANCEL: "Отмена", CONFIRM: "Применить"}, + sq: {OK: "OK", CANCEL: "Anulo", CONFIRM: "Prano"}, + sv: {OK: "OK", CANCEL: "Avbryt", CONFIRM: "OK"}, + th: {OK: "ตกลง", CANCEL: "ยกเลิก", CONFIRM: "ยืนยัน"}, + tr: {OK: "Tamam", CANCEL: "İptal", CONFIRM: "Onayla"}, + zh_CN: {OK: "确定", CANCEL: "取消", CONFIRM: "确认"}, + zh_TW: {OK: "OK", CANCEL: "取消", CONFIRM: "確認"} + }; + return p.addLocale = function (a, c) { + return b.each(["OK", "CANCEL", "CONFIRM"], function (a, b) { + if (!c[b])throw new Error("Please supply a translation for '" + b + "'") + }), q[a] = {OK: c.OK, CANCEL: c.CANCEL, CONFIRM: c.CONFIRM}, p + }, p.removeLocale = function (a) { + return delete q[a], p + }, p.setLocale = function (a) { + return p.setDefaults("locale", a) + }, p.init = function (c) { + return a(c || b) + }, p +}); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.css b/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.css index 0f9f10677..bae538c51 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.css +++ b/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.css @@ -1 +1,123 @@ -#loading-bar,#loading-bar-spinner{pointer-events:none;-webkit-pointer-events:none;-webkit-transition:350ms linear all;-moz-transition:350ms linear all;-o-transition:350ms linear all;transition:350ms linear all}#loading-bar-spinner.ng-enter,#loading-bar-spinner.ng-leave.ng-leave-active,#loading-bar.ng-enter,#loading-bar.ng-leave.ng-leave-active{opacity:0}#loading-bar-spinner.ng-enter.ng-enter-active,#loading-bar-spinner.ng-leave,#loading-bar.ng-enter.ng-enter-active,#loading-bar.ng-leave{opacity:1}#loading-bar .bar{-webkit-transition:width 350ms;-moz-transition:width 350ms;-o-transition:width 350ms;transition:width 350ms;background:#29d;position:fixed;z-index:10002;top:0;left:0;width:100%;height:2px;border-bottom-right-radius:1px;border-top-right-radius:1px}#loading-bar .peg{position:absolute;width:70px;right:0;top:0;height:2px;opacity:.45;-moz-box-shadow:#29d 1px 0 6px 1px;-ms-box-shadow:#29d 1px 0 6px 1px;-webkit-box-shadow:#29d 1px 0 6px 1px;box-shadow:#29d 1px 0 6px 1px;-moz-border-radius:100%;-webkit-border-radius:100%;border-radius:100%}#loading-bar-spinner{display:block;position:fixed;z-index:10002;top:10px;left:10px}#loading-bar-spinner .spinner-icon{width:14px;height:14px;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:loading-bar-spinner 400ms linear infinite;-moz-animation:loading-bar-spinner 400ms linear infinite;-ms-animation:loading-bar-spinner 400ms linear infinite;-o-animation:loading-bar-spinner 400ms linear infinite;animation:loading-bar-spinner 400ms linear infinite}@-webkit-keyframes loading-bar-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes loading-bar-spinner{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes loading-bar-spinner{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes loading-bar-spinner{0%{-ms-transform:rotate(0);transform:rotate(0)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-bar-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}} \ No newline at end of file +#loading-bar, #loading-bar-spinner { + pointer-events: none; + -webkit-pointer-events: none; + -webkit-transition: 350ms linear all; + -moz-transition: 350ms linear all; + -o-transition: 350ms linear all; + transition: 350ms linear all +} + +#loading-bar-spinner.ng-enter, #loading-bar-spinner.ng-leave.ng-leave-active, #loading-bar.ng-enter, #loading-bar.ng-leave.ng-leave-active { + opacity: 0 +} + +#loading-bar-spinner.ng-enter.ng-enter-active, #loading-bar-spinner.ng-leave, #loading-bar.ng-enter.ng-enter-active, #loading-bar.ng-leave { + opacity: 1 +} + +#loading-bar .bar { + -webkit-transition: width 350ms; + -moz-transition: width 350ms; + -o-transition: width 350ms; + transition: width 350ms; + background: #29d; + position: fixed; + z-index: 10002; + top: 0; + left: 0; + width: 100%; + height: 2px; + border-bottom-right-radius: 1px; + border-top-right-radius: 1px +} + +#loading-bar .peg { + position: absolute; + width: 70px; + right: 0; + top: 0; + height: 2px; + opacity: .45; + -moz-box-shadow: #29d 1px 0 6px 1px; + -ms-box-shadow: #29d 1px 0 6px 1px; + -webkit-box-shadow: #29d 1px 0 6px 1px; + box-shadow: #29d 1px 0 6px 1px; + -moz-border-radius: 100%; + -webkit-border-radius: 100%; + border-radius: 100% +} + +#loading-bar-spinner { + display: block; + position: fixed; + z-index: 10002; + top: 10px; + left: 10px +} + +#loading-bar-spinner .spinner-icon { + width: 14px; + height: 14px; + border: 2px solid transparent; + border-top-color: #29d; + border-left-color: #29d; + border-radius: 50%; + -webkit-animation: loading-bar-spinner 400ms linear infinite; + -moz-animation: loading-bar-spinner 400ms linear infinite; + -ms-animation: loading-bar-spinner 400ms linear infinite; + -o-animation: loading-bar-spinner 400ms linear infinite; + animation: loading-bar-spinner 400ms linear infinite +} + +@-webkit-keyframes loading-bar-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0) + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@-moz-keyframes loading-bar-spinner { + 0% { + -moz-transform: rotate(0); + transform: rotate(0) + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@-o-keyframes loading-bar-spinner { + 0% { + -o-transform: rotate(0); + transform: rotate(0) + } + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@-ms-keyframes loading-bar-spinner { + 0% { + -ms-transform: rotate(0); + transform: rotate(0) + } + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +@keyframes loading-bar-spinner { + 0% { + transform: rotate(0) + } + 100% { + transform: rotate(360deg) + } +} diff --git a/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.js b/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.js index 5026baf91..0e4db623f 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/loading-bar.min.js @@ -4,4 +4,95 @@ * Copyright (c) 2015 Wes Cruver * License: MIT */ -!function(){"use strict";angular.module("angular-loading-bar",["cfp.loadingBarInterceptor"]),angular.module("chieffancypants.loadingBar",["cfp.loadingBarInterceptor"]),angular.module("cfp.loadingBarInterceptor",["cfp.loadingBar"]).config(["$httpProvider",function(a){var b=["$q","$cacheFactory","$timeout","$rootScope","$log","cfpLoadingBar",function(b,c,d,e,f,g){function h(){d.cancel(j),g.complete(),l=0,k=0}function i(b){var d,e=c.get("$http"),f=a.defaults;!b.cache&&!f.cache||b.cache===!1||"GET"!==b.method&&"JSONP"!==b.method||(d=angular.isObject(b.cache)?b.cache:angular.isObject(f.cache)?f.cache:e);var g=void 0!==d?void 0!==d.get(b.url):!1;return void 0!==b.cached&&g!==b.cached?b.cached:(b.cached=g,g)}var j,k=0,l=0,m=g.latencyThreshold;return{request:function(a){return a.ignoreLoadingBar||i(a)||(e.$broadcast("cfpLoadingBar:loading",{url:a.url}),0===k&&(j=d(function(){g.start()},m)),k++,g.set(l/k)),a},response:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),a):(f.error("Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),a)},responseError:function(a){return a&&a.config?(a.config.ignoreLoadingBar||i(a.config)||(l++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),l>=k?h():g.set(l/k)),b.reject(a)):(f.error("Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"),b.reject(a))}}}];a.interceptors.push(b)}]),angular.module("cfp.loadingBar",[]).provider("cfpLoadingBar",function(){this.autoIncrement=!0,this.includeSpinner=!0,this.includeBar=!0,this.latencyThreshold=100,this.startSize=.02,this.parentSelector="body",this.spinnerTemplate='
    ',this.loadingBarTemplate='
    ',this.$get=["$injector","$document","$timeout","$rootScope",function(a,b,c,d){function e(){k||(k=a.get("$animate"));var e=b.find(n).eq(0);c.cancel(m),r||(d.$broadcast("cfpLoadingBar:started"),r=!0,v&&k.enter(o,e,angular.element(e[0].lastChild)),u&&k.enter(q,e,angular.element(e[0].lastChild)),f(w))}function f(a){if(r){var b=100*a+"%";p.css("width",b),s=a,t&&(c.cancel(l),l=c(function(){g()},250))}}function g(){if(!(h()>=1)){var a=0,b=h();a=b>=0&&.25>b?(3*Math.random()+3)/100:b>=.25&&.65>b?3*Math.random()/100:b>=.65&&.9>b?2*Math.random()/100:b>=.9&&.99>b?.005:0;var c=h()+a;f(c)}}function h(){return s}function i(){s=0,r=!1}function j(){k||(k=a.get("$animate")),d.$broadcast("cfpLoadingBar:completed"),f(1),c.cancel(m),m=c(function(){var a=k.leave(o,i);a&&a.then&&a.then(i),k.leave(q)},500)}var k,l,m,n=this.parentSelector,o=angular.element(this.loadingBarTemplate),p=o.find("div").eq(0),q=angular.element(this.spinnerTemplate),r=!1,s=0,t=this.autoIncrement,u=this.includeSpinner,v=this.includeBar,w=this.startSize;return{start:e,set:f,status:h,inc:g,complete:j,autoIncrement:this.autoIncrement,includeSpinner:this.includeSpinner,latencyThreshold:this.latencyThreshold,parentSelector:this.parentSelector,startSize:this.startSize}}]})}(); \ No newline at end of file +!function () { + "use strict"; + angular.module("angular-loading-bar", ["cfp.loadingBarInterceptor"]), angular.module("chieffancypants.loadingBar", ["cfp.loadingBarInterceptor"]), angular.module("cfp.loadingBarInterceptor", ["cfp.loadingBar"]).config(["$httpProvider", function (a) { + var b = ["$q", "$cacheFactory", "$timeout", "$rootScope", "$log", "cfpLoadingBar", function (b, c, d, e, f, g) { + function h() { + d.cancel(j), g.complete(), l = 0, k = 0 + } + + function i(b) { + var d, e = c.get("$http"), f = a.defaults; + !b.cache && !f.cache || b.cache === !1 || "GET" !== b.method && "JSONP" !== b.method || (d = angular.isObject(b.cache) ? b.cache : angular.isObject(f.cache) ? f.cache : e); + var g = void 0 !== d ? void 0 !== d.get(b.url) : !1; + return void 0 !== b.cached && g !== b.cached ? b.cached : (b.cached = g, g) + } + + var j, k = 0, l = 0, m = g.latencyThreshold; + return { + request: function (a) { + return a.ignoreLoadingBar || i(a) || (e.$broadcast("cfpLoadingBar:loading", {url: a.url}), 0 === k && (j = d(function () { + g.start() + }, m)), k++, g.set(l / k)), a + }, response: function (a) { + return a && a.config ? (a.config.ignoreLoadingBar || i(a.config) || (l++, e.$broadcast("cfpLoadingBar:loaded", { + url: a.config.url, + result: a + }), l >= k ? h() : g.set(l / k)), a) : (f.error("Broken interceptor detected: Config object not supplied in response:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"), a) + }, responseError: function (a) { + return a && a.config ? (a.config.ignoreLoadingBar || i(a.config) || (l++, e.$broadcast("cfpLoadingBar:loaded", { + url: a.config.url, + result: a + }), l >= k ? h() : g.set(l / k)), b.reject(a)) : (f.error("Broken interceptor detected: Config object not supplied in rejection:\n https://github.com/chieffancypants/angular-loading-bar/pull/50"), b.reject(a)) + } + } + }]; + a.interceptors.push(b) + }]), angular.module("cfp.loadingBar", []).provider("cfpLoadingBar", function () { + this.autoIncrement = !0, this.includeSpinner = !0, this.includeBar = !0, this.latencyThreshold = 100, this.startSize = .02, this.parentSelector = "body", this.spinnerTemplate = '
    ', this.loadingBarTemplate = '
    ', this.$get = ["$injector", "$document", "$timeout", "$rootScope", function (a, b, c, d) { + function e() { + k || (k = a.get("$animate")); + var e = b.find(n).eq(0); + c.cancel(m), r || (d.$broadcast("cfpLoadingBar:started"), r = !0, v && k.enter(o, e, angular.element(e[0].lastChild)), u && k.enter(q, e, angular.element(e[0].lastChild)), f(w)) + } + + function f(a) { + if (r) { + var b = 100 * a + "%"; + p.css("width", b), s = a, t && (c.cancel(l), l = c(function () { + g() + }, 250)) + } + } + + function g() { + if (!(h() >= 1)) { + var a = 0, b = h(); + a = b >= 0 && .25 > b ? (3 * Math.random() + 3) / 100 : b >= .25 && .65 > b ? 3 * Math.random() / 100 : b >= .65 && .9 > b ? 2 * Math.random() / 100 : b >= .9 && .99 > b ? .005 : 0; + var c = h() + a; + f(c) + } + } + + function h() { + return s + } + + function i() { + s = 0, r = !1 + } + + function j() { + k || (k = a.get("$animate")), d.$broadcast("cfpLoadingBar:completed"), f(1), c.cancel(m), m = c(function () { + var a = k.leave(o, i); + a && a.then && a.then(i), k.leave(q) + }, 500) + } + + var k, l, m, n = this.parentSelector, o = angular.element(this.loadingBarTemplate), p = o.find("div").eq(0), q = angular.element(this.spinnerTemplate), r = !1, s = 0, t = this.autoIncrement, u = this.includeSpinner, v = this.includeBar, w = this.startSize; + return { + start: e, + set: f, + status: h, + inc: g, + complete: j, + autoIncrement: this.autoIncrement, + includeSpinner: this.includeSpinner, + latencyThreshold: this.latencyThreshold, + parentSelector: this.parentSelector, + startSize: this.startSize + } + }] + }) +}(); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/smart-table.min.js b/apollo-portal/src/main/resources/static/vendor/angular/smart-table.min.js index d44da6123..9aa3b08d0 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/smart-table.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/smart-table.min.js @@ -1,5 +1,161 @@ -/** -* @version 2.0.2 -* @license MIT -*/ -!function(t,e){"use strict";t.module("smart-table",[]).run(["$templateCache",function(t){t.put("template/smart-table/pagination.html",'')}]),t.module("smart-table").constant("stConfig",{pagination:{template:"template/smart-table/pagination.html",itemsByPage:10,displayedPages:5},search:{delay:400},select:{mode:"single",selectedClass:"st-selected"},sort:{ascentClass:"st-sort-ascent",descentClass:"st-sort-descent"},pipe:{delay:100}}),t.module("smart-table").controller("stTableController",["$scope","$parse","$filter","$attrs",function(a,s,n,r){function i(t){return t?[].concat(t):[]}function c(){h=i(l(a)),P===!0&&S.pipe()}var l,o,u,p=r.stTable,g=s(p),f=g.assign,d=n("orderBy"),m=n("filter"),h=i(g(a)),b={sort:{},search:{},pagination:{start:0}},P=!0,S=this;r.stSafeSrc&&(l=s(r.stSafeSrc),a.$watch(function(){var t=l(a);return t?t.length:0},function(t){t!==h.length&&c()}),a.$watch(function(){return l(a)},function(t,e){t!==e&&c()})),this.sortBy=function(e,a){return b.sort.predicate=e,b.sort.reverse=a===!0,t.isFunction(e)?b.sort.functionName=e.name:delete b.sort.functionName,b.pagination.start=0,this.pipe()},this.search=function(e,a){var s=b.search.predicateObject||{},n=a?a:"$";return e=t.isString(e)?e.trim():e,s[n]=e,e||delete s[n],b.search.predicateObject=s,b.pagination.start=0,this.pipe()},this.pipe=function(){var t,s=b.pagination;o=b.search.predicateObject?m(h,b.search.predicateObject):h,b.sort.predicate&&(o=d(o,b.sort.predicate,b.sort.reverse)),s.number!==e&&(s.numberOfPages=o.length>0?Math.ceil(o.length/s.number):1,s.start=s.start>=o.length?(s.numberOfPages-1)*s.number:s.start,t=o.slice(s.start,s.start+parseInt(s.number))),f(a,t||o)},this.select=function(t,a){var s=h,n=s.indexOf(t);-1!==n&&("single"===a?(t.isSelected=t.isSelected!==!0,u&&(u.isSelected=!1),u=t.isSelected===!0?t:e):s[n].isSelected=!s[n].isSelected)},this.slice=function(t,e){return b.pagination.start=t,b.pagination.number=e,this.pipe()},this.tableState=function(){return b},this.getFilteredCollection=function(){return o||h},this.setFilterFunction=function(t){m=n(t)},this.setSortFunction=function(t){d=n(t)},this.preventPipeOnWatch=function(){P=!1}}]).directive("stTable",function(){return{restrict:"A",controller:"stTableController",link:function(t,e,a,s){a.stSetFilter&&s.setFilterFunction(a.stSetFilter),a.stSetSort&&s.setSortFunction(a.stSetSort)}}}),t.module("smart-table").directive("stSearch",["stConfig","$timeout",function(t,e){return{require:"^stTable",link:function(a,s,n,r){var i=r,c=null,l=n.stDelay||t.search.delay;n.$observe("stSearch",function(t,e){var a=s[0].value;t!==e&&a&&(r.tableState().search={},i.search(a,t))}),a.$watch(function(){return r.tableState().search},function(t){var e=n.stSearch||"$";t.predicateObject&&t.predicateObject[e]!==s[0].value&&(s[0].value=t.predicateObject[e]||"")},!0),s.bind("input",function(t){t=t.originalEvent||t,null!==c&&e.cancel(c),c=e(function(){i.search(t.target.value,n.stSearch||""),c=null},l)})}}}]),t.module("smart-table").directive("stSelectRow",["stConfig",function(t){return{restrict:"A",require:"^stTable",scope:{row:"=stSelectRow"},link:function(e,a,s,n){var r=s.stSelectMode||t.select.mode;a.bind("click",function(){e.$apply(function(){n.select(e.row,r)})}),e.$watch("row.isSelected",function(e){e===!0?a.addClass(t.select.selectedClass):a.removeClass(t.select.selectedClass)})}}}]),t.module("smart-table").directive("stSort",["stConfig","$parse",function(a,s){return{restrict:"A",require:"^stTable",link:function(n,r,i,c){function l(){g++,u=t.isFunction(p(n))?p(n):i.stSort,g%3===0&&i.stSkipNatural===e?(g=0,c.tableState().sort={},c.tableState().pagination.start=0,c.pipe()):c.sortBy(u,g%2===0)}var o,u=i.stSort,p=s(u),g=0,f=i.stClassAscent||a.sort.ascentClass,d=i.stClassDescent||a.sort.descentClass,m=[f,d];i.stSortDefault&&(o=n.$eval(i.stSortDefault)!==e?n.$eval(i.stSortDefault):i.stSortDefault),r.bind("click",function(){u&&n.$apply(l)}),o&&(g="reverse"===o?1:0,l()),n.$watch(function(){return c.tableState().sort},function(t){t.predicate!==u?(g=0,r.removeClass(f).removeClass(d)):(g=t.reverse===!0?2:1,r.removeClass(m[g%2]).addClass(m[g-1]))},!0)}}}]),t.module("smart-table").directive("stPagination",["stConfig",function(t){return{restrict:"EA",require:"^stTable",scope:{stItemsByPage:"=?",stDisplayedPages:"=?",stPageChange:"&"},templateUrl:function(e,a){return a.stTemplate?a.stTemplate:t.pagination.template},link:function(e,a,s,n){function r(){var t,a,s=n.tableState().pagination,r=1,i=e.currentPage;for(e.currentPage=Math.floor(s.start/s.number)+1,r=Math.max(r,e.currentPage-Math.abs(Math.floor(e.stDisplayedPages/2))),t=r+e.stDisplayedPages,t>s.numberOfPages&&(t=s.numberOfPages+1,r=Math.max(1,t-e.stDisplayedPages)),e.pages=[],e.numPages=s.numberOfPages,a=r;t>a;a++)e.pages.push(a);i!==e.currentPage&&e.stPageChange({newPage:e.currentPage})}e.stItemsByPage=e.stItemsByPage?+e.stItemsByPage:t.pagination.itemsByPage,e.stDisplayedPages=e.stDisplayedPages?+e.stDisplayedPages:t.pagination.displayedPages,e.currentPage=1,e.pages=[],e.$watch(function(){return n.tableState().pagination},r,!0),e.$watch("stItemsByPage",function(t,a){t!==a&&e.selectPage(1)}),e.$watch("stDisplayedPages",r),e.selectPage=function(t){t>0&&t<=e.numPages&&n.slice((t-1)*e.stItemsByPage,e.stItemsByPage)},n.tableState().pagination.number||n.slice(0,e.stItemsByPage)}}}]),t.module("smart-table").directive("stPipe",["stConfig","$timeout",function(e,a){return{require:"stTable",scope:{stPipe:"="},link:{pre:function(s,n,r,i){var c=null;t.isFunction(s.stPipe)&&(i.preventPipeOnWatch(),i.pipe=function(){return null!==c&&a.cancel(c),c=a(function(){s.stPipe(i.tableState(),i)},e.pipe.delay)})},post:function(t,e,a,s){s.pipe()}}}}])}(angular); \ No newline at end of file +/** + * @version 2.0.2 + * @license MIT + */ +!function (t, e) { + "use strict"; + t.module("smart-table", []).run(["$templateCache", function (t) { + t.put("template/smart-table/pagination.html", '') + }]), t.module("smart-table").constant("stConfig", { + pagination: { + template: "template/smart-table/pagination.html", + itemsByPage: 10, + displayedPages: 5 + }, + search: {delay: 400}, + select: {mode: "single", selectedClass: "st-selected"}, + sort: {ascentClass: "st-sort-ascent", descentClass: "st-sort-descent"}, + pipe: {delay: 100} + }), t.module("smart-table").controller("stTableController", ["$scope", "$parse", "$filter", "$attrs", function (a, s, n, r) { + function i(t) { + return t ? [].concat(t) : [] + } + + function c() { + h = i(l(a)), P === !0 && S.pipe() + } + + var l, o, u, p = r.stTable, g = s(p), f = g.assign, d = n("orderBy"), m = n("filter"), h = i(g(a)), b = { + sort: {}, + search: {}, + pagination: {start: 0} + }, P = !0, S = this; + r.stSafeSrc && (l = s(r.stSafeSrc), a.$watch(function () { + var t = l(a); + return t ? t.length : 0 + }, function (t) { + t !== h.length && c() + }), a.$watch(function () { + return l(a) + }, function (t, e) { + t !== e && c() + })), this.sortBy = function (e, a) { + return b.sort.predicate = e, b.sort.reverse = a === !0, t.isFunction(e) ? b.sort.functionName = e.name : delete b.sort.functionName, b.pagination.start = 0, this.pipe() + }, this.search = function (e, a) { + var s = b.search.predicateObject || {}, n = a ? a : "$"; + return e = t.isString(e) ? e.trim() : e, s[n] = e, e || delete s[n], b.search.predicateObject = s, b.pagination.start = 0, this.pipe() + }, this.pipe = function () { + var t, s = b.pagination; + o = b.search.predicateObject ? m(h, b.search.predicateObject) : h, b.sort.predicate && (o = d(o, b.sort.predicate, b.sort.reverse)), s.number !== e && (s.numberOfPages = o.length > 0 ? Math.ceil(o.length / s.number) : 1, s.start = s.start >= o.length ? (s.numberOfPages - 1) * s.number : s.start, t = o.slice(s.start, s.start + parseInt(s.number))), f(a, t || o) + }, this.select = function (t, a) { + var s = h, n = s.indexOf(t); + -1 !== n && ("single" === a ? (t.isSelected = t.isSelected !== !0, u && (u.isSelected = !1), u = t.isSelected === !0 ? t : e) : s[n].isSelected = !s[n].isSelected) + }, this.slice = function (t, e) { + return b.pagination.start = t, b.pagination.number = e, this.pipe() + }, this.tableState = function () { + return b + }, this.getFilteredCollection = function () { + return o || h + }, this.setFilterFunction = function (t) { + m = n(t) + }, this.setSortFunction = function (t) { + d = n(t) + }, this.preventPipeOnWatch = function () { + P = !1 + } + }]).directive("stTable", function () { + return { + restrict: "A", controller: "stTableController", link: function (t, e, a, s) { + a.stSetFilter && s.setFilterFunction(a.stSetFilter), a.stSetSort && s.setSortFunction(a.stSetSort) + } + } + }), t.module("smart-table").directive("stSearch", ["stConfig", "$timeout", function (t, e) { + return { + require: "^stTable", link: function (a, s, n, r) { + var i = r, c = null, l = n.stDelay || t.search.delay; + n.$observe("stSearch", function (t, e) { + var a = s[0].value; + t !== e && a && (r.tableState().search = {}, i.search(a, t)) + }), a.$watch(function () { + return r.tableState().search + }, function (t) { + var e = n.stSearch || "$"; + t.predicateObject && t.predicateObject[e] !== s[0].value && (s[0].value = t.predicateObject[e] || "") + }, !0), s.bind("input", function (t) { + t = t.originalEvent || t, null !== c && e.cancel(c), c = e(function () { + i.search(t.target.value, n.stSearch || ""), c = null + }, l) + }) + } + } + }]), t.module("smart-table").directive("stSelectRow", ["stConfig", function (t) { + return { + restrict: "A", require: "^stTable", scope: {row: "=stSelectRow"}, link: function (e, a, s, n) { + var r = s.stSelectMode || t.select.mode; + a.bind("click", function () { + e.$apply(function () { + n.select(e.row, r) + }) + }), e.$watch("row.isSelected", function (e) { + e === !0 ? a.addClass(t.select.selectedClass) : a.removeClass(t.select.selectedClass) + }) + } + } + }]), t.module("smart-table").directive("stSort", ["stConfig", "$parse", function (a, s) { + return { + restrict: "A", require: "^stTable", link: function (n, r, i, c) { + function l() { + g++, u = t.isFunction(p(n)) ? p(n) : i.stSort, g % 3 === 0 && i.stSkipNatural === e ? (g = 0, c.tableState().sort = {}, c.tableState().pagination.start = 0, c.pipe()) : c.sortBy(u, g % 2 === 0) + } + + var o, u = i.stSort, p = s(u), g = 0, f = i.stClassAscent || a.sort.ascentClass, d = i.stClassDescent || a.sort.descentClass, m = [f, d]; + i.stSortDefault && (o = n.$eval(i.stSortDefault) !== e ? n.$eval(i.stSortDefault) : i.stSortDefault), r.bind("click", function () { + u && n.$apply(l) + }), o && (g = "reverse" === o ? 1 : 0, l()), n.$watch(function () { + return c.tableState().sort + }, function (t) { + t.predicate !== u ? (g = 0, r.removeClass(f).removeClass(d)) : (g = t.reverse === !0 ? 2 : 1, r.removeClass(m[g % 2]).addClass(m[g - 1])) + }, !0) + } + } + }]), t.module("smart-table").directive("stPagination", ["stConfig", function (t) { + return { + restrict: "EA", + require: "^stTable", + scope: {stItemsByPage: "=?", stDisplayedPages: "=?", stPageChange: "&"}, + templateUrl: function (e, a) { + return a.stTemplate ? a.stTemplate : t.pagination.template + }, + link: function (e, a, s, n) { + function r() { + var t, a, s = n.tableState().pagination, r = 1, i = e.currentPage; + for (e.currentPage = Math.floor(s.start / s.number) + 1, r = Math.max(r, e.currentPage - Math.abs(Math.floor(e.stDisplayedPages / 2))), t = r + e.stDisplayedPages, t > s.numberOfPages && (t = s.numberOfPages + 1, r = Math.max(1, t - e.stDisplayedPages)), e.pages = [], e.numPages = s.numberOfPages, a = r; t > a; a++)e.pages.push(a); + i !== e.currentPage && e.stPageChange({newPage: e.currentPage}) + } + + e.stItemsByPage = e.stItemsByPage ? +e.stItemsByPage : t.pagination.itemsByPage, e.stDisplayedPages = e.stDisplayedPages ? +e.stDisplayedPages : t.pagination.displayedPages, e.currentPage = 1, e.pages = [], e.$watch(function () { + return n.tableState().pagination + }, r, !0), e.$watch("stItemsByPage", function (t, a) { + t !== a && e.selectPage(1) + }), e.$watch("stDisplayedPages", r), e.selectPage = function (t) { + t > 0 && t <= e.numPages && n.slice((t - 1) * e.stItemsByPage, e.stItemsByPage) + }, n.tableState().pagination.number || n.slice(0, e.stItemsByPage) + } + } + }]), t.module("smart-table").directive("stPipe", ["stConfig", "$timeout", function (e, a) { + return { + require: "stTable", scope: {stPipe: "="}, link: { + pre: function (s, n, r, i) { + var c = null; + t.isFunction(s.stPipe) && (i.preventPipeOnWatch(), i.pipe = function () { + return null !== c && a.cancel(c), c = a(function () { + s.stPipe(i.tableState(), i) + }, e.pipe.delay) + }) + }, post: function (t, e, a, s) { + s.pipe() + } + } + } + }]) +}(angular); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/ui-bootstrap-tpls-0.13.0.min.js b/apollo-portal/src/main/resources/static/vendor/angular/ui-bootstrap-tpls-0.13.0.min.js index 6d2486283..60d329bd3 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/ui-bootstrap-tpls-0.13.0.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/ui-bootstrap-tpls-0.13.0.min.js @@ -5,6 +5,1949 @@ * Version: 0.13.0 - 2015-05-02 * License: MIT */ -angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.bindHtml","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.transition","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-popup.html","template/tooltip/tooltip-html-unsafe-popup.html","template/tooltip/tooltip-popup.html","template/tooltip/tooltip-template-popup.html","template/popover/popover-template.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.collapse",[]).directive("collapse",["$animate",function(a){return{link:function(b,c,d){function e(){c.removeClass("collapse").addClass("collapsing"),a.addClass(c,"in",{to:{height:c[0].scrollHeight+"px"}}).then(f)}function f(){c.removeClass("collapsing"),c.css({height:"auto"})}function g(){c.css({height:c[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing"),a.removeClass(c,"in",{to:{height:"0"}}).then(h)}function h(){c.css({height:"0"}),c.removeClass("collapsing"),c.addClass("collapse")}b.$watch(d.collapse,function(a){a?g():e()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("accordionConfig",{closeOthers:!0}).controller("AccordionController",["$scope","$attrs","accordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("accordion",function(){return{restrict:"EA",controller:"AccordionController",transclude:!0,replace:!1,templateUrl:"template/accordion/accordion.html"}}).directive("accordionGroup",function(){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/accordion/accordion-group.html",scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.$watch("isOpen",function(b){b&&d.closeOthers(a)}),a.toggleOpen=function(){a.isDisabled||(a.isOpen=!a.isOpen)}}}}).directive("accordionHeading",function(){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,angular.noop))}}}).directive("accordionTransclude",function(){return{require:"^accordionGroup",link:function(a,b,c,d){a.$watch(function(){return d[c.accordionTransclude]},function(a){a&&(b.html(""),b.append(a))})}}}),angular.module("ui.bootstrap.alert",[]).controller("AlertController",["$scope","$attrs",function(a,b){a.closeable="close"in b,this.close=a.close}]).directive("alert",function(){return{restrict:"EA",controller:"AlertController",templateUrl:"template/alert/alert.html",transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}).directive("dismissOnTimeout",["$timeout",function(a){return{require:"alert",link:function(b,c,d,e){a(function(){e.close()},parseInt(d.dismissOnTimeout,10))}}}]),angular.module("ui.bootstrap.bindHtml",[]).directive("bindHtmlUnsafe",function(){return function(a,b,c){b.addClass("ng-binding").data("$binding",c.bindHtmlUnsafe),a.$watch(c.bindHtmlUnsafe,function(a){b.html(a||"")})}}),angular.module("ui.bootstrap.buttons",[]).constant("buttonConfig",{activeClass:"active",toggleEvent:"click"}).controller("ButtonsController",["buttonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("btnRadio",function(){return{require:["btnRadio","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){var e=d[0],f=d[1];f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.btnRadio)))},b.bind(e.toggleEvent,function(){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.btnRadio)),f.$render()})})}}}).directive("btnCheckbox",function(){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){var d=a.$eval(b);return angular.isDefined(d)?d:c}var h=d[0],i=d[1];i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.bind(h.toggleEvent,function(){a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.carousel",[]).controller("CarouselController",["$scope","$interval","$animate",function(a,b,c){function d(a){if(angular.isUndefined(k[a].index))return k[a];{var b;k.length}for(b=0;b0&&(h=b(g,c))}function f(){h&&(b.cancel(h),h=null)}function g(){var b=+a.interval;i&&!isNaN(b)&&b>0?a.next():a.pause()}var h,i,j=this,k=j.slides=a.slides=[],l=-1;j.currentSlide=null;var m=!1;j.select=a.select=function(b,d){function f(){m||(angular.extend(b,{direction:d,active:!0}),angular.extend(j.currentSlide||{},{direction:d,active:!1}),c.enabled()&&!a.noTransition&&b.$element&&(a.$currentTransition=!0,b.$element.one("$animate:close",function(){a.$currentTransition=null})),j.currentSlide=b,l=g,e())}var g=j.indexOfSlide(b);void 0===d&&(d=g>j.getCurrentIndex()?"next":"prev"),b&&b!==j.currentSlide&&f()},a.$on("$destroy",function(){m=!0}),j.getCurrentIndex=function(){return j.currentSlide&&angular.isDefined(j.currentSlide.index)?+j.currentSlide.index:l},j.indexOfSlide=function(a){return angular.isDefined(a.index)?+a.index:k.indexOf(a)},a.next=function(){var b=(j.getCurrentIndex()+1)%k.length;return a.$currentTransition?void 0:j.select(d(b),"next")},a.prev=function(){var b=j.getCurrentIndex()-1<0?k.length-1:j.getCurrentIndex()-1;return a.$currentTransition?void 0:j.select(d(b),"prev")},a.isActive=function(a){return j.currentSlide===a},a.$watch("interval",e),a.$on("$destroy",f),a.play=function(){i||(i=!0,e())},a.pause=function(){a.noPause||(i=!1,f())},j.addSlide=function(b,c){b.$element=c,k.push(b),1===k.length||b.active?(j.select(k[k.length-1]),1==k.length&&a.play()):b.active=!1},j.removeSlide=function(a){angular.isDefined(a.index)&&k.sort(function(a,b){return+a.index>+b.index});var b=k.indexOf(a);k.splice(b,1),k.length>0&&a.active?j.select(b>=k.length?k[b-1]:k[b]):l>b&&l--}}]).directive("carousel",[function(){return{restrict:"EA",transclude:!0,replace:!0,controller:"CarouselController",require:"carousel",templateUrl:"template/carousel/carousel.html",scope:{interval:"=",noTransition:"=",noPause:"="}}}]).directive("slide",function(){return{require:"^carousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:"template/carousel/slide.html",scope:{active:"=?",index:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}).animation(".item",["$animate",function(a){return{beforeAddClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return b.addClass(f),a.addClass(b,g).then(function(){e||b.removeClass(g+" "+f),d()}),function(){e=!0}}d()},beforeRemoveClass:function(b,c,d){if("active"==c&&b.parent()&&!b.parent().scope().noTransition){var e=!1,f=b.isolateScope().direction,g="next"==f?"left":"right";return a.addClass(b,g).then(function(){e||b.removeClass(g),d()}),function(){e=!0}}d()}}}]),angular.module("ui.bootstrap.dateparser",[]).service("dateParser",["$locale","orderByFilter",function(a,b){function c(a){var c=[],d=a.split("");return angular.forEach(f,function(b,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+b.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),c.push({index:f,apply:b.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:b(c,"index")}}function d(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}var e=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.parsers={};var f={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:a.DATETIME_FORMATS.MONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.MONTH.indexOf(b)}},MMM:{regex:a.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(b){this.month=a.DATETIME_FORMATS.SHORTMONTH.indexOf(b)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:a.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:a.DATETIME_FORMATS.SHORTDAY.join("|")},HH:{regex:"(?:0|1)[0-9]|2[0-3]",apply:function(a){this.hours=+a}},H:{regex:"1?[0-9]|2[0-3]",apply:function(a){this.hours=+a}},mm:{regex:"[0-5][0-9]",apply:function(a){this.minutes=+a}},m:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.minutes=+a}},sss:{regex:"[0-9][0-9][0-9]",apply:function(a){this.milliseconds=+a}},ss:{regex:"[0-5][0-9]",apply:function(a){this.seconds=+a}},s:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.seconds=+a}}};this.parse=function(b,f,g){if(!angular.isString(b)||!f)return b;f=a.DATETIME_FORMATS[f]||f,f=f.replace(e,"\\$&"),this.parsers[f]||(this.parsers[f]=c(f));var h=this.parsers[f],i=h.regex,j=h.map,k=b.match(i);if(k&&k.length){var l,m;l=g?{year:g.getFullYear(),month:g.getMonth(),date:g.getDate(),hours:g.getHours(),minutes:g.getMinutes(),seconds:g.getSeconds(),milliseconds:g.getMilliseconds()}:{year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0};for(var n=1,o=k.length;o>n;n++){var p=j[n-1];p.apply&&p.apply.call(l,k[n])}return d(l.year,l.month,l.date)&&(m=new Date(l.year,l.month,l.date,l.hours,l.minutes,l.seconds,l.milliseconds||0)),m}}}]),angular.module("ui.bootstrap.position",[]).factory("$position",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).constant("datepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$timeout","$log","dateFilter","datepickerConfig",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","minMode","maxMode","showWeeks","startingDay","yearRange","shortcutPropagation"],function(c,e){i[c]=angular.isDefined(b[c])?8>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):h[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=h[d]?new Date(h[d]):null}),a.datepickerMode=a.datepickerMode||h.datepickerMode,a.maxMode=i.maxMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(j.$isEmpty(j.$modelValue)||j.$invalid)&&(i.activeDate=a,i.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$viewValue){var a=new Date(j.$viewValue),b=!isNaN(a);b?this.activeDate=a:f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'),j.$setValidity("date",b)}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$viewValue?new Date(j.$viewValue):null;j.$setValidity("date-disabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$viewValue?new Date(j.$viewValue):null;return{date:a,label:g(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$viewValue?new Date(j.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){e(function(){i.element[0].focus()},0,!1)};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),i.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]).directive("datepicker",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/datepicker.html",scope:{datepickerMode:"=?",dateDisabled:"&",customClass:"&",shortcutPropagation:"&?"},require:["datepicker","?^ngModel"],controller:"DatepickerController",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f)}}}).directive("daypicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/day.html",require:"^datepicker",link:function(b,c,d,e){function f(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?i[b]:29}function g(a,b){var c=new Array(b),d=new Date(a),e=0;for(d.setHours(12);b>e;)c[e++]=new Date(d),d.setDate(d.getDate()+1);return c}function h(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}b.showWeeks=e.showWeeks,e.step={months:1},e.element=c;var i=[31,28,31,30,31,30,31,31,30,31,30,31];e._refreshView=function(){var c=e.activeDate.getFullYear(),d=e.activeDate.getMonth(),f=new Date(c,d,1),i=e.startingDay-f.getDay(),j=i>0?7-i:-i,k=new Date(f);j>0&&k.setDate(-j+1);for(var l=g(k,42),m=0;42>m;m++)l[m]=angular.extend(e.createDateObject(l[m],e.formatDay),{secondary:l[m].getMonth()!==d,uid:b.uniqueId+"-"+m});b.labels=new Array(7);for(var n=0;7>n;n++)b.labels[n]={abbr:a(l[n].date,e.formatDayHeader),full:a(l[n].date,"EEEE")};if(b.title=a(e.activeDate,e.formatDayTitle),b.rows=e.split(l,7),b.showWeeks){b.weekNumbers=[];for(var o=(11-e.startingDay)%7,p=b.rows.length,q=0;p>q;q++)b.weekNumbers.push(h(b.rows[q][o].date))}},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},e.handleKeyDown=function(a){var b=e.activeDate.getDate();if("left"===a)b-=1;else if("up"===a)b-=7;else if("right"===a)b+=1;else if("down"===a)b+=7;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getMonth()+("pageup"===a?-1:1);e.activeDate.setMonth(c,1),b=Math.min(f(e.activeDate.getFullYear(),e.activeDate.getMonth()),b)}else"home"===a?b=1:"end"===a&&(b=f(e.activeDate.getFullYear(),e.activeDate.getMonth()));e.activeDate.setDate(b)},e.refreshView()}}}]).directive("monthpicker",["dateFilter",function(a){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/month.html",require:"^datepicker",link:function(b,c,d,e){e.step={years:1},e.element=c,e._refreshView=function(){for(var c=new Array(12),d=e.activeDate.getFullYear(),f=0;12>f;f++)c[f]=angular.extend(e.createDateObject(new Date(d,f,1),e.formatMonth),{uid:b.uniqueId+"-"+f});b.title=a(e.activeDate,e.formatMonthTitle),b.rows=e.split(c,3)},e.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},e.handleKeyDown=function(a){var b=e.activeDate.getMonth();if("left"===a)b-=1;else if("up"===a)b-=3;else if("right"===a)b+=1;else if("down"===a)b+=3;else if("pageup"===a||"pagedown"===a){var c=e.activeDate.getFullYear()+("pageup"===a?-1:1);e.activeDate.setFullYear(c)}else"home"===a?b=0:"end"===a&&(b=11);e.activeDate.setMonth(b)},e.refreshView()}}}]).directive("yearpicker",["dateFilter",function(){return{restrict:"EA",replace:!0,templateUrl:"template/datepicker/year.html",require:"^datepicker",link:function(a,b,c,d){function e(a){return parseInt((a-1)/f,10)*f+1}var f=d.yearRange;d.step={years:f},d.element=b,d._refreshView=function(){for(var b=new Array(f),c=0,g=e(d.activeDate.getFullYear());f>c;c++)b[c]=angular.extend(d.createDateObject(new Date(g+c,0,1),d.formatYear),{uid:a.uniqueId+"-"+c});a.title=[b[0].label,b[f-1].label].join(" - "),a.rows=d.split(b,5)},d.compare=function(a,b){return a.getFullYear()-b.getFullYear()},d.handleKeyDown=function(a){var b=d.activeDate.getFullYear();"left"===a?b-=1:"up"===a?b-=5:"right"===a?b+=1:"down"===a?b+=5:"pageup"===a||"pagedown"===a?b+=("pageup"===a?-1:1)*d.step.years:"home"===a?b=e(d.activeDate.getFullYear()):"end"===a&&(b=e(d.activeDate.getFullYear())+f-1),d.activeDate.setFullYear(b)},d.refreshView()}}}]).constant("datepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0}).directive("datepickerPopup",["$compile","$parse","$document","$position","dateFilter","dateParser","datepickerPopupConfig",function(a,b,c,d,e,f,g){return{restrict:"EA",require:"ngModel",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&",customClass:"&"},link:function(h,i,j,k){function l(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function m(a){if(angular.isNumber(a)&&(a=new Date(a)),a){if(angular.isDate(a)&&!isNaN(a))return a;if(angular.isString(a)){var b=f.parse(a,o,h.date)||new Date(a);return isNaN(b)?void 0:b}return void 0}return null}function n(a,b){var c=a||b;if(angular.isNumber(c)&&(c=new Date(c)),c){if(angular.isDate(c)&&!isNaN(c))return!0;if(angular.isString(c)){var d=f.parse(c,o)||new Date(c);return!isNaN(d)}return!1}return!0}var o,p=angular.isDefined(j.closeOnDateSelection)?h.$parent.$eval(j.closeOnDateSelection):g.closeOnDateSelection,q=angular.isDefined(j.datepickerAppendToBody)?h.$parent.$eval(j.datepickerAppendToBody):g.appendToBody;h.showButtonBar=angular.isDefined(j.showButtonBar)?h.$parent.$eval(j.showButtonBar):g.showButtonBar,h.getText=function(a){return h[a+"Text"]||g[a+"Text"]};var r=!1;if(g.html5Types[j.type]?(o=g.html5Types[j.type],r=!0):(o=j.datepickerPopup||g.datepickerPopup,j.$observe("datepickerPopup",function(a){var b=a||g.datepickerPopup;if(b!==o&&(o=b,k.$modelValue=null,!o))throw new Error("datepickerPopup must have a date format specified.")})),!o)throw new Error("datepickerPopup must have a date format specified.");if(r&&j.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");var s=angular.element("
    ");s.attr({"ng-model":"date","ng-change":"dateSelection()"});var t=angular.element(s.children()[0]);if(r&&"month"==j.type&&(t.attr("datepicker-mode",'"month"'),t.attr("min-mode","month")),j.datepickerOptions){var u=h.$parent.$eval(j.datepickerOptions);u.initDate&&(h.initDate=u.initDate,t.attr("init-date","initDate"),delete u.initDate),angular.forEach(u,function(a,b){t.attr(l(b),a)})}h.watchData={},angular.forEach(["minDate","maxDate","datepickerMode","initDate","shortcutPropagation"],function(a){if(j[a]){var c=b(j[a]);if(h.$parent.$watch(c,function(b){h.watchData[a]=b}),t.attr(l(a),"watchData."+a),"datepickerMode"===a){var d=c.assign;h.$watch("watchData."+a,function(a,b){a!==b&&d(h.$parent,a)})}}}),j.dateDisabled&&t.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),j.showWeeks&&t.attr("show-weeks",j.showWeeks),j.customClass&&t.attr("custom-class","customClass({ date: date, mode: mode })"),r?k.$formatters.push(function(a){return h.date=a,a}):(k.$$parserName="date",k.$validators.date=n,k.$parsers.unshift(m),k.$formatters.push(function(a){return h.date=a,k.$isEmpty(a)?a:e(a,o)})),h.dateSelection=function(a){angular.isDefined(a)&&(h.date=a);var b=h.date?e(h.date,o):"";i.val(b),k.$setViewValue(b),p&&(h.isOpen=!1,i[0].focus())},k.$viewChangeListeners.push(function(){h.date=f.parse(k.$viewValue,o,h.date)||new Date(k.$viewValue)});var v=function(a){h.isOpen&&a.target!==i[0]&&h.$apply(function(){h.isOpen=!1})},w=function(a){h.keydown(a)};i.bind("keydown",w),h.keydown=function(a){27===a.which?(a.preventDefault(),h.isOpen&&a.stopPropagation(),h.close()):40!==a.which||h.isOpen||(h.isOpen=!0)},h.$watch("isOpen",function(a){a?(h.$broadcast("datepicker.focus"),h.position=q?d.offset(i):d.position(i),h.position.top=h.position.top+i.prop("offsetHeight"),c.bind("click",v)):c.unbind("click",v)}),h.select=function(a){if("today"===a){var b=new Date;angular.isDate(h.date)?(a=new Date(h.date),a.setFullYear(b.getFullYear(),b.getMonth(),b.getDate())):a=new Date(b.setHours(0,0,0,0))}h.dateSelection(a)},h.close=function(){h.isOpen=!1,i[0].focus()};var x=a(s)(h);s.remove(),q?c.find("body").append(x):i.after(x),h.$on("$destroy",function(){x.remove(),i.unbind("keydown",w),c.unbind("click",v)})}}}]).directive("datepickerPopupWrap",function(){return{restrict:"EA",replace:!0,transclude:!0,templateUrl:"template/datepicker/popup.html",link:function(a,b){b.bind("click",function(a){a.preventDefault(),a.stopPropagation()})}}}),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("dropdownConfig",{openClass:"open"}).service("dropdownService",["$document","$rootScope",function(a,b){var c=null;this.open=function(b){c||(a.bind("click",d),a.bind("keydown",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b){c===b&&(c=null,a.unbind("click",d),a.unbind("keydown",e))};var d=function(a){if(c&&(!a||"disabled"!==c.getAutoClose())){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getElement();a&&"outsideClick"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which&&(c.focusToggleElement(),d())}}]).controller("DropdownController",["$scope","$attrs","$parse","dropdownConfig","dropdownService","$animate","$position","$document",function(a,b,c,d,e,f,g,h){var i,j=this,k=a.$new(),l=d.openClass,m=angular.noop,n=b.onToggle?c(b.onToggle):angular.noop,o=!1;this.init=function(d){j.$element=d,b.isOpen&&(i=c(b.isOpen),m=i.assign,a.$watch(i,function(a){k.isOpen=!!a})),o=angular.isDefined(b.dropdownAppendToBody),o&&j.dropdownMenu&&(h.find("body").append(j.dropdownMenu),d.on("$destroy",function(){j.dropdownMenu.remove()}))},this.toggle=function(a){return k.isOpen=arguments.length?!!a:!k.isOpen},this.isOpen=function(){return k.isOpen},k.getToggleElement=function(){return j.toggleElement},k.getAutoClose=function(){return b.autoClose||"always"},k.getElement=function(){return j.$element},k.focusToggleElement=function(){j.toggleElement&&j.toggleElement[0].focus()},k.$watch("isOpen",function(b,c){if(o&&j.dropdownMenu){var d=g.positionElements(j.$element,j.dropdownMenu,"bottom-left",!0);j.dropdownMenu.css({top:d.top+"px",left:d.left+"px",display:b?"block":"none"})}f[b?"addClass":"removeClass"](j.$element,l),b?(k.focusToggleElement(),e.open(k)):e.close(k),m(a,b),angular.isDefined(b)&&b!==c&&n(a,{open:!!b})}),a.$on("$locationChangeSuccess",function(){k.isOpen=!1}),a.$on("$destroy",function(){k.$destroy()})}]).directive("dropdown",function(){return{controller:"DropdownController",link:function(a,b,c,d){d.init(b)}}}).directive("dropdownMenu",function(){return{restrict:"AC",require:"?^dropdown",link:function(a,b,c,d){d&&(d.dropdownMenu=b)}}}).directive("dropdownToggle",function(){return{require:"?^dropdown",link:function(a,b,c,d){if(d){d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.modal",[]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c0),i()})}function i(){if(l&&-1==g()){var a=m;j(l,m,function(){a=null}),l=void 0,m=void 0}}function j(c,d,f){function g(){g.done||(g.done=!0,c.remove(),d.$destroy(),f&&f())}d.animate=!1,c.attr("modal-animation")&&a.enabled()?c.one("$animate:close",function(){e.$evalAsync(g)}):b(g)}function k(a,b,c){return!a.value.modalScope.$broadcast("modal.closing",b,c).defaultPrevented}var l,m,n="modal-open",o=f.createNew(),p={};return e.$watch(g,function(a){m&&(m.index=a)}),c.bind("keydown",function(a){var b;27===a.which&&(b=o.top(),b&&b.value.keyboard&&(a.preventDefault(),e.$apply(function(){p.dismiss(b.key,"escape key press")})))}),p.open=function(a,b){var f=c[0].activeElement;o.add(a,{deferred:b.deferred,renderDeferred:b.renderDeferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard});var h=c.find("body").eq(0),i=g();if(i>=0&&!l){m=e.$new(!0),m.index=i;var j=angular.element('
    ');j.attr("backdrop-class",b.backdropClass),b.animation&&j.attr("modal-animation","true"),l=d(j)(m),h.append(l)}var k=angular.element('
    ');k.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,size:b.size,index:o.length()-1,animate:"animate"}).html(b.content),b.animation&&k.attr("modal-animation","true");var p=d(k)(b.scope);o.top().value.modalDomEl=p,o.top().value.modalOpener=f,h.append(p),h.addClass(n)},p.close=function(a,b){var c=o.get(a);return c&&k(c,b,!0)?(c.value.deferred.resolve(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismiss=function(a,b){var c=o.get(a);return c&&k(c,b,!1)?(c.value.deferred.reject(b),h(a),c.value.modalOpener.focus(),!0):!c},p.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},p.getTop=function(){return o.top()},p.modalRendered=function(a){var b=o.get(a);b&&b.value.renderDeferred.resolve()},p}]).provider("$modal",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$templateRequest","$controller","$modalStack",function(b,c,d,e,f,g){function h(a){return a.template?d.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}function i(a){var c=[];return angular.forEach(a,function(a){(angular.isFunction(a)||angular.isArray(a))&&c.push(d.when(b.invoke(a))) -}),c}var j={};return j.open=function(b){var e=d.defer(),j=d.defer(),k=d.defer(),l={result:e.promise,opened:j.promise,rendered:k.promise,close:function(a){return g.close(l,a)},dismiss:function(a){return g.dismiss(l,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var m=d.all([h(b)].concat(i(b.resolve)));return m.then(function(a){var d=(b.scope||c).$new();d.$close=l.close,d.$dismiss=l.dismiss;var h,i={},j=1;b.controller&&(i.$scope=d,i.$modalInstance=l,angular.forEach(b.resolve,function(b,c){i[c]=a[j++]}),h=f(b.controller,i),b.controllerAs&&(d[b.controllerAs]=h)),g.open(l,{scope:d,deferred:e,renderDeferred:k,content:a[0],animation:b.animation,backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size})},function(a){e.reject(a)}),m.then(function(){j.resolve(!0)},function(a){j.reject(a)}),l},j}]};return a}),angular.module("ui.bootstrap.pagination",[]).controller("PaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(g,h){e=g,this.config=h,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=h.itemsPerPage,a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b,c){a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).constant("paginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("pagination",["$parse","paginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@"},require:["pagination","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pagination.html",replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("pagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("pager",["pagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@"},require:["pager","?ngModel"],controller:"PaginationController",templateUrl:"template/pagination/pager.html",replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).provider("$tooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",animation:!0,popupDelay:0,useContentExp:!1},c={mouseenter:"mouseleave",click:"click",focus:"blur"},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$position","$interpolate",function(e,f,g,h,i,j){return function(e,k,l,m){function n(a){var b=a||m.trigger||l,d=c[b]||b;return{show:b,hide:d}}m=angular.extend({},b,d,m);var o=a(e),p=j.startSymbol(),q=j.endSymbol(),r="
    ';return{restrict:"EA",compile:function(){var a=f(r);return function(b,c,d){function f(){E.isOpen?l():j()}function j(){(!D||b.$eval(d[k+"Enable"]))&&(s(),E.popupDelay?A||(A=g(o,E.popupDelay,!1),A.then(function(a){a()})):o()())}function l(){b.$apply(function(){p()})}function o(){return A=null,z&&(g.cancel(z),z=null),(m.useContentExp?E.contentExp():E.content)?(q(),x.css({top:0,left:0,display:"block"}),E.$digest(),F(),E.isOpen=!0,E.$apply(),F):angular.noop}function p(){E.isOpen=!1,g.cancel(A),A=null,E.animation?z||(z=g(r,500)):r()}function q(){x&&r(),y=E.$new(),x=a(y,function(a){B?h.find("body").append(a):c.after(a)}),y.$watch(function(){g(F,0,!1)}),m.useContentExp&&y.$watch("contentExp()",function(a){!a&&E.isOpen&&p()})}function r(){z=null,x&&(x.remove(),x=null),y&&(y.$destroy(),y=null)}function s(){t(),u(),v()}function t(){E.popupClass=d[k+"Class"]}function u(){var a=d[k+"Placement"];E.placement=angular.isDefined(a)?a:m.placement}function v(){var a=d[k+"PopupDelay"],b=parseInt(a,10);E.popupDelay=isNaN(b)?m.popupDelay:b}function w(){var a=d[k+"Trigger"];G(),C=n(a),C.show===C.hide?c.bind(C.show,f):(c.bind(C.show,j),c.bind(C.hide,l))}var x,y,z,A,B=angular.isDefined(m.appendToBody)?m.appendToBody:!1,C=n(void 0),D=angular.isDefined(d[k+"Enable"]),E=b.$new(!0),F=function(){if(x){var a=i.positionElements(c,x,E.placement,B);a.top+="px",a.left+="px",x.css(a)}};E.origScope=b,E.isOpen=!1,E.contentExp=function(){return b.$eval(d[e])},m.useContentExp||d.$observe(e,function(a){E.content=a,!a&&E.isOpen&&p()}),d.$observe("disabled",function(a){a&&E.isOpen&&p()}),d.$observe(k+"Title",function(a){E.title=a});var G=function(){c.unbind(C.show,j),c.unbind(C.hide,l)};w();var H=b.$eval(d[k+"Animation"]);E.animation=angular.isDefined(H)?!!H:m.animation;var I=b.$eval(d[k+"AppendToBody"]);B=angular.isDefined(I)?I:B,B&&b.$on("$locationChangeSuccess",function(){E.isOpen&&p()}),b.$on("$destroy",function(){g.cancel(z),g.cancel(A),G(),r(),E=null})}}}}}]}).directive("tooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit("$includeContentLoaded",b)}},function(){g===l&&(m(),e.$emit("$includeContentError",b))}),e.$emit("$includeContentRequested",b)):m()}),e.$on("$destroy",m)}}}]).directive("tooltipClasses",function(){return{restrict:"A",link:function(a,b,c){a.placement&&b.addClass(a.placement),a.popupClass&&b.addClass(a.popupClass),a.animation()&&b.addClass(c.tooltipAnimationClass)}}}).directive("tooltipPopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html"}}).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/tooltip/tooltip-template-popup.html"}}).directive("tooltipTemplate",["$tooltip",function(a){return a("tooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlPopup",function(){return{restrict:"EA",replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-popup.html"}}).directive("tooltipHtml",["$tooltip",function(a){return a("tooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlUnsafePopup",function(){return{restrict:"EA",replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-unsafe-popup.html"}}).value("tooltipHtmlUnsafeSuppressDeprecated",!1).directive("tooltipHtmlUnsafe",["$tooltip","tooltipHtmlUnsafeSuppressDeprecated","$log",function(a,b,c){return b||c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."),a("tooltipHtmlUnsafe","tooltip","mouseenter")}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/popover/popover-template.html"}}).directive("popoverTemplate",["$tooltip",function(a){return a("popoverTemplate","popover","click",{useContentExp:!0})}]).directive("popoverPopup",function(){return{restrict:"EA",replace:!0,scope:{title:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html"}}).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("progressConfig",{animate:!0,max:100}).controller("ProgressController",["$scope","$attrs","progressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c){e||c.css({transition:"none"}),this.bars.push(b),b.$watch("value",function(c){b.percent=+(100*c/a.max).toFixed(2)}),b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)}}]).directive("progress",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{},templateUrl:"template/progressbar/progress.html"}}).directive("bar",function(){return{restrict:"EA",replace:!0,transclude:!0,require:"^progress",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b)}}}).directive("progressbar",function(){return{restrict:"EA",replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]))}}}),angular.module("ui.bootstrap.rating",[]).constant("ratingConfig",{max:5,stateOn:null,stateOff:null}).controller("RatingController",["$scope","$attrs","ratingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(f)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff},a[b]);return a},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("rating",function(){return{restrict:"EA",require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module("ui.bootstrap.tabs",[]).controller("TabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect())}),a.active=!0,a.onSelect()},b.addTab=function(a){c.push(a),1===c.length&&a.active!==!1?a.active=!0:a.active?b.select(a):a.active=!1},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("tabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("tab",["$parse","$log",function(a,b){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},compile:function(c,d,e){return function(c,d,f,g){c.$watch("active",function(a){a&&g.select(c)}),c.disabled=!1,f.disable&&c.$parent.$watch(a(f.disable),function(a){c.disabled=!!a}),f.disabled&&(b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'),c.$parent.$watch(a(f.disabled),function(a){c.disabled=!!a})),c.select=function(){c.disabled||(c.active=!0)},g.addTab(c),c.$on("$destroy",function(){g.removeTab(c)}),c.$transcludeFn=e}}}}]).directive("tabHeadingTransclude",[function(){return{restrict:"A",require:"^tab",link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}]).directive("tabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(b,c,d){var e=b.$eval(d.tabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.timepicker",[]).constant("timepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0}).controller("TimepickerController",["$scope","$attrs","$parse","$log","$locale","timepickerConfig",function(a,b,c,d,e,f){function g(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===p[1]&&(b+=12)),b):void 0}function h(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function i(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a.toString()}function j(a){k(),o.$setViewValue(new Date(n)),l(a)}function k(){o.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function l(b){var c=n.getHours(),d=n.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:i(c),"m"!==b&&(a.minutes=i(d)),a.meridian=n.getHours()<12?p[0]:p[1]}function m(a){var b=new Date(n.getTime()+6e4*a);n.setHours(b.getHours(),b.getMinutes()),j()}var n=new Date,o={$setViewValue:angular.noop},p=angular.isDefined(b.meridians)?a.$parent.$eval(b.meridians):f.meridians||e.DATETIME_FORMATS.AMPMS;this.init=function(c,d){o=c,o.$render=this.render,o.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),g=d.eq(1),h=angular.isDefined(b.mousewheel)?a.$parent.$eval(b.mousewheel):f.mousewheel;h&&this.setupMousewheelEvents(e,g);var i=angular.isDefined(b.arrowkeys)?a.$parent.$eval(b.arrowkeys):f.arrowkeys;i&&this.setupArrowkeyEvents(e,g),a.readonlyInput=angular.isDefined(b.readonlyInput)?a.$parent.$eval(b.readonlyInput):f.readonlyInput,this.setupInputEvents(e,g)};var q=f.hourStep;b.hourStep&&a.$parent.$watch(c(b.hourStep),function(a){q=parseInt(a,10)});var r=f.minuteStep;b.minuteStep&&a.$parent.$watch(c(b.minuteStep),function(a){r=parseInt(a,10)}),a.showMeridian=f.showMeridian,b.showMeridian&&a.$parent.$watch(c(b.showMeridian),function(b){if(a.showMeridian=!!b,o.$error.time){var c=g(),d=h();angular.isDefined(c)&&angular.isDefined(d)&&(n.setHours(c),j())}else l()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c){b.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply())}),c.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply())})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){o.$setViewValue(null),o.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=g();angular.isDefined(a)?(n.setHours(a),j("h")):d(!0)},b.bind("blur",function(){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=i(a.hours)})}),a.updateMinutes=function(){var a=h();angular.isDefined(a)?(n.setMinutes(a),j("m")):d(void 0,!0)},c.bind("blur",function(){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=i(a.minutes)})})},this.render=function(){var a=o.$viewValue;isNaN(a)?(o.$setValidity("time",!1),d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(a&&(n=a),k(),l())},a.incrementHours=function(){m(60*q)},a.decrementHours=function(){m(60*-q)},a.incrementMinutes=function(){m(r)},a.decrementMinutes=function(){m(-r)},a.toggleMeridian=function(){m(720*(n.getHours()<12?1:-1))}}]).directive("timepicker",function(){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",replace:!0,scope:{},templateUrl:"template/timepicker/timepicker.html",link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.transition",[]).value("$transitionSuppressDeprecated",!1).factory("$transition",["$q","$timeout","$rootScope","$log","$transitionSuppressDeprecated",function(a,b,c,d,e){function f(a){for(var b in a)if(void 0!==h.style[b])return a[b]}e||d.warn("$transition is now deprecated. Use $animate from ngAnimate instead.");var g=function(d,e,f){f=f||{};var h=a.defer(),i=g[f.animation?"animationEndEventName":"transitionEndEventName"],j=function(){c.$apply(function(){d.unbind(i,j),h.resolve(d)})};return i&&d.bind(i,j),b(function(){angular.isString(e)?d.addClass(e):angular.isFunction(e)?e(d):angular.isObject(e)&&d.css(e),i||h.resolve(d)}),h.promise.cancel=function(){i&&d.unbind(i,j),h.reject("Transition cancelled")},h.promise},h=document.createElement("trans"),i={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"},j={WebkitTransition:"webkitAnimationEnd",MozTransition:"animationend",OTransition:"oAnimationEnd",transition:"animationend"};return g.transitionEndEventName=f(i),g.animationEndEventName=f(j),g}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position","ui.bootstrap.bindHtml"]).factory("typeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$position","typeaheadParser",function(a,b,c,d,e,f,g){var h=[9,13,27,38,40];return{require:"ngModel",link:function(i,j,k,l){var m,n=i.$eval(k.typeaheadMinLength)||1,o=i.$eval(k.typeaheadWaitMs)||0,p=i.$eval(k.typeaheadEditable)!==!1,q=b(k.typeaheadLoading).assign||angular.noop,r=b(k.typeaheadOnSelect),s=k.typeaheadInputFormatter?b(k.typeaheadInputFormatter):void 0,t=k.typeaheadAppendToBody?i.$eval(k.typeaheadAppendToBody):!1,u=i.$eval(k.typeaheadFocusFirst)!==!1,v=b(k.ngModel).assign,w=g.parse(k.typeahead),x=i.$new();i.$on("$destroy",function(){x.$destroy()});var y="typeahead-"+x.$id+"-"+Math.floor(1e4*Math.random());j.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":y});var z=angular.element("
    ");z.attr({id:y,matches:"matches",active:"activeIdx",select:"select(activeIdx)",query:"query",position:"position"}),angular.isDefined(k.typeaheadTemplateUrl)&&z.attr("template-url",k.typeaheadTemplateUrl);var A=function(){x.matches=[],x.activeIdx=-1,j.attr("aria-expanded",!1)},B=function(a){return y+"-option-"+a};x.$watch("activeIdx",function(a){0>a?j.removeAttr("aria-activedescendant"):j.attr("aria-activedescendant",B(a))});var C=function(a){var b={$viewValue:a};q(i,!0),c.when(w.source(i,b)).then(function(c){var d=a===l.$viewValue;if(d&&m)if(c&&c.length>0){x.activeIdx=u?0:-1,x.matches.length=0;for(var e=0;e=n?o>0?(F(),E(a)):C(a):(q(i,!1),F(),A()),p?a:a?void l.$setValidity("editable",!1):(l.$setValidity("editable",!0),a)}),l.$formatters.push(function(a){var b,c,d={};return p||l.$setValidity("editable",!0),s?(d.$model=a,s(i,d)):(d[w.itemName]=a,b=w.viewMapper(i,d),d[w.itemName]=void 0,c=w.viewMapper(i,d),b!==c?b:a)}),x.select=function(a){var b,c,e={};e[w.itemName]=c=x.matches[a].model,b=w.modelMapper(i,e),v(i,b),l.$setValidity("editable",!0),l.$setValidity("parse",!0),r(i,{$item:c,$model:b,$label:w.viewMapper(i,e)}),A(),d(function(){j[0].focus()},0,!1)},j.bind("keydown",function(a){0!==x.matches.length&&-1!==h.indexOf(a.which)&&(-1!=x.activeIdx||13!==a.which&&9!==a.which)&&(a.preventDefault(),40===a.which?(x.activeIdx=(x.activeIdx+1)%x.matches.length,x.$digest()):38===a.which?(x.activeIdx=(x.activeIdx>0?x.activeIdx:x.matches.length)-1,x.$digest()):13===a.which||9===a.which?x.$apply(function(){x.select(x.activeIdx)}):27===a.which&&(a.stopPropagation(),A(),x.$digest()))}),j.bind("blur",function(){m=!1});var G=function(a){j[0]!==a.target&&(A(),x.$digest())};e.bind("click",G),i.$on("$destroy",function(){e.unbind("click",G),t&&H.remove(),z.remove()});var H=a(z)(x);t?e.find("body").append(H):j.after(H)}}}]).directive("typeaheadPopup",function(){return{restrict:"EA",scope:{matches:"=",query:"=",active:"=",position:"=",select:"&"},replace:!0,templateUrl:"template/typeahead/typeahead-popup.html",link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("typeaheadMatch",["$templateRequest","$compile","$parse",function(a,b,c){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||"template/typeahead/typeahead-match.html";a(g).then(function(a){b(a.trim())(d,function(a){e.replaceWith(a)})})}}}]).filter("typeaheadHighlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c?(""+b).replace(new RegExp(a(c),"gi"),"$&"):b}}),angular.module("template/accordion/accordion-group.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion-group.html",'
    \n
    \n

    \n {{heading}}\n

    \n
    \n
    \n
    \n
    \n
    \n')}]),angular.module("template/accordion/accordion.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion.html",'
    ')}]),angular.module("template/alert/alert.html",[]).run(["$templateCache",function(a){a.put("template/alert/alert.html",'\n')}]),angular.module("template/carousel/carousel.html",[]).run(["$templateCache",function(a){a.put("template/carousel/carousel.html",'\n')}]),angular.module("template/carousel/slide.html",[]).run(["$templateCache",function(a){a.put("template/carousel/slide.html",'
    \n')}]),angular.module("template/datepicker/datepicker.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/datepicker.html",'
    \n \n \n \n
    ')}]),angular.module("template/datepicker/day.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/day.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{label.abbr}}
    {{ weekNumbers[$index] }}\n \n
    \n')}]),angular.module("template/datepicker/month.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/month.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n')}]),angular.module("template/datepicker/popup.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/popup.html",'\n')}]),angular.module("template/datepicker/year.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/year.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n') -}]),angular.module("template/modal/backdrop.html",[]).run(["$templateCache",function(a){a.put("template/modal/backdrop.html",'\n')}]),angular.module("template/modal/window.html",[]).run(["$templateCache",function(a){a.put("template/modal/window.html",'\n')}]),angular.module("template/pagination/pager.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pager.html",'')}]),angular.module("template/pagination/pagination.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pagination.html",'')}]),angular.module("template/tooltip/tooltip-html-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/tooltip/tooltip-html-unsafe-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-unsafe-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/tooltip/tooltip-template-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-template-popup.html",'
    \n
    \n
    \n
    \n')}]),angular.module("template/popover/popover-template.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-template.html",'
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n')}]),angular.module("template/popover/popover-window.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-window.html",'
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n')}]),angular.module("template/popover/popover.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover.html",'
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n')}]),angular.module("template/progressbar/bar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/bar.html",'
    \n')}]),angular.module("template/progressbar/progress.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progress.html",'
    ')}]),angular.module("template/progressbar/progressbar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progressbar.html",'
    \n
    \n
    \n')}]),angular.module("template/rating/rating.html",[]).run(["$templateCache",function(a){a.put("template/rating/rating.html",'\n \n ({{ $index < value ? \'*\' : \' \' }})\n \n')}]),angular.module("template/tabs/tab.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tab.html",'
  • \n {{heading}}\n
  • \n')}]),angular.module("template/tabs/tabset.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tabset.html",'
    \n \n
    \n
    \n
    \n
    \n
    \n')}]),angular.module("template/timepicker/timepicker.html",[]).run(["$templateCache",function(a){a.put("template/timepicker/timepicker.html",'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
     
    \n \n :\n \n
     
    \n')}]),angular.module("template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-match.html",'')}]),angular.module("template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-popup.html",'\n')}]),!angular.$$csp()&&angular.element(document).find("head").prepend(''); \ No newline at end of file +angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.dateparser", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdown", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.transition", "ui.bootstrap.typeahead"]), angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html", "template/accordion/accordion.html", "template/alert/alert.html", "template/carousel/carousel.html", "template/carousel/slide.html", "template/datepicker/datepicker.html", "template/datepicker/day.html", "template/datepicker/month.html", "template/datepicker/popup.html", "template/datepicker/year.html", "template/modal/backdrop.html", "template/modal/window.html", "template/pagination/pager.html", "template/pagination/pagination.html", "template/tooltip/tooltip-html-popup.html", "template/tooltip/tooltip-html-unsafe-popup.html", "template/tooltip/tooltip-popup.html", "template/tooltip/tooltip-template-popup.html", "template/popover/popover-template.html", "template/popover/popover.html", "template/progressbar/bar.html", "template/progressbar/progress.html", "template/progressbar/progressbar.html", "template/rating/rating.html", "template/tabs/tab.html", "template/tabs/tabset.html", "template/timepicker/timepicker.html", "template/typeahead/typeahead-match.html", "template/typeahead/typeahead-popup.html"]), angular.module("ui.bootstrap.collapse", []).directive("collapse", ["$animate", function (a) { + return { + link: function (b, c, d) { + function e() { + c.removeClass("collapse").addClass("collapsing"), a.addClass(c, "in", {to: {height: c[0].scrollHeight + "px"}}).then(f) + } + + function f() { + c.removeClass("collapsing"), c.css({height: "auto"}) + } + + function g() { + c.css({height: c[0].scrollHeight + "px"}).removeClass("collapse").addClass("collapsing"), a.removeClass(c, "in", {to: {height: "0"}}).then(h) + } + + function h() { + c.css({height: "0"}), c.removeClass("collapsing"), c.addClass("collapse") + } + + b.$watch(d.collapse, function (a) { + a ? g() : e() + }) + } + } +}]), angular.module("ui.bootstrap.accordion", ["ui.bootstrap.collapse"]).constant("accordionConfig", {closeOthers: !0}).controller("AccordionController", ["$scope", "$attrs", "accordionConfig", function (a, b, c) { + this.groups = [], this.closeOthers = function (d) { + var e = angular.isDefined(b.closeOthers) ? a.$eval(b.closeOthers) : c.closeOthers; + e && angular.forEach(this.groups, function (a) { + a !== d && (a.isOpen = !1) + }) + }, this.addGroup = function (a) { + var b = this; + this.groups.push(a), a.$on("$destroy", function () { + b.removeGroup(a) + }) + }, this.removeGroup = function (a) { + var b = this.groups.indexOf(a); + -1 !== b && this.groups.splice(b, 1) + } +}]).directive("accordion", function () { + return { + restrict: "EA", + controller: "AccordionController", + transclude: !0, + replace: !1, + templateUrl: "template/accordion/accordion.html" + } +}).directive("accordionGroup", function () { + return { + require: "^accordion", + restrict: "EA", + transclude: !0, + replace: !0, + templateUrl: "template/accordion/accordion-group.html", + scope: {heading: "@", isOpen: "=?", isDisabled: "=?"}, + controller: function () { + this.setHeading = function (a) { + this.heading = a + } + }, + link: function (a, b, c, d) { + d.addGroup(a), a.$watch("isOpen", function (b) { + b && d.closeOthers(a) + }), a.toggleOpen = function () { + a.isDisabled || (a.isOpen = !a.isOpen) + } + } + } +}).directive("accordionHeading", function () { + return { + restrict: "EA", + transclude: !0, + template: "", + replace: !0, + require: "^accordionGroup", + link: function (a, b, c, d, e) { + d.setHeading(e(a, angular.noop)) + } + } +}).directive("accordionTransclude", function () { + return { + require: "^accordionGroup", link: function (a, b, c, d) { + a.$watch(function () { + return d[c.accordionTransclude] + }, function (a) { + a && (b.html(""), b.append(a)) + }) + } + } +}), angular.module("ui.bootstrap.alert", []).controller("AlertController", ["$scope", "$attrs", function (a, b) { + a.closeable = "close" in b, this.close = a.close +}]).directive("alert", function () { + return { + restrict: "EA", + controller: "AlertController", + templateUrl: "template/alert/alert.html", + transclude: !0, + replace: !0, + scope: {type: "@", close: "&"} + } +}).directive("dismissOnTimeout", ["$timeout", function (a) { + return { + require: "alert", link: function (b, c, d, e) { + a(function () { + e.close() + }, parseInt(d.dismissOnTimeout, 10)) + } + } +}]), angular.module("ui.bootstrap.bindHtml", []).directive("bindHtmlUnsafe", function () { + return function (a, b, c) { + b.addClass("ng-binding").data("$binding", c.bindHtmlUnsafe), a.$watch(c.bindHtmlUnsafe, function (a) { + b.html(a || "") + }) + } +}), angular.module("ui.bootstrap.buttons", []).constant("buttonConfig", { + activeClass: "active", + toggleEvent: "click" +}).controller("ButtonsController", ["buttonConfig", function (a) { + this.activeClass = a.activeClass || "active", this.toggleEvent = a.toggleEvent || "click" +}]).directive("btnRadio", function () { + return { + require: ["btnRadio", "ngModel"], controller: "ButtonsController", link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f.$render = function () { + b.toggleClass(e.activeClass, angular.equals(f.$modelValue, a.$eval(c.btnRadio))) + }, b.bind(e.toggleEvent, function () { + var d = b.hasClass(e.activeClass); + (!d || angular.isDefined(c.uncheckable)) && a.$apply(function () { + f.$setViewValue(d ? null : a.$eval(c.btnRadio)), f.$render() + }) + }) + } + } +}).directive("btnCheckbox", function () { + return { + require: ["btnCheckbox", "ngModel"], controller: "ButtonsController", link: function (a, b, c, d) { + function e() { + return g(c.btnCheckboxTrue, !0) + } + + function f() { + return g(c.btnCheckboxFalse, !1) + } + + function g(b, c) { + var d = a.$eval(b); + return angular.isDefined(d) ? d : c + } + + var h = d[0], i = d[1]; + i.$render = function () { + b.toggleClass(h.activeClass, angular.equals(i.$modelValue, e())) + }, b.bind(h.toggleEvent, function () { + a.$apply(function () { + i.$setViewValue(b.hasClass(h.activeClass) ? f() : e()), i.$render() + }) + }) + } + } +}), angular.module("ui.bootstrap.carousel", []).controller("CarouselController", ["$scope", "$interval", "$animate", function (a, b, c) { + function d(a) { + if (angular.isUndefined(k[a].index))return k[a]; + { + var b; + k.length + } + for (b = 0; b < k.length; ++b)if (k[b].index == a)return k[b] + } + + function e() { + f(); + var c = +a.interval; + !isNaN(c) && c > 0 && (h = b(g, c)) + } + + function f() { + h && (b.cancel(h), h = null) + } + + function g() { + var b = +a.interval; + i && !isNaN(b) && b > 0 ? a.next() : a.pause() + } + + var h, i, j = this, k = j.slides = a.slides = [], l = -1; + j.currentSlide = null; + var m = !1; + j.select = a.select = function (b, d) { + function f() { + m || (angular.extend(b, {direction: d, active: !0}), angular.extend(j.currentSlide || {}, { + direction: d, + active: !1 + }), c.enabled() && !a.noTransition && b.$element && (a.$currentTransition = !0, b.$element.one("$animate:close", function () { + a.$currentTransition = null + })), j.currentSlide = b, l = g, e()) + } + + var g = j.indexOfSlide(b); + void 0 === d && (d = g > j.getCurrentIndex() ? "next" : "prev"), b && b !== j.currentSlide && f() + }, a.$on("$destroy", function () { + m = !0 + }), j.getCurrentIndex = function () { + return j.currentSlide && angular.isDefined(j.currentSlide.index) ? +j.currentSlide.index : l + }, j.indexOfSlide = function (a) { + return angular.isDefined(a.index) ? +a.index : k.indexOf(a) + }, a.next = function () { + var b = (j.getCurrentIndex() + 1) % k.length; + return a.$currentTransition ? void 0 : j.select(d(b), "next") + }, a.prev = function () { + var b = j.getCurrentIndex() - 1 < 0 ? k.length - 1 : j.getCurrentIndex() - 1; + return a.$currentTransition ? void 0 : j.select(d(b), "prev") + }, a.isActive = function (a) { + return j.currentSlide === a + }, a.$watch("interval", e), a.$on("$destroy", f), a.play = function () { + i || (i = !0, e()) + }, a.pause = function () { + a.noPause || (i = !1, f()) + }, j.addSlide = function (b, c) { + b.$element = c, k.push(b), 1 === k.length || b.active ? (j.select(k[k.length - 1]), 1 == k.length && a.play()) : b.active = !1 + }, j.removeSlide = function (a) { + angular.isDefined(a.index) && k.sort(function (a, b) { + return +a.index > +b.index + }); + var b = k.indexOf(a); + k.splice(b, 1), k.length > 0 && a.active ? j.select(b >= k.length ? k[b - 1] : k[b]) : l > b && l-- + } +}]).directive("carousel", [function () { + return { + restrict: "EA", + transclude: !0, + replace: !0, + controller: "CarouselController", + require: "carousel", + templateUrl: "template/carousel/carousel.html", + scope: {interval: "=", noTransition: "=", noPause: "="} + } +}]).directive("slide", function () { + return { + require: "^carousel", + restrict: "EA", + transclude: !0, + replace: !0, + templateUrl: "template/carousel/slide.html", + scope: {active: "=?", index: "=?"}, + link: function (a, b, c, d) { + d.addSlide(a, b), a.$on("$destroy", function () { + d.removeSlide(a) + }), a.$watch("active", function (b) { + b && d.select(a) + }) + } + } +}).animation(".item", ["$animate", function (a) { + return { + beforeAddClass: function (b, c, d) { + if ("active" == c && b.parent() && !b.parent().scope().noTransition) { + var e = !1, f = b.isolateScope().direction, g = "next" == f ? "left" : "right"; + return b.addClass(f), a.addClass(b, g).then(function () { + e || b.removeClass(g + " " + f), d() + }), function () { + e = !0 + } + } + d() + }, beforeRemoveClass: function (b, c, d) { + if ("active" == c && b.parent() && !b.parent().scope().noTransition) { + var e = !1, f = b.isolateScope().direction, g = "next" == f ? "left" : "right"; + return a.addClass(b, g).then(function () { + e || b.removeClass(g), d() + }), function () { + e = !0 + } + } + d() + } + } +}]), angular.module("ui.bootstrap.dateparser", []).service("dateParser", ["$locale", "orderByFilter", function (a, b) { + function c(a) { + var c = [], d = a.split(""); + return angular.forEach(f, function (b, e) { + var f = a.indexOf(e); + if (f > -1) { + a = a.split(""), d[f] = "(" + b.regex + ")", a[f] = "$"; + for (var g = f + 1, h = f + e.length; h > g; g++)d[g] = "", a[g] = "$"; + a = a.join(""), c.push({index: f, apply: b.apply}) + } + }), {regex: new RegExp("^" + d.join("") + "$"), map: b(c, "index")} + } + + function d(a, b, c) { + return 1 > c ? !1 : 1 === b && c > 28 ? 29 === c && (a % 4 === 0 && a % 100 !== 0 || a % 400 === 0) : 3 === b || 5 === b || 8 === b || 10 === b ? 31 > c : !0 + } + + var e = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + this.parsers = {}; + var f = { + yyyy: { + regex: "\\d{4}", apply: function (a) { + this.year = +a + } + }, + yy: { + regex: "\\d{2}", apply: function (a) { + this.year = +a + 2e3 + } + }, + y: { + regex: "\\d{1,4}", apply: function (a) { + this.year = +a + } + }, + MMMM: { + regex: a.DATETIME_FORMATS.MONTH.join("|"), apply: function (b) { + this.month = a.DATETIME_FORMATS.MONTH.indexOf(b) + } + }, + MMM: { + regex: a.DATETIME_FORMATS.SHORTMONTH.join("|"), apply: function (b) { + this.month = a.DATETIME_FORMATS.SHORTMONTH.indexOf(b) + } + }, + MM: { + regex: "0[1-9]|1[0-2]", apply: function (a) { + this.month = a - 1 + } + }, + M: { + regex: "[1-9]|1[0-2]", apply: function (a) { + this.month = a - 1 + } + }, + dd: { + regex: "[0-2][0-9]{1}|3[0-1]{1}", apply: function (a) { + this.date = +a + } + }, + d: { + regex: "[1-2]?[0-9]{1}|3[0-1]{1}", apply: function (a) { + this.date = +a + } + }, + EEEE: {regex: a.DATETIME_FORMATS.DAY.join("|")}, + EEE: {regex: a.DATETIME_FORMATS.SHORTDAY.join("|")}, + HH: { + regex: "(?:0|1)[0-9]|2[0-3]", apply: function (a) { + this.hours = +a + } + }, + H: { + regex: "1?[0-9]|2[0-3]", apply: function (a) { + this.hours = +a + } + }, + mm: { + regex: "[0-5][0-9]", apply: function (a) { + this.minutes = +a + } + }, + m: { + regex: "[0-9]|[1-5][0-9]", apply: function (a) { + this.minutes = +a + } + }, + sss: { + regex: "[0-9][0-9][0-9]", apply: function (a) { + this.milliseconds = +a + } + }, + ss: { + regex: "[0-5][0-9]", apply: function (a) { + this.seconds = +a + } + }, + s: { + regex: "[0-9]|[1-5][0-9]", apply: function (a) { + this.seconds = +a + } + } + }; + this.parse = function (b, f, g) { + if (!angular.isString(b) || !f)return b; + f = a.DATETIME_FORMATS[f] || f, f = f.replace(e, "\\$&"), this.parsers[f] || (this.parsers[f] = c(f)); + var h = this.parsers[f], i = h.regex, j = h.map, k = b.match(i); + if (k && k.length) { + var l, m; + l = g ? { + year: g.getFullYear(), + month: g.getMonth(), + date: g.getDate(), + hours: g.getHours(), + minutes: g.getMinutes(), + seconds: g.getSeconds(), + milliseconds: g.getMilliseconds() + } : {year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0}; + for (var n = 1, o = k.length; o > n; n++) { + var p = j[n - 1]; + p.apply && p.apply.call(l, k[n]) + } + return d(l.year, l.month, l.date) && (m = new Date(l.year, l.month, l.date, l.hours, l.minutes, l.seconds, l.milliseconds || 0)), m + } + } +}]), angular.module("ui.bootstrap.position", []).factory("$position", ["$document", "$window", function (a, b) { + function c(a, c) { + return a.currentStyle ? a.currentStyle[c] : b.getComputedStyle ? b.getComputedStyle(a)[c] : a.style[c] + } + + function d(a) { + return "static" === (c(a, "position") || "static") + } + + var e = function (b) { + for (var c = a[0], e = b.offsetParent || c; e && e !== c && d(e);)e = e.offsetParent; + return e || c + }; + return { + position: function (b) { + var c = this.offset(b), d = {top: 0, left: 0}, f = e(b[0]); + f != a[0] && (d = this.offset(angular.element(f)), d.top += f.clientTop - f.scrollTop, d.left += f.clientLeft - f.scrollLeft); + var g = b[0].getBoundingClientRect(); + return { + width: g.width || b.prop("offsetWidth"), + height: g.height || b.prop("offsetHeight"), + top: c.top - d.top, + left: c.left - d.left + } + }, offset: function (c) { + var d = c[0].getBoundingClientRect(); + return { + width: d.width || c.prop("offsetWidth"), + height: d.height || c.prop("offsetHeight"), + top: d.top + (b.pageYOffset || a[0].documentElement.scrollTop), + left: d.left + (b.pageXOffset || a[0].documentElement.scrollLeft) + } + }, positionElements: function (a, b, c, d) { + var e, f, g, h, i = c.split("-"), j = i[0], k = i[1] || "center"; + e = d ? this.offset(a) : this.position(a), f = b.prop("offsetWidth"), g = b.prop("offsetHeight"); + var l = { + center: function () { + return e.left + e.width / 2 - f / 2 + }, left: function () { + return e.left + }, right: function () { + return e.left + e.width + } + }, m = { + center: function () { + return e.top + e.height / 2 - g / 2 + }, top: function () { + return e.top + }, bottom: function () { + return e.top + e.height + } + }; + switch (j) { + case"right": + h = {top: m[k](), left: l[j]()}; + break; + case"left": + h = {top: m[k](), left: e.left - f}; + break; + case"bottom": + h = {top: m[j](), left: l[k]()}; + break; + default: + h = {top: e.top - g, left: l[k]()} + } + return h + } + } +}]), angular.module("ui.bootstrap.datepicker", ["ui.bootstrap.dateparser", "ui.bootstrap.position"]).constant("datepickerConfig", { + formatDay: "dd", + formatMonth: "MMMM", + formatYear: "yyyy", + formatDayHeader: "EEE", + formatDayTitle: "MMMM yyyy", + formatMonthTitle: "yyyy", + datepickerMode: "day", + minMode: "day", + maxMode: "year", + showWeeks: !0, + startingDay: 0, + yearRange: 20, + minDate: null, + maxDate: null, + shortcutPropagation: !1 +}).controller("DatepickerController", ["$scope", "$attrs", "$parse", "$interpolate", "$timeout", "$log", "dateFilter", "datepickerConfig", function (a, b, c, d, e, f, g, h) { + var i = this, j = {$setViewValue: angular.noop}; + this.modes = ["day", "month", "year"], angular.forEach(["formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "minMode", "maxMode", "showWeeks", "startingDay", "yearRange", "shortcutPropagation"], function (c, e) { + i[c] = angular.isDefined(b[c]) ? 8 > e ? d(b[c])(a.$parent) : a.$parent.$eval(b[c]) : h[c] + }), angular.forEach(["minDate", "maxDate"], function (d) { + b[d] ? a.$parent.$watch(c(b[d]), function (a) { + i[d] = a ? new Date(a) : null, i.refreshView() + }) : i[d] = h[d] ? new Date(h[d]) : null + }), a.datepickerMode = a.datepickerMode || h.datepickerMode, a.maxMode = i.maxMode, a.uniqueId = "datepicker-" + a.$id + "-" + Math.floor(1e4 * Math.random()), angular.isDefined(b.initDate) ? (this.activeDate = a.$parent.$eval(b.initDate) || new Date, a.$parent.$watch(b.initDate, function (a) { + a && (j.$isEmpty(j.$modelValue) || j.$invalid) && (i.activeDate = a, i.refreshView()) + })) : this.activeDate = new Date, a.isActive = function (b) { + return 0 === i.compare(b.date, i.activeDate) ? (a.activeDateId = b.uid, !0) : !1 + }, this.init = function (a) { + j = a, j.$render = function () { + i.render() + } + }, this.render = function () { + if (j.$viewValue) { + var a = new Date(j.$viewValue), b = !isNaN(a); + b ? this.activeDate = a : f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'), j.$setValidity("date", b) + } + this.refreshView() + }, this.refreshView = function () { + if (this.element) { + this._refreshView(); + var a = j.$viewValue ? new Date(j.$viewValue) : null; + j.$setValidity("date-disabled", !a || this.element && !this.isDisabled(a)) + } + }, this.createDateObject = function (a, b) { + var c = j.$viewValue ? new Date(j.$viewValue) : null; + return { + date: a, + label: g(a, b), + selected: c && 0 === this.compare(a, c), + disabled: this.isDisabled(a), + current: 0 === this.compare(a, new Date), + customClass: this.customClass(a) + } + }, this.isDisabled = function (c) { + return this.minDate && this.compare(c, this.minDate) < 0 || this.maxDate && this.compare(c, this.maxDate) > 0 || b.dateDisabled && a.dateDisabled({ + date: c, + mode: a.datepickerMode + }) + }, this.customClass = function (b) { + return a.customClass({date: b, mode: a.datepickerMode}) + }, this.split = function (a, b) { + for (var c = []; a.length > 0;)c.push(a.splice(0, b)); + return c + }, a.select = function (b) { + if (a.datepickerMode === i.minMode) { + var c = j.$viewValue ? new Date(j.$viewValue) : new Date(0, 0, 0, 0, 0, 0, 0); + c.setFullYear(b.getFullYear(), b.getMonth(), b.getDate()), j.$setViewValue(c), j.$render() + } else i.activeDate = b, a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) - 1] + }, a.move = function (a) { + var b = i.activeDate.getFullYear() + a * (i.step.years || 0), c = i.activeDate.getMonth() + a * (i.step.months || 0); + i.activeDate.setFullYear(b, c, 1), i.refreshView() + }, a.toggleMode = function (b) { + b = b || 1, a.datepickerMode === i.maxMode && 1 === b || a.datepickerMode === i.minMode && -1 === b || (a.datepickerMode = i.modes[i.modes.indexOf(a.datepickerMode) + b]) + }, a.keys = { + 13: "enter", + 32: "space", + 33: "pageup", + 34: "pagedown", + 35: "end", + 36: "home", + 37: "left", + 38: "up", + 39: "right", + 40: "down" + }; + var k = function () { + e(function () { + i.element[0].focus() + }, 0, !1) + }; + a.$on("datepicker.focus", k), a.keydown = function (b) { + var c = a.keys[b.which]; + if (c && !b.shiftKey && !b.altKey)if (b.preventDefault(), i.shortcutPropagation || b.stopPropagation(), "enter" === c || "space" === c) { + if (i.isDisabled(i.activeDate))return; + a.select(i.activeDate), k() + } else!b.ctrlKey || "up" !== c && "down" !== c ? (i.handleKeyDown(c, b), i.refreshView()) : (a.toggleMode("up" === c ? 1 : -1), k()) + } +}]).directive("datepicker", function () { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/datepicker.html", + scope: {datepickerMode: "=?", dateDisabled: "&", customClass: "&", shortcutPropagation: "&?"}, + require: ["datepicker", "?^ngModel"], + controller: "DatepickerController", + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f && e.init(f) + } + } +}).directive("daypicker", ["dateFilter", function (a) { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/day.html", + require: "^datepicker", + link: function (b, c, d, e) { + function f(a, b) { + return 1 !== b || a % 4 !== 0 || a % 100 === 0 && a % 400 !== 0 ? i[b] : 29 + } + + function g(a, b) { + var c = new Array(b), d = new Date(a), e = 0; + for (d.setHours(12); b > e;)c[e++] = new Date(d), d.setDate(d.getDate() + 1); + return c + } + + function h(a) { + var b = new Date(a); + b.setDate(b.getDate() + 4 - (b.getDay() || 7)); + var c = b.getTime(); + return b.setMonth(0), b.setDate(1), Math.floor(Math.round((c - b) / 864e5) / 7) + 1 + } + + b.showWeeks = e.showWeeks, e.step = {months: 1}, e.element = c; + var i = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + e._refreshView = function () { + var c = e.activeDate.getFullYear(), d = e.activeDate.getMonth(), f = new Date(c, d, 1), i = e.startingDay - f.getDay(), j = i > 0 ? 7 - i : -i, k = new Date(f); + j > 0 && k.setDate(-j + 1); + for (var l = g(k, 42), m = 0; 42 > m; m++)l[m] = angular.extend(e.createDateObject(l[m], e.formatDay), { + secondary: l[m].getMonth() !== d, + uid: b.uniqueId + "-" + m + }); + b.labels = new Array(7); + for (var n = 0; 7 > n; n++)b.labels[n] = { + abbr: a(l[n].date, e.formatDayHeader), + full: a(l[n].date, "EEEE") + }; + if (b.title = a(e.activeDate, e.formatDayTitle), b.rows = e.split(l, 7), b.showWeeks) { + b.weekNumbers = []; + for (var o = (11 - e.startingDay) % 7, p = b.rows.length, q = 0; p > q; q++)b.weekNumbers.push(h(b.rows[q][o].date)) + } + }, e.compare = function (a, b) { + return new Date(a.getFullYear(), a.getMonth(), a.getDate()) - new Date(b.getFullYear(), b.getMonth(), b.getDate()) + }, e.handleKeyDown = function (a) { + var b = e.activeDate.getDate(); + if ("left" === a)b -= 1; else if ("up" === a)b -= 7; else if ("right" === a)b += 1; else if ("down" === a)b += 7; else if ("pageup" === a || "pagedown" === a) { + var c = e.activeDate.getMonth() + ("pageup" === a ? -1 : 1); + e.activeDate.setMonth(c, 1), b = Math.min(f(e.activeDate.getFullYear(), e.activeDate.getMonth()), b) + } else"home" === a ? b = 1 : "end" === a && (b = f(e.activeDate.getFullYear(), e.activeDate.getMonth())); + e.activeDate.setDate(b) + }, e.refreshView() + } + } +}]).directive("monthpicker", ["dateFilter", function (a) { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/month.html", + require: "^datepicker", + link: function (b, c, d, e) { + e.step = {years: 1}, e.element = c, e._refreshView = function () { + for (var c = new Array(12), d = e.activeDate.getFullYear(), f = 0; 12 > f; f++)c[f] = angular.extend(e.createDateObject(new Date(d, f, 1), e.formatMonth), {uid: b.uniqueId + "-" + f}); + b.title = a(e.activeDate, e.formatMonthTitle), b.rows = e.split(c, 3) + }, e.compare = function (a, b) { + return new Date(a.getFullYear(), a.getMonth()) - new Date(b.getFullYear(), b.getMonth()) + }, e.handleKeyDown = function (a) { + var b = e.activeDate.getMonth(); + if ("left" === a)b -= 1; else if ("up" === a)b -= 3; else if ("right" === a)b += 1; else if ("down" === a)b += 3; else if ("pageup" === a || "pagedown" === a) { + var c = e.activeDate.getFullYear() + ("pageup" === a ? -1 : 1); + e.activeDate.setFullYear(c) + } else"home" === a ? b = 0 : "end" === a && (b = 11); + e.activeDate.setMonth(b) + }, e.refreshView() + } + } +}]).directive("yearpicker", ["dateFilter", function () { + return { + restrict: "EA", + replace: !0, + templateUrl: "template/datepicker/year.html", + require: "^datepicker", + link: function (a, b, c, d) { + function e(a) { + return parseInt((a - 1) / f, 10) * f + 1 + } + + var f = d.yearRange; + d.step = {years: f}, d.element = b, d._refreshView = function () { + for (var b = new Array(f), c = 0, g = e(d.activeDate.getFullYear()); f > c; c++)b[c] = angular.extend(d.createDateObject(new Date(g + c, 0, 1), d.formatYear), {uid: a.uniqueId + "-" + c}); + a.title = [b[0].label, b[f - 1].label].join(" - "), a.rows = d.split(b, 5) + }, d.compare = function (a, b) { + return a.getFullYear() - b.getFullYear() + }, d.handleKeyDown = function (a) { + var b = d.activeDate.getFullYear(); + "left" === a ? b -= 1 : "up" === a ? b -= 5 : "right" === a ? b += 1 : "down" === a ? b += 5 : "pageup" === a || "pagedown" === a ? b += ("pageup" === a ? -1 : 1) * d.step.years : "home" === a ? b = e(d.activeDate.getFullYear()) : "end" === a && (b = e(d.activeDate.getFullYear()) + f - 1), d.activeDate.setFullYear(b) + }, d.refreshView() + } + } +}]).constant("datepickerPopupConfig", { + datepickerPopup: "yyyy-MM-dd", + html5Types: {date: "yyyy-MM-dd", "datetime-local": "yyyy-MM-ddTHH:mm:ss.sss", month: "yyyy-MM"}, + currentText: "Today", + clearText: "Clear", + closeText: "Done", + closeOnDateSelection: !0, + appendToBody: !1, + showButtonBar: !0 +}).directive("datepickerPopup", ["$compile", "$parse", "$document", "$position", "dateFilter", "dateParser", "datepickerPopupConfig", function (a, b, c, d, e, f, g) { + return { + restrict: "EA", + require: "ngModel", + scope: {isOpen: "=?", currentText: "@", clearText: "@", closeText: "@", dateDisabled: "&", customClass: "&"}, + link: function (h, i, j, k) { + function l(a) { + return a.replace(/([A-Z])/g, function (a) { + return "-" + a.toLowerCase() + }) + } + + function m(a) { + if (angular.isNumber(a) && (a = new Date(a)), a) { + if (angular.isDate(a) && !isNaN(a))return a; + if (angular.isString(a)) { + var b = f.parse(a, o, h.date) || new Date(a); + return isNaN(b) ? void 0 : b + } + return void 0 + } + return null + } + + function n(a, b) { + var c = a || b; + if (angular.isNumber(c) && (c = new Date(c)), c) { + if (angular.isDate(c) && !isNaN(c))return !0; + if (angular.isString(c)) { + var d = f.parse(c, o) || new Date(c); + return !isNaN(d) + } + return !1 + } + return !0 + } + + var o, p = angular.isDefined(j.closeOnDateSelection) ? h.$parent.$eval(j.closeOnDateSelection) : g.closeOnDateSelection, q = angular.isDefined(j.datepickerAppendToBody) ? h.$parent.$eval(j.datepickerAppendToBody) : g.appendToBody; + h.showButtonBar = angular.isDefined(j.showButtonBar) ? h.$parent.$eval(j.showButtonBar) : g.showButtonBar, h.getText = function (a) { + return h[a + "Text"] || g[a + "Text"] + }; + var r = !1; + if (g.html5Types[j.type] ? (o = g.html5Types[j.type], r = !0) : (o = j.datepickerPopup || g.datepickerPopup, j.$observe("datepickerPopup", function (a) { + var b = a || g.datepickerPopup; + if (b !== o && (o = b, k.$modelValue = null, !o))throw new Error("datepickerPopup must have a date format specified.") + })), !o)throw new Error("datepickerPopup must have a date format specified."); + if (r && j.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats."); + var s = angular.element("
    "); + s.attr({"ng-model": "date", "ng-change": "dateSelection()"}); + var t = angular.element(s.children()[0]); + if (r && "month" == j.type && (t.attr("datepicker-mode", '"month"'), t.attr("min-mode", "month")), j.datepickerOptions) { + var u = h.$parent.$eval(j.datepickerOptions); + u.initDate && (h.initDate = u.initDate, t.attr("init-date", "initDate"), delete u.initDate), angular.forEach(u, function (a, b) { + t.attr(l(b), a) + }) + } + h.watchData = {}, angular.forEach(["minDate", "maxDate", "datepickerMode", "initDate", "shortcutPropagation"], function (a) { + if (j[a]) { + var c = b(j[a]); + if (h.$parent.$watch(c, function (b) { + h.watchData[a] = b + }), t.attr(l(a), "watchData." + a), "datepickerMode" === a) { + var d = c.assign; + h.$watch("watchData." + a, function (a, b) { + a !== b && d(h.$parent, a) + }) + } + } + }), j.dateDisabled && t.attr("date-disabled", "dateDisabled({ date: date, mode: mode })"), j.showWeeks && t.attr("show-weeks", j.showWeeks), j.customClass && t.attr("custom-class", "customClass({ date: date, mode: mode })"), r ? k.$formatters.push(function (a) { + return h.date = a, a + }) : (k.$$parserName = "date", k.$validators.date = n, k.$parsers.unshift(m), k.$formatters.push(function (a) { + return h.date = a, k.$isEmpty(a) ? a : e(a, o) + })), h.dateSelection = function (a) { + angular.isDefined(a) && (h.date = a); + var b = h.date ? e(h.date, o) : ""; + i.val(b), k.$setViewValue(b), p && (h.isOpen = !1, i[0].focus()) + }, k.$viewChangeListeners.push(function () { + h.date = f.parse(k.$viewValue, o, h.date) || new Date(k.$viewValue) + }); + var v = function (a) { + h.isOpen && a.target !== i[0] && h.$apply(function () { + h.isOpen = !1 + }) + }, w = function (a) { + h.keydown(a) + }; + i.bind("keydown", w), h.keydown = function (a) { + 27 === a.which ? (a.preventDefault(), h.isOpen && a.stopPropagation(), h.close()) : 40 !== a.which || h.isOpen || (h.isOpen = !0) + }, h.$watch("isOpen", function (a) { + a ? (h.$broadcast("datepicker.focus"), h.position = q ? d.offset(i) : d.position(i), h.position.top = h.position.top + i.prop("offsetHeight"), c.bind("click", v)) : c.unbind("click", v) + }), h.select = function (a) { + if ("today" === a) { + var b = new Date; + angular.isDate(h.date) ? (a = new Date(h.date), a.setFullYear(b.getFullYear(), b.getMonth(), b.getDate())) : a = new Date(b.setHours(0, 0, 0, 0)) + } + h.dateSelection(a) + }, h.close = function () { + h.isOpen = !1, i[0].focus() + }; + var x = a(s)(h); + s.remove(), q ? c.find("body").append(x) : i.after(x), h.$on("$destroy", function () { + x.remove(), i.unbind("keydown", w), c.unbind("click", v) + }) + } + } +}]).directive("datepickerPopupWrap", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + templateUrl: "template/datepicker/popup.html", + link: function (a, b) { + b.bind("click", function (a) { + a.preventDefault(), a.stopPropagation() + }) + } + } +}), angular.module("ui.bootstrap.dropdown", ["ui.bootstrap.position"]).constant("dropdownConfig", {openClass: "open"}).service("dropdownService", ["$document", "$rootScope", function (a, b) { + var c = null; + this.open = function (b) { + c || (a.bind("click", d), a.bind("keydown", e)), c && c !== b && (c.isOpen = !1), c = b + }, this.close = function (b) { + c === b && (c = null, a.unbind("click", d), a.unbind("keydown", e)) + }; + var d = function (a) { + if (c && (!a || "disabled" !== c.getAutoClose())) { + var d = c.getToggleElement(); + if (!(a && d && d[0].contains(a.target))) { + var e = c.getElement(); + a && "outsideClick" === c.getAutoClose() && e && e[0].contains(a.target) || (c.isOpen = !1, b.$$phase || c.$apply()) + } + } + }, e = function (a) { + 27 === a.which && (c.focusToggleElement(), d()) + } +}]).controller("DropdownController", ["$scope", "$attrs", "$parse", "dropdownConfig", "dropdownService", "$animate", "$position", "$document", function (a, b, c, d, e, f, g, h) { + var i, j = this, k = a.$new(), l = d.openClass, m = angular.noop, n = b.onToggle ? c(b.onToggle) : angular.noop, o = !1; + this.init = function (d) { + j.$element = d, b.isOpen && (i = c(b.isOpen), m = i.assign, a.$watch(i, function (a) { + k.isOpen = !!a + })), o = angular.isDefined(b.dropdownAppendToBody), o && j.dropdownMenu && (h.find("body").append(j.dropdownMenu), d.on("$destroy", function () { + j.dropdownMenu.remove() + })) + }, this.toggle = function (a) { + return k.isOpen = arguments.length ? !!a : !k.isOpen + }, this.isOpen = function () { + return k.isOpen + }, k.getToggleElement = function () { + return j.toggleElement + }, k.getAutoClose = function () { + return b.autoClose || "always" + }, k.getElement = function () { + return j.$element + }, k.focusToggleElement = function () { + j.toggleElement && j.toggleElement[0].focus() + }, k.$watch("isOpen", function (b, c) { + if (o && j.dropdownMenu) { + var d = g.positionElements(j.$element, j.dropdownMenu, "bottom-left", !0); + j.dropdownMenu.css({top: d.top + "px", left: d.left + "px", display: b ? "block" : "none"}) + } + f[b ? "addClass" : "removeClass"](j.$element, l), b ? (k.focusToggleElement(), e.open(k)) : e.close(k), m(a, b), angular.isDefined(b) && b !== c && n(a, {open: !!b}) + }), a.$on("$locationChangeSuccess", function () { + k.isOpen = !1 + }), a.$on("$destroy", function () { + k.$destroy() + }) +}]).directive("dropdown", function () { + return { + controller: "DropdownController", link: function (a, b, c, d) { + d.init(b) + } + } +}).directive("dropdownMenu", function () { + return { + restrict: "AC", require: "?^dropdown", link: function (a, b, c, d) { + d && (d.dropdownMenu = b) + } + } +}).directive("dropdownToggle", function () { + return { + require: "?^dropdown", link: function (a, b, c, d) { + if (d) { + d.toggleElement = b; + var e = function (e) { + e.preventDefault(), b.hasClass("disabled") || c.disabled || a.$apply(function () { + d.toggle() + }) + }; + b.bind("click", e), b.attr({ + "aria-haspopup": !0, + "aria-expanded": !1 + }), a.$watch(d.isOpen, function (a) { + b.attr("aria-expanded", !!a) + }), a.$on("$destroy", function () { + b.unbind("click", e) + }) + } + } + } +}), angular.module("ui.bootstrap.modal", []).factory("$$stackedMap", function () { + return { + createNew: function () { + var a = []; + return { + add: function (b, c) { + a.push({key: b, value: c}) + }, get: function (b) { + for (var c = 0; c < a.length; c++)if (b == a[c].key)return a[c] + }, keys: function () { + for (var b = [], c = 0; c < a.length; c++)b.push(a[c].key); + return b + }, top: function () { + return a[a.length - 1] + }, remove: function (b) { + for (var c = -1, d = 0; d < a.length; d++)if (b == a[d].key) { + c = d; + break + } + return a.splice(c, 1)[0] + }, removeTop: function () { + return a.splice(a.length - 1, 1)[0] + }, length: function () { + return a.length + } + } + } + } +}).directive("modalBackdrop", ["$timeout", function (a) { + function b(b) { + b.animate = !1, a(function () { + b.animate = !0 + }) + } + + return { + restrict: "EA", replace: !0, templateUrl: "template/modal/backdrop.html", compile: function (a, c) { + return a.addClass(c.backdropClass), b + } + } +}]).directive("modalWindow", ["$modalStack", "$q", function (a, b) { + return { + restrict: "EA", + scope: {index: "@", animate: "="}, + replace: !0, + transclude: !0, + templateUrl: function (a, b) { + return b.templateUrl || "template/modal/window.html" + }, + link: function (c, d, e) { + d.addClass(e.windowClass || ""), c.size = e.size, c.close = function (b) { + var c = a.getTop(); + c && c.value.backdrop && "static" != c.value.backdrop && b.target === b.currentTarget && (b.preventDefault(), b.stopPropagation(), a.dismiss(c.key, "backdrop click")) + }, c.$isRendered = !0; + var f = b.defer(); + e.$observe("modalRender", function (a) { + "true" == a && f.resolve() + }), f.promise.then(function () { + c.animate = !0; + var b = d[0].querySelectorAll("[autofocus]"); + b.length ? b[0].focus() : d[0].focus(); + var e = a.getTop(); + e && a.modalRendered(e.key) + }) + } + } +}]).directive("modalAnimationClass", [function () { + return { + compile: function (a, b) { + b.modalAnimation && a.addClass(b.modalAnimationClass) + } + } +}]).directive("modalTransclude", function () { + return { + link: function (a, b, c, d, e) { + e(a.$parent, function (a) { + b.empty(), b.append(a) + }) + } + } +}).factory("$modalStack", ["$animate", "$timeout", "$document", "$compile", "$rootScope", "$$stackedMap", function (a, b, c, d, e, f) { + function g() { + for (var a = -1, b = o.keys(), c = 0; c < b.length; c++)o.get(b[c]).value.backdrop && (a = c); + return a + } + + function h(a) { + var b = c.find("body").eq(0), d = o.get(a).value; + o.remove(a), j(d.modalDomEl, d.modalScope, function () { + b.toggleClass(n, o.length() > 0), i() + }) + } + + function i() { + if (l && -1 == g()) { + var a = m; + j(l, m, function () { + a = null + }), l = void 0, m = void 0 + } + } + + function j(c, d, f) { + function g() { + g.done || (g.done = !0, c.remove(), d.$destroy(), f && f()) + } + + d.animate = !1, c.attr("modal-animation") && a.enabled() ? c.one("$animate:close", function () { + e.$evalAsync(g) + }) : b(g) + } + + function k(a, b, c) { + return !a.value.modalScope.$broadcast("modal.closing", b, c).defaultPrevented + } + + var l, m, n = "modal-open", o = f.createNew(), p = {}; + return e.$watch(g, function (a) { + m && (m.index = a) + }), c.bind("keydown", function (a) { + var b; + 27 === a.which && (b = o.top(), b && b.value.keyboard && (a.preventDefault(), e.$apply(function () { + p.dismiss(b.key, "escape key press") + }))) + }), p.open = function (a, b) { + var f = c[0].activeElement; + o.add(a, { + deferred: b.deferred, + renderDeferred: b.renderDeferred, + modalScope: b.scope, + backdrop: b.backdrop, + keyboard: b.keyboard + }); + var h = c.find("body").eq(0), i = g(); + if (i >= 0 && !l) { + m = e.$new(!0), m.index = i; + var j = angular.element('
    '); + j.attr("backdrop-class", b.backdropClass), b.animation && j.attr("modal-animation", "true"), l = d(j)(m), h.append(l) + } + var k = angular.element('
    '); + k.attr({ + "template-url": b.windowTemplateUrl, + "window-class": b.windowClass, + size: b.size, + index: o.length() - 1, + animate: "animate" + }).html(b.content), b.animation && k.attr("modal-animation", "true"); + var p = d(k)(b.scope); + o.top().value.modalDomEl = p, o.top().value.modalOpener = f, h.append(p), h.addClass(n) + }, p.close = function (a, b) { + var c = o.get(a); + return c && k(c, b, !0) ? (c.value.deferred.resolve(b), h(a), c.value.modalOpener.focus(), !0) : !c + }, p.dismiss = function (a, b) { + var c = o.get(a); + return c && k(c, b, !1) ? (c.value.deferred.reject(b), h(a), c.value.modalOpener.focus(), !0) : !c + }, p.dismissAll = function (a) { + for (var b = this.getTop(); b && this.dismiss(b.key, a);)b = this.getTop() + }, p.getTop = function () { + return o.top() + }, p.modalRendered = function (a) { + var b = o.get(a); + b && b.value.renderDeferred.resolve() + }, p +}]).provider("$modal", function () { + var a = { + options: {animation: !0, backdrop: !0, keyboard: !0}, + $get: ["$injector", "$rootScope", "$q", "$templateRequest", "$controller", "$modalStack", function (b, c, d, e, f, g) { + function h(a) { + return a.template ? d.when(a.template) : e(angular.isFunction(a.templateUrl) ? a.templateUrl() : a.templateUrl) + } + + function i(a) { + var c = []; + return angular.forEach(a, function (a) { + (angular.isFunction(a) || angular.isArray(a)) && c.push(d.when(b.invoke(a))) + }), c + } + + var j = {}; + return j.open = function (b) { + var e = d.defer(), j = d.defer(), k = d.defer(), l = { + result: e.promise, + opened: j.promise, + rendered: k.promise, + close: function (a) { + return g.close(l, a) + }, + dismiss: function (a) { + return g.dismiss(l, a) + } + }; + if (b = angular.extend({}, a.options, b), b.resolve = b.resolve || {}, !b.template && !b.templateUrl)throw new Error("One of template or templateUrl options is required."); + var m = d.all([h(b)].concat(i(b.resolve))); + return m.then(function (a) { + var d = (b.scope || c).$new(); + d.$close = l.close, d.$dismiss = l.dismiss; + var h, i = {}, j = 1; + b.controller && (i.$scope = d, i.$modalInstance = l, angular.forEach(b.resolve, function (b, c) { + i[c] = a[j++] + }), h = f(b.controller, i), b.controllerAs && (d[b.controllerAs] = h)), g.open(l, { + scope: d, + deferred: e, + renderDeferred: k, + content: a[0], + animation: b.animation, + backdrop: b.backdrop, + keyboard: b.keyboard, + backdropClass: b.backdropClass, + windowClass: b.windowClass, + windowTemplateUrl: b.windowTemplateUrl, + size: b.size + }) + }, function (a) { + e.reject(a) + }), m.then(function () { + j.resolve(!0) + }, function (a) { + j.reject(a) + }), l + }, j + }] + }; + return a +}), angular.module("ui.bootstrap.pagination", []).controller("PaginationController", ["$scope", "$attrs", "$parse", function (a, b, c) { + var d = this, e = {$setViewValue: angular.noop}, f = b.numPages ? c(b.numPages).assign : angular.noop; + this.init = function (g, h) { + e = g, this.config = h, e.$render = function () { + d.render() + }, b.itemsPerPage ? a.$parent.$watch(c(b.itemsPerPage), function (b) { + d.itemsPerPage = parseInt(b, 10), a.totalPages = d.calculateTotalPages() + }) : this.itemsPerPage = h.itemsPerPage, a.$watch("totalItems", function () { + a.totalPages = d.calculateTotalPages() + }), a.$watch("totalPages", function (b) { + f(a.$parent, b), a.page > b ? a.selectPage(b) : e.$render() + }) + }, this.calculateTotalPages = function () { + var b = this.itemsPerPage < 1 ? 1 : Math.ceil(a.totalItems / this.itemsPerPage); + return Math.max(b || 0, 1) + }, this.render = function () { + a.page = parseInt(e.$viewValue, 10) || 1 + }, a.selectPage = function (b, c) { + a.page !== b && b > 0 && b <= a.totalPages && (c && c.target && c.target.blur(), e.$setViewValue(b), e.$render()) + }, a.getText = function (b) { + return a[b + "Text"] || d.config[b + "Text"] + }, a.noPrevious = function () { + return 1 === a.page + }, a.noNext = function () { + return a.page === a.totalPages + } +}]).constant("paginationConfig", { + itemsPerPage: 10, + boundaryLinks: !1, + directionLinks: !0, + firstText: "First", + previousText: "Previous", + nextText: "Next", + lastText: "Last", + rotate: !0 +}).directive("pagination", ["$parse", "paginationConfig", function (a, b) { + return { + restrict: "EA", + scope: {totalItems: "=", firstText: "@", previousText: "@", nextText: "@", lastText: "@"}, + require: ["pagination", "?ngModel"], + controller: "PaginationController", + templateUrl: "template/pagination/pagination.html", + replace: !0, + link: function (c, d, e, f) { + function g(a, b, c) { + return {number: a, text: b, active: c} + } + + function h(a, b) { + var c = [], d = 1, e = b, f = angular.isDefined(k) && b > k; + f && (l ? (d = Math.max(a - Math.floor(k / 2), 1), e = d + k - 1, e > b && (e = b, d = e - k + 1)) : (d = (Math.ceil(a / k) - 1) * k + 1, e = Math.min(d + k - 1, b))); + for (var h = d; e >= h; h++) { + var i = g(h, h, h === a); + c.push(i) + } + if (f && !l) { + if (d > 1) { + var j = g(d - 1, "...", !1); + c.unshift(j) + } + if (b > e) { + var m = g(e + 1, "...", !1); + c.push(m) + } + } + return c + } + + var i = f[0], j = f[1]; + if (j) { + var k = angular.isDefined(e.maxSize) ? c.$parent.$eval(e.maxSize) : b.maxSize, l = angular.isDefined(e.rotate) ? c.$parent.$eval(e.rotate) : b.rotate; + c.boundaryLinks = angular.isDefined(e.boundaryLinks) ? c.$parent.$eval(e.boundaryLinks) : b.boundaryLinks, c.directionLinks = angular.isDefined(e.directionLinks) ? c.$parent.$eval(e.directionLinks) : b.directionLinks, i.init(j, b), e.maxSize && c.$parent.$watch(a(e.maxSize), function (a) { + k = parseInt(a, 10), i.render() + }); + var m = i.render; + i.render = function () { + m(), c.page > 0 && c.page <= c.totalPages && (c.pages = h(c.page, c.totalPages)) + } + } + } + } +}]).constant("pagerConfig", { + itemsPerPage: 10, + previousText: "« Previous", + nextText: "Next »", + align: !0 +}).directive("pager", ["pagerConfig", function (a) { + return { + restrict: "EA", + scope: {totalItems: "=", previousText: "@", nextText: "@"}, + require: ["pager", "?ngModel"], + controller: "PaginationController", + templateUrl: "template/pagination/pager.html", + replace: !0, + link: function (b, c, d, e) { + var f = e[0], g = e[1]; + g && (b.align = angular.isDefined(d.align) ? b.$parent.$eval(d.align) : a.align, f.init(g, a)) + } + } +}]), angular.module("ui.bootstrap.tooltip", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).provider("$tooltip", function () { + function a(a) { + var b = /[A-Z]/g, c = "-"; + return a.replace(b, function (a, b) { + return (b ? c : "") + a.toLowerCase() + }) + } + + var b = {placement: "top", animation: !0, popupDelay: 0, useContentExp: !1}, c = { + mouseenter: "mouseleave", + click: "click", + focus: "blur" + }, d = {}; + this.options = function (a) { + angular.extend(d, a) + }, this.setTriggers = function (a) { + angular.extend(c, a) + }, this.$get = ["$window", "$compile", "$timeout", "$document", "$position", "$interpolate", function (e, f, g, h, i, j) { + return function (e, k, l, m) { + function n(a) { + var b = a || m.trigger || l, d = c[b] || b; + return {show: b, hide: d} + } + + m = angular.extend({}, b, d, m); + var o = a(e), p = j.startSymbol(), q = j.endSymbol(), r = "
    '; + return { + restrict: "EA", compile: function () { + var a = f(r); + return function (b, c, d) { + function f() { + E.isOpen ? l() : j() + } + + function j() { + (!D || b.$eval(d[k + "Enable"])) && (s(), E.popupDelay ? A || (A = g(o, E.popupDelay, !1), A.then(function (a) { + a() + })) : o()()) + } + + function l() { + b.$apply(function () { + p() + }) + } + + function o() { + return A = null, z && (g.cancel(z), z = null), (m.useContentExp ? E.contentExp() : E.content) ? (q(), x.css({ + top: 0, + left: 0, + display: "block" + }), E.$digest(), F(), E.isOpen = !0, E.$apply(), F) : angular.noop + } + + function p() { + E.isOpen = !1, g.cancel(A), A = null, E.animation ? z || (z = g(r, 500)) : r() + } + + function q() { + x && r(), y = E.$new(), x = a(y, function (a) { + B ? h.find("body").append(a) : c.after(a) + }), y.$watch(function () { + g(F, 0, !1) + }), m.useContentExp && y.$watch("contentExp()", function (a) { + !a && E.isOpen && p() + }) + } + + function r() { + z = null, x && (x.remove(), x = null), y && (y.$destroy(), y = null) + } + + function s() { + t(), u(), v() + } + + function t() { + E.popupClass = d[k + "Class"] + } + + function u() { + var a = d[k + "Placement"]; + E.placement = angular.isDefined(a) ? a : m.placement + } + + function v() { + var a = d[k + "PopupDelay"], b = parseInt(a, 10); + E.popupDelay = isNaN(b) ? m.popupDelay : b + } + + function w() { + var a = d[k + "Trigger"]; + G(), C = n(a), C.show === C.hide ? c.bind(C.show, f) : (c.bind(C.show, j), c.bind(C.hide, l)) + } + + var x, y, z, A, B = angular.isDefined(m.appendToBody) ? m.appendToBody : !1, C = n(void 0), D = angular.isDefined(d[k + "Enable"]), E = b.$new(!0), F = function () { + if (x) { + var a = i.positionElements(c, x, E.placement, B); + a.top += "px", a.left += "px", x.css(a) + } + }; + E.origScope = b, E.isOpen = !1, E.contentExp = function () { + return b.$eval(d[e]) + }, m.useContentExp || d.$observe(e, function (a) { + E.content = a, !a && E.isOpen && p() + }), d.$observe("disabled", function (a) { + a && E.isOpen && p() + }), d.$observe(k + "Title", function (a) { + E.title = a + }); + var G = function () { + c.unbind(C.show, j), c.unbind(C.hide, l) + }; + w(); + var H = b.$eval(d[k + "Animation"]); + E.animation = angular.isDefined(H) ? !!H : m.animation; + var I = b.$eval(d[k + "AppendToBody"]); + B = angular.isDefined(I) ? I : B, B && b.$on("$locationChangeSuccess", function () { + E.isOpen && p() + }), b.$on("$destroy", function () { + g.cancel(z), g.cancel(A), G(), r(), E = null + }) + } + } + } + } + }] +}).directive("tooltipTemplateTransclude", ["$animate", "$sce", "$compile", "$templateRequest", function (a, b, c, d) { + return { + link: function (e, f, g) { + var h, i, j, k = e.$eval(g.tooltipTemplateTranscludeScope), l = 0, m = function () { + i && (i.remove(), i = null), h && (h.$destroy(), h = null), j && (a.leave(j).then(function () { + i = null + }), i = j, j = null) + }; + e.$watch(b.parseAsResourceUrl(g.tooltipTemplateTransclude), function (b) { + var g = ++l; + b ? (d(b, !0).then(function (d) { + if (g === l) { + var e = k.$new(), i = d, n = c(i)(e, function (b) { + m(), a.enter(b, f) + }); + h = e, j = n, h.$emit("$includeContentLoaded", b) + } + }, function () { + g === l && (m(), e.$emit("$includeContentError", b)) + }), e.$emit("$includeContentRequested", b)) : m() + }), e.$on("$destroy", m) + } + } +}]).directive("tooltipClasses", function () { + return { + restrict: "A", link: function (a, b, c) { + a.placement && b.addClass(a.placement), a.popupClass && b.addClass(a.popupClass), a.animation() && b.addClass(c.tooltipAnimationClass) + } + } +}).directive("tooltipPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-popup.html" + } +}).directive("tooltip", ["$tooltip", function (a) { + return a("tooltip", "tooltip", "mouseenter") +}]).directive("tooltipTemplatePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {contentExp: "&", placement: "@", popupClass: "@", animation: "&", isOpen: "&", originScope: "&"}, + templateUrl: "template/tooltip/tooltip-template-popup.html" + } +}).directive("tooltipTemplate", ["$tooltip", function (a) { + return a("tooltipTemplate", "tooltip", "mouseenter", {useContentExp: !0}) +}]).directive("tooltipHtmlPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {contentExp: "&", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-html-popup.html" + } +}).directive("tooltipHtml", ["$tooltip", function (a) { + return a("tooltipHtml", "tooltip", "mouseenter", {useContentExp: !0}) +}]).directive("tooltipHtmlUnsafePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/tooltip/tooltip-html-unsafe-popup.html" + } +}).value("tooltipHtmlUnsafeSuppressDeprecated", !1).directive("tooltipHtmlUnsafe", ["$tooltip", "tooltipHtmlUnsafeSuppressDeprecated", "$log", function (a, b, c) { + return b || c.warn("tooltip-html-unsafe is now deprecated. Use tooltip-html or tooltip-template instead."), a("tooltipHtmlUnsafe", "tooltip", "mouseenter") +}]), angular.module("ui.bootstrap.popover", ["ui.bootstrap.tooltip"]).directive("popoverTemplatePopup", function () { + return { + restrict: "EA", + replace: !0, + scope: { + title: "@", + contentExp: "&", + placement: "@", + popupClass: "@", + animation: "&", + isOpen: "&", + originScope: "&" + }, + templateUrl: "template/popover/popover-template.html" + } +}).directive("popoverTemplate", ["$tooltip", function (a) { + return a("popoverTemplate", "popover", "click", {useContentExp: !0}) +}]).directive("popoverPopup", function () { + return { + restrict: "EA", + replace: !0, + scope: {title: "@", content: "@", placement: "@", popupClass: "@", animation: "&", isOpen: "&"}, + templateUrl: "template/popover/popover.html" + } +}).directive("popover", ["$tooltip", function (a) { + return a("popover", "popover", "click") +}]), angular.module("ui.bootstrap.progressbar", []).constant("progressConfig", { + animate: !0, + max: 100 +}).controller("ProgressController", ["$scope", "$attrs", "progressConfig", function (a, b, c) { + var d = this, e = angular.isDefined(b.animate) ? a.$parent.$eval(b.animate) : c.animate; + this.bars = [], a.max = angular.isDefined(a.max) ? a.max : c.max, this.addBar = function (b, c) { + e || c.css({transition: "none"}), this.bars.push(b), b.$watch("value", function (c) { + b.percent = +(100 * c / a.max).toFixed(2) + }), b.$on("$destroy", function () { + c = null, d.removeBar(b) + }) + }, this.removeBar = function (a) { + this.bars.splice(this.bars.indexOf(a), 1) + } +}]).directive("progress", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + controller: "ProgressController", + require: "progress", + scope: {}, + templateUrl: "template/progressbar/progress.html" + } +}).directive("bar", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + require: "^progress", + scope: {value: "=", max: "=?", type: "@"}, + templateUrl: "template/progressbar/bar.html", + link: function (a, b, c, d) { + d.addBar(a, b) + } + } +}).directive("progressbar", function () { + return { + restrict: "EA", + replace: !0, + transclude: !0, + controller: "ProgressController", + scope: {value: "=", max: "=?", type: "@"}, + templateUrl: "template/progressbar/progressbar.html", + link: function (a, b, c, d) { + d.addBar(a, angular.element(b.children()[0])) + } + } +}), angular.module("ui.bootstrap.rating", []).constant("ratingConfig", { + max: 5, + stateOn: null, + stateOff: null +}).controller("RatingController", ["$scope", "$attrs", "ratingConfig", function (a, b, c) { + var d = {$setViewValue: angular.noop}; + this.init = function (e) { + d = e, d.$render = this.render, d.$formatters.push(function (a) { + return angular.isNumber(a) && a << 0 !== a && (a = Math.round(a)), a + }), this.stateOn = angular.isDefined(b.stateOn) ? a.$parent.$eval(b.stateOn) : c.stateOn, this.stateOff = angular.isDefined(b.stateOff) ? a.$parent.$eval(b.stateOff) : c.stateOff; + var f = angular.isDefined(b.ratingStates) ? a.$parent.$eval(b.ratingStates) : new Array(angular.isDefined(b.max) ? a.$parent.$eval(b.max) : c.max); + a.range = this.buildTemplateObjects(f) + }, this.buildTemplateObjects = function (a) { + for (var b = 0, c = a.length; c > b; b++)a[b] = angular.extend({index: b}, { + stateOn: this.stateOn, + stateOff: this.stateOff + }, a[b]); + return a + }, a.rate = function (b) { + !a.readonly && b >= 0 && b <= a.range.length && (d.$setViewValue(b), d.$render()) + }, a.enter = function (b) { + a.readonly || (a.value = b), a.onHover({value: b}) + }, a.reset = function () { + a.value = d.$viewValue, a.onLeave() + }, a.onKeydown = function (b) { + /(37|38|39|40)/.test(b.which) && (b.preventDefault(), b.stopPropagation(), a.rate(a.value + (38 === b.which || 39 === b.which ? 1 : -1))) + }, this.render = function () { + a.value = d.$viewValue + } +}]).directive("rating", function () { + return { + restrict: "EA", + require: ["rating", "ngModel"], + scope: {readonly: "=?", onHover: "&", onLeave: "&"}, + controller: "RatingController", + templateUrl: "template/rating/rating.html", + replace: !0, + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + e.init(f) + } + } +}), angular.module("ui.bootstrap.tabs", []).controller("TabsetController", ["$scope", function (a) { + var b = this, c = b.tabs = a.tabs = []; + b.select = function (a) { + angular.forEach(c, function (b) { + b.active && b !== a && (b.active = !1, b.onDeselect()) + }), a.active = !0, a.onSelect() + }, b.addTab = function (a) { + c.push(a), 1 === c.length && a.active !== !1 ? a.active = !0 : a.active ? b.select(a) : a.active = !1 + }, b.removeTab = function (a) { + var e = c.indexOf(a); + if (a.active && c.length > 1 && !d) { + var f = e == c.length - 1 ? e - 1 : e + 1; + b.select(c[f]) + } + c.splice(e, 1) + }; + var d; + a.$on("$destroy", function () { + d = !0 + }) +}]).directive("tabset", function () { + return { + restrict: "EA", + transclude: !0, + replace: !0, + scope: {type: "@"}, + controller: "TabsetController", + templateUrl: "template/tabs/tabset.html", + link: function (a, b, c) { + a.vertical = angular.isDefined(c.vertical) ? a.$parent.$eval(c.vertical) : !1, a.justified = angular.isDefined(c.justified) ? a.$parent.$eval(c.justified) : !1 + } + } +}).directive("tab", ["$parse", "$log", function (a, b) { + return { + require: "^tabset", + restrict: "EA", + replace: !0, + templateUrl: "template/tabs/tab.html", + transclude: !0, + scope: {active: "=?", heading: "@", onSelect: "&select", onDeselect: "&deselect"}, + controller: function () { + }, + compile: function (c, d, e) { + return function (c, d, f, g) { + c.$watch("active", function (a) { + a && g.select(c) + }), c.disabled = !1, f.disable && c.$parent.$watch(a(f.disable), function (a) { + c.disabled = !!a + }), f.disabled && (b.warn('Use of "disabled" attribute has been deprecated, please use "disable"'), c.$parent.$watch(a(f.disabled), function (a) { + c.disabled = !!a + })), c.select = function () { + c.disabled || (c.active = !0) + }, g.addTab(c), c.$on("$destroy", function () { + g.removeTab(c) + }), c.$transcludeFn = e + } + } + } +}]).directive("tabHeadingTransclude", [function () { + return { + restrict: "A", require: "^tab", link: function (a, b) { + a.$watch("headingElement", function (a) { + a && (b.html(""), b.append(a)) + }) + } + } +}]).directive("tabContentTransclude", function () { + function a(a) { + return a.tagName && (a.hasAttribute("tab-heading") || a.hasAttribute("data-tab-heading") || "tab-heading" === a.tagName.toLowerCase() || "data-tab-heading" === a.tagName.toLowerCase()) + } + + return { + restrict: "A", require: "^tabset", link: function (b, c, d) { + var e = b.$eval(d.tabContentTransclude); + e.$transcludeFn(e.$parent, function (b) { + angular.forEach(b, function (b) { + a(b) ? e.headingElement = b : c.append(b) + }) + }) + } + } +}), angular.module("ui.bootstrap.timepicker", []).constant("timepickerConfig", { + hourStep: 1, + minuteStep: 1, + showMeridian: !0, + meridians: null, + readonlyInput: !1, + mousewheel: !0, + arrowkeys: !0 +}).controller("TimepickerController", ["$scope", "$attrs", "$parse", "$log", "$locale", "timepickerConfig", function (a, b, c, d, e, f) { + function g() { + var b = parseInt(a.hours, 10), c = a.showMeridian ? b > 0 && 13 > b : b >= 0 && 24 > b; + return c ? (a.showMeridian && (12 === b && (b = 0), a.meridian === p[1] && (b += 12)), b) : void 0 + } + + function h() { + var b = parseInt(a.minutes, 10); + return b >= 0 && 60 > b ? b : void 0 + } + + function i(a) { + return angular.isDefined(a) && a.toString().length < 2 ? "0" + a : a.toString() + } + + function j(a) { + k(), o.$setViewValue(new Date(n)), l(a) + } + + function k() { + o.$setValidity("time", !0), a.invalidHours = !1, a.invalidMinutes = !1 + } + + function l(b) { + var c = n.getHours(), d = n.getMinutes(); + a.showMeridian && (c = 0 === c || 12 === c ? 12 : c % 12), a.hours = "h" === b ? c : i(c), "m" !== b && (a.minutes = i(d)), a.meridian = n.getHours() < 12 ? p[0] : p[1] + } + + function m(a) { + var b = new Date(n.getTime() + 6e4 * a); + n.setHours(b.getHours(), b.getMinutes()), j() + } + + var n = new Date, o = {$setViewValue: angular.noop}, p = angular.isDefined(b.meridians) ? a.$parent.$eval(b.meridians) : f.meridians || e.DATETIME_FORMATS.AMPMS; + this.init = function (c, d) { + o = c, o.$render = this.render, o.$formatters.unshift(function (a) { + return a ? new Date(a) : null + }); + var e = d.eq(0), g = d.eq(1), h = angular.isDefined(b.mousewheel) ? a.$parent.$eval(b.mousewheel) : f.mousewheel; + h && this.setupMousewheelEvents(e, g); + var i = angular.isDefined(b.arrowkeys) ? a.$parent.$eval(b.arrowkeys) : f.arrowkeys; + i && this.setupArrowkeyEvents(e, g), a.readonlyInput = angular.isDefined(b.readonlyInput) ? a.$parent.$eval(b.readonlyInput) : f.readonlyInput, this.setupInputEvents(e, g) + }; + var q = f.hourStep; + b.hourStep && a.$parent.$watch(c(b.hourStep), function (a) { + q = parseInt(a, 10) + }); + var r = f.minuteStep; + b.minuteStep && a.$parent.$watch(c(b.minuteStep), function (a) { + r = parseInt(a, 10) + }), a.showMeridian = f.showMeridian, b.showMeridian && a.$parent.$watch(c(b.showMeridian), function (b) { + if (a.showMeridian = !!b, o.$error.time) { + var c = g(), d = h(); + angular.isDefined(c) && angular.isDefined(d) && (n.setHours(c), j()) + } else l() + }), this.setupMousewheelEvents = function (b, c) { + var d = function (a) { + a.originalEvent && (a = a.originalEvent); + var b = a.wheelDelta ? a.wheelDelta : -a.deltaY; + return a.detail || b > 0 + }; + b.bind("mousewheel wheel", function (b) { + a.$apply(d(b) ? a.incrementHours() : a.decrementHours()), b.preventDefault() + }), c.bind("mousewheel wheel", function (b) { + a.$apply(d(b) ? a.incrementMinutes() : a.decrementMinutes()), b.preventDefault() + }) + }, this.setupArrowkeyEvents = function (b, c) { + b.bind("keydown", function (b) { + 38 === b.which ? (b.preventDefault(), a.incrementHours(), a.$apply()) : 40 === b.which && (b.preventDefault(), a.decrementHours(), a.$apply()) + }), c.bind("keydown", function (b) { + 38 === b.which ? (b.preventDefault(), a.incrementMinutes(), a.$apply()) : 40 === b.which && (b.preventDefault(), a.decrementMinutes(), a.$apply()) + }) + }, this.setupInputEvents = function (b, c) { + if (a.readonlyInput)return a.updateHours = angular.noop, void(a.updateMinutes = angular.noop); + var d = function (b, c) { + o.$setViewValue(null), o.$setValidity("time", !1), angular.isDefined(b) && (a.invalidHours = b), angular.isDefined(c) && (a.invalidMinutes = c) + }; + a.updateHours = function () { + var a = g(); + angular.isDefined(a) ? (n.setHours(a), j("h")) : d(!0) + }, b.bind("blur", function () { + !a.invalidHours && a.hours < 10 && a.$apply(function () { + a.hours = i(a.hours) + }) + }), a.updateMinutes = function () { + var a = h(); + angular.isDefined(a) ? (n.setMinutes(a), j("m")) : d(void 0, !0) + }, c.bind("blur", function () { + !a.invalidMinutes && a.minutes < 10 && a.$apply(function () { + a.minutes = i(a.minutes) + }) + }) + }, this.render = function () { + var a = o.$viewValue; + isNaN(a) ? (o.$setValidity("time", !1), d.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')) : (a && (n = a), k(), l()) + }, a.incrementHours = function () { + m(60 * q) + }, a.decrementHours = function () { + m(60 * -q) + }, a.incrementMinutes = function () { + m(r) + }, a.decrementMinutes = function () { + m(-r) + }, a.toggleMeridian = function () { + m(720 * (n.getHours() < 12 ? 1 : -1)) + } +}]).directive("timepicker", function () { + return { + restrict: "EA", + require: ["timepicker", "?^ngModel"], + controller: "TimepickerController", + replace: !0, + scope: {}, + templateUrl: "template/timepicker/timepicker.html", + link: function (a, b, c, d) { + var e = d[0], f = d[1]; + f && e.init(f, b.find("input")) + } + } +}), angular.module("ui.bootstrap.transition", []).value("$transitionSuppressDeprecated", !1).factory("$transition", ["$q", "$timeout", "$rootScope", "$log", "$transitionSuppressDeprecated", function (a, b, c, d, e) { + function f(a) { + for (var b in a)if (void 0 !== h.style[b])return a[b] + } + + e || d.warn("$transition is now deprecated. Use $animate from ngAnimate instead."); + var g = function (d, e, f) { + f = f || {}; + var h = a.defer(), i = g[f.animation ? "animationEndEventName" : "transitionEndEventName"], j = function () { + c.$apply(function () { + d.unbind(i, j), h.resolve(d) + }) + }; + return i && d.bind(i, j), b(function () { + angular.isString(e) ? d.addClass(e) : angular.isFunction(e) ? e(d) : angular.isObject(e) && d.css(e), i || h.resolve(d) + }), h.promise.cancel = function () { + i && d.unbind(i, j), h.reject("Transition cancelled") + }, h.promise + }, h = document.createElement("trans"), i = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd", + transition: "transitionend" + }, j = { + WebkitTransition: "webkitAnimationEnd", + MozTransition: "animationend", + OTransition: "oAnimationEnd", + transition: "animationend" + }; + return g.transitionEndEventName = f(i), g.animationEndEventName = f(j), g +}]), angular.module("ui.bootstrap.typeahead", ["ui.bootstrap.position", "ui.bootstrap.bindHtml"]).factory("typeaheadParser", ["$parse", function (a) { + var b = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/; + return { + parse: function (c) { + var d = c.match(b); + if (!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "' + c + '".'); + return {itemName: d[3], source: a(d[4]), viewMapper: a(d[2] || d[1]), modelMapper: a(d[1])} + } + } +}]).directive("typeahead", ["$compile", "$parse", "$q", "$timeout", "$document", "$position", "typeaheadParser", function (a, b, c, d, e, f, g) { + var h = [9, 13, 27, 38, 40]; + return { + require: "ngModel", link: function (i, j, k, l) { + var m, n = i.$eval(k.typeaheadMinLength) || 1, o = i.$eval(k.typeaheadWaitMs) || 0, p = i.$eval(k.typeaheadEditable) !== !1, q = b(k.typeaheadLoading).assign || angular.noop, r = b(k.typeaheadOnSelect), s = k.typeaheadInputFormatter ? b(k.typeaheadInputFormatter) : void 0, t = k.typeaheadAppendToBody ? i.$eval(k.typeaheadAppendToBody) : !1, u = i.$eval(k.typeaheadFocusFirst) !== !1, v = b(k.ngModel).assign, w = g.parse(k.typeahead), x = i.$new(); + i.$on("$destroy", function () { + x.$destroy() + }); + var y = "typeahead-" + x.$id + "-" + Math.floor(1e4 * Math.random()); + j.attr({"aria-autocomplete": "list", "aria-expanded": !1, "aria-owns": y}); + var z = angular.element("
    "); + z.attr({ + id: y, + matches: "matches", + active: "activeIdx", + select: "select(activeIdx)", + query: "query", + position: "position" + }), angular.isDefined(k.typeaheadTemplateUrl) && z.attr("template-url", k.typeaheadTemplateUrl); + var A = function () { + x.matches = [], x.activeIdx = -1, j.attr("aria-expanded", !1) + }, B = function (a) { + return y + "-option-" + a + }; + x.$watch("activeIdx", function (a) { + 0 > a ? j.removeAttr("aria-activedescendant") : j.attr("aria-activedescendant", B(a)) + }); + var C = function (a) { + var b = {$viewValue: a}; + q(i, !0), c.when(w.source(i, b)).then(function (c) { + var d = a === l.$viewValue; + if (d && m)if (c && c.length > 0) { + x.activeIdx = u ? 0 : -1, x.matches.length = 0; + for (var e = 0; e < c.length; e++)b[w.itemName] = c[e], x.matches.push({ + id: B(e), + label: w.viewMapper(x, b), + model: c[e] + }); + x.query = a, x.position = t ? f.offset(j) : f.position(j), x.position.top = x.position.top + j.prop("offsetHeight"), j.attr("aria-expanded", !0) + } else A(); + d && q(i, !1) + }, function () { + A(), q(i, !1) + }) + }; + A(), x.query = void 0; + var D, E = function (a) { + D = d(function () { + C(a) + }, o) + }, F = function () { + D && d.cancel(D) + }; + l.$parsers.unshift(function (a) { + return m = !0, a && a.length >= n ? o > 0 ? (F(), E(a)) : C(a) : (q(i, !1), F(), A()), p ? a : a ? void l.$setValidity("editable", !1) : (l.$setValidity("editable", !0), a) + }), l.$formatters.push(function (a) { + var b, c, d = {}; + return p || l.$setValidity("editable", !0), s ? (d.$model = a, s(i, d)) : (d[w.itemName] = a, b = w.viewMapper(i, d), d[w.itemName] = void 0, c = w.viewMapper(i, d), b !== c ? b : a) + }), x.select = function (a) { + var b, c, e = {}; + e[w.itemName] = c = x.matches[a].model, b = w.modelMapper(i, e), v(i, b), l.$setValidity("editable", !0), l.$setValidity("parse", !0), r(i, { + $item: c, + $model: b, + $label: w.viewMapper(i, e) + }), A(), d(function () { + j[0].focus() + }, 0, !1) + }, j.bind("keydown", function (a) { + 0 !== x.matches.length && -1 !== h.indexOf(a.which) && (-1 != x.activeIdx || 13 !== a.which && 9 !== a.which) && (a.preventDefault(), 40 === a.which ? (x.activeIdx = (x.activeIdx + 1) % x.matches.length, x.$digest()) : 38 === a.which ? (x.activeIdx = (x.activeIdx > 0 ? x.activeIdx : x.matches.length) - 1, x.$digest()) : 13 === a.which || 9 === a.which ? x.$apply(function () { + x.select(x.activeIdx) + }) : 27 === a.which && (a.stopPropagation(), A(), x.$digest())) + }), j.bind("blur", function () { + m = !1 + }); + var G = function (a) { + j[0] !== a.target && (A(), x.$digest()) + }; + e.bind("click", G), i.$on("$destroy", function () { + e.unbind("click", G), t && H.remove(), z.remove() + }); + var H = a(z)(x); + t ? e.find("body").append(H) : j.after(H) + } + } +}]).directive("typeaheadPopup", function () { + return { + restrict: "EA", + scope: {matches: "=", query: "=", active: "=", position: "=", select: "&"}, + replace: !0, + templateUrl: "template/typeahead/typeahead-popup.html", + link: function (a, b, c) { + a.templateUrl = c.templateUrl, a.isOpen = function () { + return a.matches.length > 0 + }, a.isActive = function (b) { + return a.active == b + }, a.selectActive = function (b) { + a.active = b + }, a.selectMatch = function (b) { + a.select({activeIdx: b}) + } + } + } +}).directive("typeaheadMatch", ["$templateRequest", "$compile", "$parse", function (a, b, c) { + return { + restrict: "EA", scope: {index: "=", match: "=", query: "="}, link: function (d, e, f) { + var g = c(f.templateUrl)(d.$parent) || "template/typeahead/typeahead-match.html"; + a(g).then(function (a) { + b(a.trim())(d, function (a) { + e.replaceWith(a) + }) + }) + } + } +}]).filter("typeaheadHighlight", function () { + function a(a) { + return a.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1") + } + + return function (b, c) { + return c ? ("" + b).replace(new RegExp(a(c), "gi"), "$&") : b + } +}), angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function (a) { + a.put("template/accordion/accordion-group.html", '
    \n
    \n

    \n {{heading}}\n

    \n
    \n
    \n
    \n
    \n
    \n') +}]), angular.module("template/accordion/accordion.html", []).run(["$templateCache", function (a) { + a.put("template/accordion/accordion.html", '
    ') +}]), angular.module("template/alert/alert.html", []).run(["$templateCache", function (a) { + a.put("template/alert/alert.html", '\n') +}]), angular.module("template/carousel/carousel.html", []).run(["$templateCache", function (a) { + a.put("template/carousel/carousel.html", '\n') +}]), angular.module("template/carousel/slide.html", []).run(["$templateCache", function (a) { + a.put("template/carousel/slide.html", '
    \n') +}]), angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/datepicker.html", '
    \n \n \n \n
    ') +}]), angular.module("template/datepicker/day.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/day.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{label.abbr}}
    {{ weekNumbers[$index] }}\n \n
    \n') +}]), angular.module("template/datepicker/month.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/month.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n') +}]), angular.module("template/datepicker/popup.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/popup.html", '\n') +}]), angular.module("template/datepicker/year.html", []).run(["$templateCache", function (a) { + a.put("template/datepicker/year.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n') +}]), angular.module("template/modal/backdrop.html", []).run(["$templateCache", function (a) { + a.put("template/modal/backdrop.html", '\n') +}]), angular.module("template/modal/window.html", []).run(["$templateCache", function (a) { + a.put("template/modal/window.html", '\n') +}]), angular.module("template/pagination/pager.html", []).run(["$templateCache", function (a) { + a.put("template/pagination/pager.html", '') +}]), angular.module("template/pagination/pagination.html", []).run(["$templateCache", function (a) { + a.put("template/pagination/pagination.html", '') +}]), angular.module("template/tooltip/tooltip-html-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-html-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-html-unsafe-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/tooltip/tooltip-template-popup.html", []).run(["$templateCache", function (a) { + a.put("template/tooltip/tooltip-template-popup.html", '
    \n
    \n
    \n
    \n') +}]), angular.module("template/popover/popover-template.html", []).run(["$templateCache", function (a) { + a.put("template/popover/popover-template.html", '
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n') +}]), angular.module("template/popover/popover-window.html", []).run(["$templateCache", function (a) { + a.put("template/popover/popover-window.html", '
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n') +}]), angular.module("template/popover/popover.html", []).run(["$templateCache", function (a) { + a.put("template/popover/popover.html", '
    \n
    \n\n
    \n

    \n
    \n
    \n
    \n') +}]), angular.module("template/progressbar/bar.html", []).run(["$templateCache", function (a) { + a.put("template/progressbar/bar.html", '
    \n') +}]), angular.module("template/progressbar/progress.html", []).run(["$templateCache", function (a) { + a.put("template/progressbar/progress.html", '
    ') +}]), angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function (a) { + a.put("template/progressbar/progressbar.html", '
    \n
    \n
    \n') +}]), angular.module("template/rating/rating.html", []).run(["$templateCache", function (a) { + a.put("template/rating/rating.html", '\n \n ({{ $index < value ? \'*\' : \' \' }})\n \n') +}]), angular.module("template/tabs/tab.html", []).run(["$templateCache", function (a) { + a.put("template/tabs/tab.html", '
  • \n {{heading}}\n
  • \n') +}]), angular.module("template/tabs/tabset.html", []).run(["$templateCache", function (a) { + a.put("template/tabs/tabset.html", '
    \n \n
    \n
    \n
    \n
    \n
    \n') +}]), angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function (a) { + a.put("template/timepicker/timepicker.html", '\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
     
    \n \n :\n \n
     
    \n') +}]), angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function (a) { + a.put("template/typeahead/typeahead-match.html", '') +}]), angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function (a) { + a.put("template/typeahead/typeahead-popup.html", '\n') +}]), !angular.$$csp() && angular.element(document).find("head").prepend(''); diff --git a/apollo-portal/src/main/resources/static/vendor/angular/xeditable.min.js b/apollo-portal/src/main/resources/static/vendor/angular/xeditable.min.js index 6dbc447c6..9452c9bd6 100644 --- a/apollo-portal/src/main/resources/static/vendor/angular/xeditable.min.js +++ b/apollo-portal/src/main/resources/static/vendor/angular/xeditable.min.js @@ -1,6 +1,466 @@ /*! -angular-xeditable - 0.1.8 -Edit-in-place for angular.js -Build date: 2014-01-10 -*/ -angular.module("xeditable",[]).value("editableOptions",{theme:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(a){return a({directiveName:"editableBsdate",inputTpl:''})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(a){return a({directiveName:"editableBstime",inputTpl:"",render:function(){this.parent.render.call(this);var a=angular.element('
    ');a.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(a.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(a)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(a){return a({directiveName:"editableCheckbox",inputTpl:'',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap(""),this.inputEl.after(angular.element("").text(this.attrs.eTitle)))},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableChecklist",inputTpl:"",useCopy:!0,render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(c)}})}]),function(){var a="text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|");angular.forEach(a,function(a){var b="editable"+a.charAt(0).toUpperCase()+a.slice(1);angular.module("xeditable").directive(b,["editableDirectiveFactory",function(c){return c({directiveName:b,inputTpl:''})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(a){return a({directiveName:"editableRange",inputTpl:'',render:function(){this.parent.render.call(this),this.inputEl.after("{{$data}}")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableRadiolist",inputTpl:"",render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c='';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(c)},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(a){return a({directiveName:"editableSelect",inputTpl:"",autosubmit:function(){var a=this;a.inputEl.bind("change",function(){a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(a){return a({directiveName:"editableTextarea",inputTpl:"",addListeners:function(){var a=this;a.parent.addListeners.call(a),a.single&&"no"!==a.buttons&&a.autosubmit()},autosubmit:function(){var a=this;a.inputEl.bind("keydown",function(b){(b.ctrlKey||b.metaKey)&&13===b.keyCode&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(a,b){function c(a,c,d,e,f,g,h,i,j){var k,l,m=this;m.scope=a,m.elem=d,m.attrs=c,m.inputEl=null,m.editorEl=null,m.single=!0,m.error="",m.theme=f[g.theme]||f["default"],m.parent={},m.inputTpl="",m.directiveName="",m.useCopy=!1,m.single=null,m.buttons="right",m.init=function(b){if(m.single=b,m.name=c.eName||c[m.directiveName],!c[m.directiveName])throw"You should provide value for `"+m.directiveName+"` in editable element!";k=e(c[m.directiveName]),m.buttons=m.single?m.attrs.buttons||g.buttons:"no",c.eName&&m.scope.$watch("$data",function(a){m.scope.$form.$data[c.eName]=a}),c.onshow&&(m.onshow=function(){return m.catchError(e(c.onshow)(a))}),c.onhide&&(m.onhide=function(){return e(c.onhide)(a)}),c.oncancel&&(m.oncancel=function(){return e(c.oncancel)(a)}),c.onbeforesave&&(m.onbeforesave=function(){return m.catchError(e(c.onbeforesave)(a))}),c.onaftersave&&(m.onaftersave=function(){return m.catchError(e(c.onaftersave)(a))}),a.$parent.$watch(c[m.directiveName],function(){m.handleEmpty()})},m.render=function(){var a=m.theme;m.inputEl=angular.element(m.inputTpl),m.controlsEl=angular.element(a.controlsTpl),m.controlsEl.append(m.inputEl),"no"!==m.buttons&&(m.buttonsEl=angular.element(a.buttonsTpl),m.submitEl=angular.element(a.submitTpl),m.cancelEl=angular.element(a.cancelTpl),m.buttonsEl.append(m.submitEl).append(m.cancelEl),m.controlsEl.append(m.buttonsEl),m.inputEl.addClass("editable-has-buttons")),m.errorEl=angular.element(a.errorTpl),m.controlsEl.append(m.errorEl),m.editorEl=angular.element(m.single?a.formTpl:a.noformTpl),m.editorEl.append(m.controlsEl);for(var d in c.$attr)if(!(d.length<=1)){var e=!1,f=d.substring(1,2);if("e"===d.substring(0,1)&&f===f.toUpperCase()&&(e=d.substring(1),"Form"!==e&&"NgSubmit"!==e)){e=e.substring(0,1).toLowerCase()+b.camelToDash(e.substring(1));var h=""===c[d]?e:c[d];m.inputEl.attr(e,h)}}m.inputEl.addClass("editable-input"),m.inputEl.attr("ng-model","$data"),m.editorEl.addClass(b.camelToDash(m.directiveName)),m.single&&(m.editorEl.attr("editable-form","$form"),m.editorEl.attr("blur",m.attrs.blur||("no"===m.buttons?"cancel":g.blurElem))),angular.isFunction(a.postrender)&&a.postrender.call(m)},m.setLocalValue=function(){m.scope.$data=m.useCopy?angular.copy(k(a.$parent)):k(a.$parent)},m.show=function(){return m.setLocalValue(),m.render(),d.after(m.editorEl),i(m.editorEl)(a),m.addListeners(),d.addClass("editable-hide"),m.onshow()},m.hide=function(){return m.editorEl.remove(),d.removeClass("editable-hide"),m.onhide()},m.cancel=function(){m.oncancel()},m.addListeners=function(){m.inputEl.bind("keyup",function(a){if(m.single)switch(a.keyCode){case 27:m.scope.$apply(function(){m.scope.$form.$cancel()})}}),m.single&&"no"===m.buttons&&m.autosubmit(),m.editorEl.bind("click",function(a){1===a.which&&m.scope.$form.$visible&&(m.scope.$form._clicked=!0)})},m.setWaiting=function(a){a?(l=!m.inputEl.attr("disabled")&&!m.inputEl.attr("ng-disabled")&&!m.inputEl.attr("ng-enabled"),l&&(m.inputEl.attr("disabled","disabled"),m.buttonsEl&&m.buttonsEl.find("button").attr("disabled","disabled"))):l&&(m.inputEl.removeAttr("disabled"),m.buttonsEl&&m.buttonsEl.find("button").removeAttr("disabled"))},m.activate=function(){setTimeout(function(){var a=m.inputEl[0];"focus"===g.activate&&a.focus&&a.focus(),"select"===g.activate&&a.select&&a.select()},0)},m.setError=function(b){angular.isObject(b)||(a.$error=b,m.error=b)},m.catchError=function(a,b){return angular.isObject(a)&&b!==!0?j.when(a).then(angular.bind(this,function(a){this.catchError(a,!0)}),angular.bind(this,function(a){this.catchError(a,!0)})):b&&angular.isObject(a)&&a.status&&200!==a.status&&a.data&&angular.isString(a.data)?(this.setError(a.data),a=a.data):angular.isString(a)&&this.setError(a),a},m.save=function(){k.assign(a.$parent,angular.copy(m.scope.$data))},m.handleEmpty=function(){var b=k(a.$parent),c=null===b||void 0===b||""===b||angular.isArray(b)&&0===b.length;d.toggleClass("editable-empty",c)},m.autosubmit=angular.noop,m.onshow=angular.noop,m.onhide=angular.noop,m.oncancel=angular.noop,m.onbeforesave=angular.noop,m.onaftersave=angular.noop}return c.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableOptions","$rootScope","$compile","$q"],c}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController",function(a,b,c,d,e,f,g){return function(b){return{restrict:"A",scope:!0,require:[b.directiveName,"?^form"],controller:f,link:function(c,f,h,i){var j,k=i[0],l=!1;if(i[1])j=i[1],l=!0;else if(h.eForm){var m=a(h.eForm)(c);if(m)j=m,l=!0;else for(var n=0;n=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function a(a){var c;if(!(c=a.match(b)))throw"ng-options parse error";var d,e=c[2]||c[1],f=c[4]||c[6],g=c[5],h=(c[3]||"",c[2]?c[1]:f),i=c[7],j=c[8],k=j?c[8]:null;return void 0===g?(d=f+" in "+i,void 0!==j&&(d+=" track by "+k)):d="("+g+", "+f+") in "+i,{ngRepeat:d,locals:{valueName:f,keyName:g,valueFn:h,displayFn:e}}}var b=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return a}]),angular.module("xeditable").factory("editableThemes",function(){var a={"default":{formTpl:'
    ',noformTpl:'',controlsTpl:'',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs2:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:''},bs3:{formTpl:'
    ',noformTpl:'',controlsTpl:'
    ',inputTpl:"",errorTpl:'
    ',buttonsTpl:'',submitTpl:'',cancelTpl:'',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}};return a}); \ No newline at end of file + angular-xeditable - 0.1.8 + Edit-in-place for angular.js + Build date: 2014-01-10 + */ +angular.module("xeditable", []).value("editableOptions", { + theme: "default", + buttons: "right", + blurElem: "cancel", + blurForm: "ignore", + activate: "focus" +}), angular.module("xeditable").directive("editableBsdate", ["editableDirectiveFactory", function (a) { + return a({directiveName: "editableBsdate", inputTpl: ''}) +}]), angular.module("xeditable").directive("editableBstime", ["editableDirectiveFactory", function (a) { + return a({ + directiveName: "editableBstime", inputTpl: "", render: function () { + this.parent.render.call(this); + var a = angular.element('
    '); + a.attr("ng-model", this.inputEl.attr("ng-model")), this.inputEl.removeAttr("ng-model"), this.attrs.eNgChange && (a.attr("ng-change", this.inputEl.attr("ng-change")), this.inputEl.removeAttr("ng-change")), this.inputEl.wrap(a) + } + }) +}]), angular.module("xeditable").directive("editableCheckbox", ["editableDirectiveFactory", function (a) { + return a({ + directiveName: "editableCheckbox", inputTpl: '', render: function () { + this.parent.render.call(this), this.attrs.eTitle && (this.inputEl.wrap(""), this.inputEl.after(angular.element("").text(this.attrs.eTitle))) + }, autosubmit: function () { + var a = this; + a.inputEl.bind("change", function () { + setTimeout(function () { + a.scope.$apply(function () { + a.scope.$form.$submit() + }) + }, 500) + }) + } + }) +}]), angular.module("xeditable").directive("editableChecklist", ["editableDirectiveFactory", "editableNgOptionsParser", function (a, b) { + return a({ + directiveName: "editableChecklist", inputTpl: "", useCopy: !0, render: function () { + this.parent.render.call(this); + var a = b(this.attrs.eNgOptions), c = ''; + this.inputEl.removeAttr("ng-model"), this.inputEl.removeAttr("ng-options"), this.inputEl.html(c) + } + }) +}]), function () { + var a = "text|email|tel|number|url|search|color|date|datetime|time|month|week".split("|"); + angular.forEach(a, function (a) { + var b = "editable" + a.charAt(0).toUpperCase() + a.slice(1); + angular.module("xeditable").directive(b, ["editableDirectiveFactory", function (c) { + return c({directiveName: b, inputTpl: ''}) + }]) + }), angular.module("xeditable").directive("editableRange", ["editableDirectiveFactory", function (a) { + return a({ + directiveName: "editableRange", + inputTpl: '', + render: function () { + this.parent.render.call(this), this.inputEl.after("{{$data}}") + } + }) + }]) +}(), angular.module("xeditable").directive("editableRadiolist", ["editableDirectiveFactory", "editableNgOptionsParser", function (a, b) { + return a({ + directiveName: "editableRadiolist", inputTpl: "", render: function () { + this.parent.render.call(this); + var a = b(this.attrs.eNgOptions), c = ''; + this.inputEl.removeAttr("ng-model"), this.inputEl.removeAttr("ng-options"), this.inputEl.html(c) + }, autosubmit: function () { + var a = this; + a.inputEl.bind("change", function () { + setTimeout(function () { + a.scope.$apply(function () { + a.scope.$form.$submit() + }) + }, 500) + }) + } + }) +}]), angular.module("xeditable").directive("editableSelect", ["editableDirectiveFactory", function (a) { + return a({ + directiveName: "editableSelect", inputTpl: "", autosubmit: function () { + var a = this; + a.inputEl.bind("change", function () { + a.scope.$apply(function () { + a.scope.$form.$submit() + }) + }) + } + }) +}]), angular.module("xeditable").directive("editableTextarea", ["editableDirectiveFactory", function (a) { + return a({ + directiveName: "editableTextarea", inputTpl: "", addListeners: function () { + var a = this; + a.parent.addListeners.call(a), a.single && "no" !== a.buttons && a.autosubmit() + }, autosubmit: function () { + var a = this; + a.inputEl.bind("keydown", function (b) { + (b.ctrlKey || b.metaKey) && 13 === b.keyCode && a.scope.$apply(function () { + a.scope.$form.$submit() + }) + }) + } + }) +}]), angular.module("xeditable").factory("editableController", ["$q", "editableUtils", function (a, b) { + function c(a, c, d, e, f, g, h, i, j) { + var k, l, m = this; + m.scope = a, m.elem = d, m.attrs = c, m.inputEl = null, m.editorEl = null, m.single = !0, m.error = "", m.theme = f[g.theme] || f["default"], m.parent = {}, m.inputTpl = "", m.directiveName = "", m.useCopy = !1, m.single = null, m.buttons = "right", m.init = function (b) { + if (m.single = b, m.name = c.eName || c[m.directiveName], !c[m.directiveName])throw"You should provide value for `" + m.directiveName + "` in editable element!"; + k = e(c[m.directiveName]), m.buttons = m.single ? m.attrs.buttons || g.buttons : "no", c.eName && m.scope.$watch("$data", function (a) { + m.scope.$form.$data[c.eName] = a + }), c.onshow && (m.onshow = function () { + return m.catchError(e(c.onshow)(a)) + }), c.onhide && (m.onhide = function () { + return e(c.onhide)(a) + }), c.oncancel && (m.oncancel = function () { + return e(c.oncancel)(a) + }), c.onbeforesave && (m.onbeforesave = function () { + return m.catchError(e(c.onbeforesave)(a)) + }), c.onaftersave && (m.onaftersave = function () { + return m.catchError(e(c.onaftersave)(a)) + }), a.$parent.$watch(c[m.directiveName], function () { + m.handleEmpty() + }) + }, m.render = function () { + var a = m.theme; + m.inputEl = angular.element(m.inputTpl), m.controlsEl = angular.element(a.controlsTpl), m.controlsEl.append(m.inputEl), "no" !== m.buttons && (m.buttonsEl = angular.element(a.buttonsTpl), m.submitEl = angular.element(a.submitTpl), m.cancelEl = angular.element(a.cancelTpl), m.buttonsEl.append(m.submitEl).append(m.cancelEl), m.controlsEl.append(m.buttonsEl), m.inputEl.addClass("editable-has-buttons")), m.errorEl = angular.element(a.errorTpl), m.controlsEl.append(m.errorEl), m.editorEl = angular.element(m.single ? a.formTpl : a.noformTpl), m.editorEl.append(m.controlsEl); + for (var d in c.$attr)if (!(d.length <= 1)) { + var e = !1, f = d.substring(1, 2); + if ("e" === d.substring(0, 1) && f === f.toUpperCase() && (e = d.substring(1), "Form" !== e && "NgSubmit" !== e)) { + e = e.substring(0, 1).toLowerCase() + b.camelToDash(e.substring(1)); + var h = "" === c[d] ? e : c[d]; + m.inputEl.attr(e, h) + } + } + m.inputEl.addClass("editable-input"), m.inputEl.attr("ng-model", "$data"), m.editorEl.addClass(b.camelToDash(m.directiveName)), m.single && (m.editorEl.attr("editable-form", "$form"), m.editorEl.attr("blur", m.attrs.blur || ("no" === m.buttons ? "cancel" : g.blurElem))), angular.isFunction(a.postrender) && a.postrender.call(m) + }, m.setLocalValue = function () { + m.scope.$data = m.useCopy ? angular.copy(k(a.$parent)) : k(a.$parent) + }, m.show = function () { + return m.setLocalValue(), m.render(), d.after(m.editorEl), i(m.editorEl)(a), m.addListeners(), d.addClass("editable-hide"), m.onshow() + }, m.hide = function () { + return m.editorEl.remove(), d.removeClass("editable-hide"), m.onhide() + }, m.cancel = function () { + m.oncancel() + }, m.addListeners = function () { + m.inputEl.bind("keyup", function (a) { + if (m.single)switch (a.keyCode) { + case 27: + m.scope.$apply(function () { + m.scope.$form.$cancel() + }) + } + }), m.single && "no" === m.buttons && m.autosubmit(), m.editorEl.bind("click", function (a) { + 1 === a.which && m.scope.$form.$visible && (m.scope.$form._clicked = !0) + }) + }, m.setWaiting = function (a) { + a ? (l = !m.inputEl.attr("disabled") && !m.inputEl.attr("ng-disabled") && !m.inputEl.attr("ng-enabled"), l && (m.inputEl.attr("disabled", "disabled"), m.buttonsEl && m.buttonsEl.find("button").attr("disabled", "disabled"))) : l && (m.inputEl.removeAttr("disabled"), m.buttonsEl && m.buttonsEl.find("button").removeAttr("disabled")) + }, m.activate = function () { + setTimeout(function () { + var a = m.inputEl[0]; + "focus" === g.activate && a.focus && a.focus(), "select" === g.activate && a.select && a.select() + }, 0) + }, m.setError = function (b) { + angular.isObject(b) || (a.$error = b, m.error = b) + }, m.catchError = function (a, b) { + return angular.isObject(a) && b !== !0 ? j.when(a).then(angular.bind(this, function (a) { + this.catchError(a, !0) + }), angular.bind(this, function (a) { + this.catchError(a, !0) + })) : b && angular.isObject(a) && a.status && 200 !== a.status && a.data && angular.isString(a.data) ? (this.setError(a.data), a = a.data) : angular.isString(a) && this.setError(a), a + }, m.save = function () { + k.assign(a.$parent, angular.copy(m.scope.$data)) + }, m.handleEmpty = function () { + var b = k(a.$parent), c = null === b || void 0 === b || "" === b || angular.isArray(b) && 0 === b.length; + d.toggleClass("editable-empty", c) + }, m.autosubmit = angular.noop, m.onshow = angular.noop, m.onhide = angular.noop, m.oncancel = angular.noop, m.onbeforesave = angular.noop, m.onaftersave = angular.noop + } + + return c.$inject = ["$scope", "$attrs", "$element", "$parse", "editableThemes", "editableOptions", "$rootScope", "$compile", "$q"], c +}]), angular.module("xeditable").factory("editableDirectiveFactory", ["$parse", "$compile", "editableThemes", "$rootScope", "$document", "editableController", "editableFormController", function (a, b, c, d, e, f, g) { + return function (b) { + return { + restrict: "A", + scope: !0, + require: [b.directiveName, "?^form"], + controller: f, + link: function (c, f, h, i) { + var j, k = i[0], l = !1; + if (i[1])j = i[1], l = !0; else if (h.eForm) { + var m = a(h.eForm)(c); + if (m)j = m, l = !0; else for (var n = 0; n < e[0].forms.length; n++)if (e[0].forms[n].name === h.eForm) { + j = null, l = !0; + break + } + } + if (angular.forEach(b, function (a, b) { + void 0 !== k[b] && (k.parent[b] = k[b]) + }), angular.extend(k, b), k.init(!l), c.$editable = k, f.addClass("editable"), l)if (j) { + if (c.$form = j, !c.$form.$addEditable)throw"Form with editable elements should have `editable-form` attribute."; + c.$form.$addEditable(k) + } else d.$$editableBuffer = d.$$editableBuffer || {}, d.$$editableBuffer[h.eForm] = d.$$editableBuffer[h.eForm] || [], d.$$editableBuffer[h.eForm].push(k), c.$form = null; else c.$form = g(), c.$form.$addEditable(k), h.eForm && (c.$parent[h.eForm] = c.$form), h.eForm || (f.addClass("editable-click"), f.bind("click", function (a) { + a.preventDefault(), a.editable = k, c.$apply(function () { + c.$form.$show() + }) + })) + } + } + } +}]), angular.module("xeditable").factory("editableFormController", ["$parse", "$document", "$rootScope", "editablePromiseCollection", "editableUtils", function (a, b, c, d, e) { + var f = []; + b.bind("click", function (a) { + if (1 === a.which) { + for (var b = [], d = [], e = 0; e < f.length; e++)f[e]._clicked ? f[e]._clicked = !1 : f[e].$waiting || ("cancel" === f[e]._blur && b.push(f[e]), "submit" === f[e]._blur && d.push(f[e])); + (b.length || d.length) && c.$apply(function () { + angular.forEach(b, function (a) { + a.$cancel() + }), angular.forEach(d, function (a) { + a.$submit() + }) + }) + } + }); + var g = { + $addEditable: function (a) { + this.$editables.push(a), a.elem.bind("$destroy", angular.bind(this, this.$removeEditable, a)), a.scope.$form || (a.scope.$form = this), this.$visible && a.catchError(a.show()) + }, + $removeEditable: function (a) { + for (var b = 0; b < this.$editables.length; b++)if (this.$editables[b] === a)return this.$editables.splice(b, 1), void 0 + }, + $show: function () { + if (!this.$visible) { + this.$visible = !0; + var a = d(); + a.when(this.$onshow()), this.$setError(null, ""), angular.forEach(this.$editables, function (b) { + a.when(b.show()) + }), a.then({ + onWait: angular.bind(this, this.$setWaiting), + onTrue: angular.bind(this, this.$activate), + onFalse: angular.bind(this, this.$activate), + onString: angular.bind(this, this.$activate) + }), setTimeout(angular.bind(this, function () { + this._clicked = !1, -1 === e.indexOf(f, this) && f.push(this) + }), 0) + } + }, + $activate: function (a) { + var b; + if (this.$editables.length) { + if (angular.isString(a))for (b = 0; b < this.$editables.length; b++)if (this.$editables[b].name === a)return this.$editables[b].activate(), void 0; + for (b = 0; b < this.$editables.length; b++)if (this.$editables[b].error)return this.$editables[b].activate(), void 0; + this.$editables[0].activate() + } + }, + $hide: function () { + this.$visible && (this.$visible = !1, this.$onhide(), angular.forEach(this.$editables, function (a) { + a.hide() + }), e.arrayRemove(f, this)) + }, + $cancel: function () { + this.$visible && (this.$oncancel(), angular.forEach(this.$editables, function (a) { + a.cancel() + }), this.$hide()) + }, + $setWaiting: function (a) { + this.$waiting = !!a, angular.forEach(this.$editables, function (b) { + b.setWaiting(!!a) + }) + }, + $setError: function (a, b) { + angular.forEach(this.$editables, function (c) { + a && c.name !== a || c.setError(b) + }) + }, + $submit: function () { + function a(a) { + var b = d(); + b.when(this.$onbeforesave()), b.then({ + onWait: angular.bind(this, this.$setWaiting), + onTrue: a ? angular.bind(this, this.$save) : angular.bind(this, this.$hide), + onFalse: angular.bind(this, this.$hide), + onString: angular.bind(this, this.$activate) + }) + } + + if (!this.$waiting) { + this.$setError(null, ""); + var b = d(); + angular.forEach(this.$editables, function (a) { + b.when(a.onbeforesave()) + }), b.then({ + onWait: angular.bind(this, this.$setWaiting), + onTrue: angular.bind(this, a, !0), + onFalse: angular.bind(this, a, !1), + onString: angular.bind(this, this.$activate) + }) + } + }, + $save: function () { + angular.forEach(this.$editables, function (a) { + a.save() + }); + var a = d(); + a.when(this.$onaftersave()), angular.forEach(this.$editables, function (b) { + a.when(b.onaftersave()) + }), a.then({ + onWait: angular.bind(this, this.$setWaiting), + onTrue: angular.bind(this, this.$hide), + onFalse: angular.bind(this, this.$hide), + onString: angular.bind(this, this.$activate) + }) + }, + $onshow: angular.noop, + $oncancel: angular.noop, + $onhide: angular.noop, + $onbeforesave: angular.noop, + $onaftersave: angular.noop + }; + return function () { + return angular.extend({$editables: [], $visible: !1, $waiting: !1, $data: {}, _clicked: !1, _blur: null}, g) + } +}]), angular.module("xeditable").directive("editableForm", ["$rootScope", "$parse", "editableFormController", "editableOptions", function (a, b, c, d) { + return { + restrict: "A", require: ["form"], compile: function () { + return { + pre: function (b, d, e, f) { + var g, h = f[0]; + e.editableForm ? b[e.editableForm] && b[e.editableForm].$show ? (g = b[e.editableForm], angular.extend(h, g)) : (g = c(), b[e.editableForm] = g, angular.extend(g, h)) : (g = c(), angular.extend(h, g)); + var i = a.$$editableBuffer, j = h.$name; + j && i && i[j] && (angular.forEach(i[j], function (a) { + g.$addEditable(a) + }), delete i[j]) + }, post: function (a, c, e, f) { + var g; + g = e.editableForm && a[e.editableForm] && a[e.editableForm].$show ? a[e.editableForm] : f[0], e.onshow && (g.$onshow = angular.bind(g, b(e.onshow), a)), e.onhide && (g.$onhide = angular.bind(g, b(e.onhide), a)), e.oncancel && (g.$oncancel = angular.bind(g, b(e.oncancel), a)), e.shown && b(e.shown)(a) && g.$show(), g._blur = e.blur || d.blurForm, e.ngSubmit || e.submit || (e.onbeforesave && (g.$onbeforesave = function () { + return b(e.onbeforesave)(a, {$data: g.$data}) + }), e.onaftersave && (g.$onaftersave = function () { + return b(e.onaftersave)(a, {$data: g.$data}) + }), c.bind("submit", function (b) { + b.preventDefault(), a.$apply(function () { + g.$submit() + }) + })), c.bind("click", function (a) { + 1 === a.which && g.$visible && (g._clicked = !0) + }) + } + } + } + } +}]), angular.module("xeditable").factory("editablePromiseCollection", ["$q", function (a) { + function b() { + return { + promises: [], hasFalse: !1, hasString: !1, when: function (b, c) { + if (b === !1)this.hasFalse = !0; else if (!c && angular.isObject(b))this.promises.push(a.when(b)); else { + if (!angular.isString(b))return; + this.hasString = !0 + } + }, then: function (b) { + function c() { + h.hasString || h.hasFalse ? !h.hasString && h.hasFalse ? e() : f() : d() + } + + b = b || {}; + var d = b.onTrue || angular.noop, e = b.onFalse || angular.noop, f = b.onString || angular.noop, g = b.onWait || angular.noop, h = this; + this.promises.length ? (g(!0), a.all(this.promises).then(function (a) { + g(!1), angular.forEach(a, function (a) { + h.when(a, !0) + }), c() + }, function () { + g(!1), f() + })) : c() + } + } + } + + return b +}]), angular.module("xeditable").factory("editableUtils", [function () { + return { + indexOf: function (a, b) { + if (a.indexOf)return a.indexOf(b); + for (var c = 0; c < a.length; c++)if (b === a[c])return c; + return -1 + }, arrayRemove: function (a, b) { + var c = this.indexOf(a, b); + return c >= 0 && a.splice(c, 1), b + }, camelToDash: function (a) { + var b = /[A-Z]/g; + return a.replace(b, function (a, b) { + return (b ? "-" : "") + a.toLowerCase() + }) + }, dashToCamel: function (a) { + var b = /([\:\-\_]+(.))/g, c = /^moz([A-Z])/; + return a.replace(b, function (a, b, c, d) { + return d ? c.toUpperCase() : c + }).replace(c, "Moz$1") + } + } +}]), angular.module("xeditable").factory("editableNgOptionsParser", [function () { + function a(a) { + var c; + if (!(c = a.match(b)))throw"ng-options parse error"; + var d, e = c[2] || c[1], f = c[4] || c[6], g = c[5], h = (c[3] || "", c[2] ? c[1] : f), i = c[7], j = c[8], k = j ? c[8] : null; + return void 0 === g ? (d = f + " in " + i, void 0 !== j && (d += " track by " + k)) : d = "(" + g + ", " + f + ") in " + i, { + ngRepeat: d, + locals: {valueName: f, keyName: g, valueFn: h, displayFn: e} + } + } + + var b = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/; + return a +}]), angular.module("xeditable").factory("editableThemes", function () { + var a = { + "default": { + formTpl: '
    ', + noformTpl: '', + controlsTpl: '', + inputTpl: "", + errorTpl: '
    ', + buttonsTpl: '', + submitTpl: '', + cancelTpl: '' + }, + bs2: { + formTpl: '
    ', + noformTpl: '', + controlsTpl: '
    ', + inputTpl: "", + errorTpl: '
    ', + buttonsTpl: '', + submitTpl: '', + cancelTpl: '' + }, + bs3: { + formTpl: '
    ', + noformTpl: '', + controlsTpl: '
    ', + inputTpl: "", + errorTpl: '
    ', + buttonsTpl: '', + submitTpl: '', + cancelTpl: '', + buttonsClass: "", + inputClass: "", + postrender: function () { + switch (this.directiveName) { + case"editableText": + case"editableSelect": + case"editableTextarea": + case"editableEmail": + case"editableTel": + case"editableNumber": + case"editableUrl": + case"editableSearch": + case"editableDate": + case"editableDatetime": + case"editableTime": + case"editableMonth": + case"editableWeek": + if (this.inputEl.addClass("form-control"), this.theme.inputClass) { + if (this.inputEl.attr("multiple") && ("input-sm" === this.theme.inputClass || "input-lg" === this.theme.inputClass))break; + this.inputEl.addClass(this.theme.inputClass) + } + } + this.buttonsEl && this.theme.buttonsClass && this.buttonsEl.find("button").addClass(this.theme.buttonsClass) + } + } + }; + return a +}); diff --git a/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap-theme.min.css b/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap-theme.min.css index 9418604b4..07e486e3b 100755 --- a/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap-theme.min.css +++ b/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap-theme.min.css @@ -11,4 +11,478 @@ * Bootstrap v3.3.5 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-default.disabled,.btn-primary.disabled,.btn-success.disabled,.btn-info.disabled,.btn-warning.disabled,.btn-danger.disabled,.btn-default[disabled],.btn-primary[disabled],.btn-success[disabled],.btn-info[disabled],.btn-warning[disabled],.btn-danger[disabled],fieldset[disabled] .btn-default,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-info,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-danger{-webkit-box-shadow:none;box-shadow:none}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-o-linear-gradient(top, #fff 0, #e0e0e0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0));background-image:linear-gradient(to bottom, #fff 0, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-o-linear-gradient(top, #337ab7 0, #265a88 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#265a88));background-image:linear-gradient(to bottom, #337ab7 0, #265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #419641 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641));background-image:linear-gradient(to bottom, #5cb85c 0, #419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #2aabd2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2));background-image:linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #eb9316 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316));background-image:linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c12e2a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a));background-image:linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-o-linear-gradient(top, #fff 0, #f8f8f8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8));background-image:linear-gradient(to bottom, #fff 0, #f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2));background-image:linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-o-linear-gradient(top, #3c3c3c 0, #222 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222));background-image:linear-gradient(to bottom, #3c3c3c 0, #222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border-radius:4px}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-o-linear-gradient(top, #080808 0, #0f0f0f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f));background-image:linear-gradient(to bottom, #080808 0, #0f0f0f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc));background-image:linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #b9def0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0));background-image:linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0));background-image:linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-o-linear-gradient(top, #f2dede 0, #e7c3c3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3));background-image:linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5));background-image:linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-o-linear-gradient(top, #337ab7 0, #286090 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#286090));background-image:linear-gradient(to bottom, #337ab7 0, #286090 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-o-linear-gradient(top, #5cb85c 0, #449d44 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44));background-image:linear-gradient(to bottom, #5cb85c 0, #449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-o-linear-gradient(top, #5bc0de 0, #31b0d5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5));background-image:linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-o-linear-gradient(top, #f0ad4e 0, #ec971f 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f));background-image:linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-o-linear-gradient(top, #d9534f 0, #c9302c 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c));background-image:linear-gradient(to bottom, #d9534f 0, #c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2b669a 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2b669a));background-image:linear-gradient(to bottom, #337ab7 0, #2b669a 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8));background-image:linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-o-linear-gradient(top, #337ab7 0, #2e6da4 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4));background-image:linear-gradient(to bottom, #337ab7 0, #2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6));background-image:linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3));background-image:linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc));background-image:linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-o-linear-gradient(top, #f2dede 0, #ebcccc 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc));background-image:linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5));background-image:linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file + */ +.btn-default, .btn-primary, .btn-success, .btn-info, .btn-warning, .btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075) +} + +.btn-default:active, .btn-primary:active, .btn-success:active, .btn-info:active, .btn-warning:active, .btn-danger:active, .btn-default.active, .btn-primary.active, .btn-success.active, .btn-info.active, .btn-warning.active, .btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) +} + +.btn-default.disabled, .btn-primary.disabled, .btn-success.disabled, .btn-info.disabled, .btn-warning.disabled, .btn-danger.disabled, .btn-default[disabled], .btn-primary[disabled], .btn-success[disabled], .btn-info[disabled], .btn-warning[disabled], .btn-danger[disabled], fieldset[disabled] .btn-default, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-success, fieldset[disabled] .btn-info, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-default .badge, .btn-primary .badge, .btn-success .badge, .btn-info .badge, .btn-warning .badge, .btn-danger .badge { + text-shadow: none +} + +.btn:active, .btn.active { + background-image: none +} + +.btn-default { + background-image: -webkit-linear-gradient(top, #fff 0, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #dbdbdb; + text-shadow: 0 1px 0 #fff; + border-color: #ccc +} + +.btn-default:hover, .btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px +} + +.btn-default:active, .btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb +} + +.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none +} + +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #245580 +} + +.btn-primary:hover, .btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px +} + +.btn-primary:active, .btn-primary.active { + background-color: #265a88; + border-color: #245580 +} + +.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none +} + +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #3e8f3e +} + +.btn-success:hover, .btn-success:focus { + background-color: #419641; + background-position: 0 -15px +} + +.btn-success:active, .btn-success.active { + background-color: #419641; + border-color: #3e8f3e +} + +.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none +} + +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #28a4c9 +} + +.btn-info:hover, .btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px +} + +.btn-info:active, .btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9 +} + +.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none +} + +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #e38d13 +} + +.btn-warning:hover, .btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px +} + +.btn-warning:active, .btn-warning.active { + background-color: #eb9316; + border-color: #e38d13 +} + +.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none +} + +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + background-repeat: repeat-x; + border-color: #b92c28 +} + +.btn-danger:hover, .btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px +} + +.btn-danger:active, .btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28 +} + +.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none +} + +.thumbnail, .img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) +} + +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + background-image: -webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-color: #e8e8e8 +} + +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + background-image: -webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-color: #2e6da4 +} + +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0, #f8f8f8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075) +} + +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0, #e2e2e2 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075) +} + +.navbar-brand, .navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25) +} + +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0, #222 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + border-radius: 4px +} + +.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0, #0f0f0f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25) +} + +.navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) +} + +.navbar-static-top, .navbar-fixed-top, .navbar-fixed-bottom { + border-radius: 0 +} + +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0) + } +} + +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05) +} + +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + border-color: #b2dba1 +} + +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0, #b9def0 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + border-color: #9acfea +} + +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + border-color: #f5e79e +} + +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + border-color: #dca7a7 +} + +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0) +} + +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0, #286090 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0) +} + +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0, #449d44 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0) +} + +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0) +} + +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0) +} + +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0, #c9302c 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0) +} + +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) +} + +.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0, #2b669a 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + border-color: #2b669a +} + +.list-group-item.active .badge, .list-group-item.active:hover .badge, .list-group-item.active:focus .badge { + text-shadow: none +} + +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) +} + +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0) +} + +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0, #2e6da4 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0) +} + +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0) +} + +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0) +} + +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0) +} + +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0, #ebcccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0) +} + +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1) +} diff --git a/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap.min.css b/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap.min.css index 42a3e7dba..da6845734 100755 --- a/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap.min.css +++ b/apollo-portal/src/main/resources/static/vendor/bootstrap/css/bootstrap.min.css @@ -11,4 +11,7198 @@ * Bootstrap v3.3.5 (http://getbootstrap.com) * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { + display: block +} + +audio, canvas, progress, video { + display: inline-block; + vertical-align: baseline +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden], template { + display: none +} + +a { + background-color: transparent +} + +a:active, a:hover { + outline: 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b, strong { + font-weight: bold +} + +dfn { + font-style: italic +} + +h1 { + font-size: 2em; + margin: 0.67em 0 +} + +mark { + background: #ff0; + color: #000 +} + +small { + font-size: 80% +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -0.5em +} + +sub { + bottom: -0.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 1em 40px +} + +hr { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0 +} + +pre { + overflow: auto +} + +code, kbd, pre, samp { + font-family: monospace, monospace; + font-size: 1em +} + +button, input, optgroup, select, textarea { + color: inherit; + font: inherit; + margin: 0 +} + +button { + overflow: visible +} + +button, select { + text-transform: none +} + +button, html input[type="button"], input[type="reset"], input[type="submit"] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled], html input[disabled] { + cursor: default +} + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0 +} + +input { + line-height: normal +} + +input[type="checkbox"], input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { + height: auto +} + +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em +} + +legend { + border: 0; + padding: 0 +} + +textarea { + overflow: auto +} + +optgroup { + font-weight: bold +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +td, th { + padding: 0 +} + +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, *:before, *:after { + background: transparent !important; + color: #000 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: none !important + } + + a, a:visited { + text-decoration: underline + } + + a[href]:after { + content: " (" attr(href) ")" + } + + abbr[title]:after { + content: " (" attr(title) ")" + } + + a[href^="#"]:after, a[href^="javascript:"]:after { + content: "" + } + + pre, blockquote { + border: 1px solid #999; + page-break-inside: avoid + } + + thead { + display: table-header-group + } + + tr, img { + page-break-inside: avoid + } + + img { + max-width: 100% !important + } + + p, h2, h3 { + orphans: 3; + widows: 3 + } + + h2, h3 { + page-break-after: avoid + } + + .navbar { + display: none + } + + .btn > .caret, .dropup > .btn > .caret { + border-top-color: #000 !important + } + + .label { + border: 1px solid #000 + } + + .table { + border-collapse: collapse !important + } + + .table td, .table th { + background-color: #fff !important + } + + .table-bordered th, .table-bordered td { + border: 1px solid #ddd !important + } +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg') +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.glyphicon-asterisk:before { + content: "\2a" +} + +.glyphicon-plus:before { + content: "\2b" +} + +.glyphicon-euro:before, .glyphicon-eur:before { + content: "\20ac" +} + +.glyphicon-minus:before { + content: "\2212" +} + +.glyphicon-cloud:before { + content: "\2601" +} + +.glyphicon-envelope:before { + content: "\2709" +} + +.glyphicon-pencil:before { + content: "\270f" +} + +.glyphicon-glass:before { + content: "\e001" +} + +.glyphicon-music:before { + content: "\e002" +} + +.glyphicon-search:before { + content: "\e003" +} + +.glyphicon-heart:before { + content: "\e005" +} + +.glyphicon-star:before { + content: "\e006" +} + +.glyphicon-star-empty:before { + content: "\e007" +} + +.glyphicon-user:before { + content: "\e008" +} + +.glyphicon-film:before { + content: "\e009" +} + +.glyphicon-th-large:before { + content: "\e010" +} + +.glyphicon-th:before { + content: "\e011" +} + +.glyphicon-th-list:before { + content: "\e012" +} + +.glyphicon-ok:before { + content: "\e013" +} + +.glyphicon-remove:before { + content: "\e014" +} + +.glyphicon-zoom-in:before { + content: "\e015" +} + +.glyphicon-zoom-out:before { + content: "\e016" +} + +.glyphicon-off:before { + content: "\e017" +} + +.glyphicon-signal:before { + content: "\e018" +} + +.glyphicon-cog:before { + content: "\e019" +} + +.glyphicon-trash:before { + content: "\e020" +} + +.glyphicon-home:before { + content: "\e021" +} + +.glyphicon-file:before { + content: "\e022" +} + +.glyphicon-time:before { + content: "\e023" +} + +.glyphicon-road:before { + content: "\e024" +} + +.glyphicon-download-alt:before { + content: "\e025" +} + +.glyphicon-download:before { + content: "\e026" +} + +.glyphicon-upload:before { + content: "\e027" +} + +.glyphicon-inbox:before { + content: "\e028" +} + +.glyphicon-play-circle:before { + content: "\e029" +} + +.glyphicon-repeat:before { + content: "\e030" +} + +.glyphicon-refresh:before { + content: "\e031" +} + +.glyphicon-list-alt:before { + content: "\e032" +} + +.glyphicon-lock:before { + content: "\e033" +} + +.glyphicon-flag:before { + content: "\e034" +} + +.glyphicon-headphones:before { + content: "\e035" +} + +.glyphicon-volume-off:before { + content: "\e036" +} + +.glyphicon-volume-down:before { + content: "\e037" +} + +.glyphicon-volume-up:before { + content: "\e038" +} + +.glyphicon-qrcode:before { + content: "\e039" +} + +.glyphicon-barcode:before { + content: "\e040" +} + +.glyphicon-tag:before { + content: "\e041" +} + +.glyphicon-tags:before { + content: "\e042" +} + +.glyphicon-book:before { + content: "\e043" +} + +.glyphicon-bookmark:before { + content: "\e044" +} + +.glyphicon-print:before { + content: "\e045" +} + +.glyphicon-camera:before { + content: "\e046" +} + +.glyphicon-font:before { + content: "\e047" +} + +.glyphicon-bold:before { + content: "\e048" +} + +.glyphicon-italic:before { + content: "\e049" +} + +.glyphicon-text-height:before { + content: "\e050" +} + +.glyphicon-text-width:before { + content: "\e051" +} + +.glyphicon-align-left:before { + content: "\e052" +} + +.glyphicon-align-center:before { + content: "\e053" +} + +.glyphicon-align-right:before { + content: "\e054" +} + +.glyphicon-align-justify:before { + content: "\e055" +} + +.glyphicon-list:before { + content: "\e056" +} + +.glyphicon-indent-left:before { + content: "\e057" +} + +.glyphicon-indent-right:before { + content: "\e058" +} + +.glyphicon-facetime-video:before { + content: "\e059" +} + +.glyphicon-picture:before { + content: "\e060" +} + +.glyphicon-map-marker:before { + content: "\e062" +} + +.glyphicon-adjust:before { + content: "\e063" +} + +.glyphicon-tint:before { + content: "\e064" +} + +.glyphicon-edit:before { + content: "\e065" +} + +.glyphicon-share:before { + content: "\e066" +} + +.glyphicon-check:before { + content: "\e067" +} + +.glyphicon-move:before { + content: "\e068" +} + +.glyphicon-step-backward:before { + content: "\e069" +} + +.glyphicon-fast-backward:before { + content: "\e070" +} + +.glyphicon-backward:before { + content: "\e071" +} + +.glyphicon-play:before { + content: "\e072" +} + +.glyphicon-pause:before { + content: "\e073" +} + +.glyphicon-stop:before { + content: "\e074" +} + +.glyphicon-forward:before { + content: "\e075" +} + +.glyphicon-fast-forward:before { + content: "\e076" +} + +.glyphicon-step-forward:before { + content: "\e077" +} + +.glyphicon-eject:before { + content: "\e078" +} + +.glyphicon-chevron-left:before { + content: "\e079" +} + +.glyphicon-chevron-right:before { + content: "\e080" +} + +.glyphicon-plus-sign:before { + content: "\e081" +} + +.glyphicon-minus-sign:before { + content: "\e082" +} + +.glyphicon-remove-sign:before { + content: "\e083" +} + +.glyphicon-ok-sign:before { + content: "\e084" +} + +.glyphicon-question-sign:before { + content: "\e085" +} + +.glyphicon-info-sign:before { + content: "\e086" +} + +.glyphicon-screenshot:before { + content: "\e087" +} + +.glyphicon-remove-circle:before { + content: "\e088" +} + +.glyphicon-ok-circle:before { + content: "\e089" +} + +.glyphicon-ban-circle:before { + content: "\e090" +} + +.glyphicon-arrow-left:before { + content: "\e091" +} + +.glyphicon-arrow-right:before { + content: "\e092" +} + +.glyphicon-arrow-up:before { + content: "\e093" +} + +.glyphicon-arrow-down:before { + content: "\e094" +} + +.glyphicon-share-alt:before { + content: "\e095" +} + +.glyphicon-resize-full:before { + content: "\e096" +} + +.glyphicon-resize-small:before { + content: "\e097" +} + +.glyphicon-exclamation-sign:before { + content: "\e101" +} + +.glyphicon-gift:before { + content: "\e102" +} + +.glyphicon-leaf:before { + content: "\e103" +} + +.glyphicon-fire:before { + content: "\e104" +} + +.glyphicon-eye-open:before { + content: "\e105" +} + +.glyphicon-eye-close:before { + content: "\e106" +} + +.glyphicon-warning-sign:before { + content: "\e107" +} + +.glyphicon-plane:before { + content: "\e108" +} + +.glyphicon-calendar:before { + content: "\e109" +} + +.glyphicon-random:before { + content: "\e110" +} + +.glyphicon-comment:before { + content: "\e111" +} + +.glyphicon-magnet:before { + content: "\e112" +} + +.glyphicon-chevron-up:before { + content: "\e113" +} + +.glyphicon-chevron-down:before { + content: "\e114" +} + +.glyphicon-retweet:before { + content: "\e115" +} + +.glyphicon-shopping-cart:before { + content: "\e116" +} + +.glyphicon-folder-close:before { + content: "\e117" +} + +.glyphicon-folder-open:before { + content: "\e118" +} + +.glyphicon-resize-vertical:before { + content: "\e119" +} + +.glyphicon-resize-horizontal:before { + content: "\e120" +} + +.glyphicon-hdd:before { + content: "\e121" +} + +.glyphicon-bullhorn:before { + content: "\e122" +} + +.glyphicon-bell:before { + content: "\e123" +} + +.glyphicon-certificate:before { + content: "\e124" +} + +.glyphicon-thumbs-up:before { + content: "\e125" +} + +.glyphicon-thumbs-down:before { + content: "\e126" +} + +.glyphicon-hand-right:before { + content: "\e127" +} + +.glyphicon-hand-left:before { + content: "\e128" +} + +.glyphicon-hand-up:before { + content: "\e129" +} + +.glyphicon-hand-down:before { + content: "\e130" +} + +.glyphicon-circle-arrow-right:before { + content: "\e131" +} + +.glyphicon-circle-arrow-left:before { + content: "\e132" +} + +.glyphicon-circle-arrow-up:before { + content: "\e133" +} + +.glyphicon-circle-arrow-down:before { + content: "\e134" +} + +.glyphicon-globe:before { + content: "\e135" +} + +.glyphicon-wrench:before { + content: "\e136" +} + +.glyphicon-tasks:before { + content: "\e137" +} + +.glyphicon-filter:before { + content: "\e138" +} + +.glyphicon-briefcase:before { + content: "\e139" +} + +.glyphicon-fullscreen:before { + content: "\e140" +} + +.glyphicon-dashboard:before { + content: "\e141" +} + +.glyphicon-paperclip:before { + content: "\e142" +} + +.glyphicon-heart-empty:before { + content: "\e143" +} + +.glyphicon-link:before { + content: "\e144" +} + +.glyphicon-phone:before { + content: "\e145" +} + +.glyphicon-pushpin:before { + content: "\e146" +} + +.glyphicon-usd:before { + content: "\e148" +} + +.glyphicon-gbp:before { + content: "\e149" +} + +.glyphicon-sort:before { + content: "\e150" +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151" +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152" +} + +.glyphicon-sort-by-order:before { + content: "\e153" +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154" +} + +.glyphicon-sort-by-attributes:before { + content: "\e155" +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156" +} + +.glyphicon-unchecked:before { + content: "\e157" +} + +.glyphicon-expand:before { + content: "\e158" +} + +.glyphicon-collapse-down:before { + content: "\e159" +} + +.glyphicon-collapse-up:before { + content: "\e160" +} + +.glyphicon-log-in:before { + content: "\e161" +} + +.glyphicon-flash:before { + content: "\e162" +} + +.glyphicon-log-out:before { + content: "\e163" +} + +.glyphicon-new-window:before { + content: "\e164" +} + +.glyphicon-record:before { + content: "\e165" +} + +.glyphicon-save:before { + content: "\e166" +} + +.glyphicon-open:before { + content: "\e167" +} + +.glyphicon-saved:before { + content: "\e168" +} + +.glyphicon-import:before { + content: "\e169" +} + +.glyphicon-export:before { + content: "\e170" +} + +.glyphicon-send:before { + content: "\e171" +} + +.glyphicon-floppy-disk:before { + content: "\e172" +} + +.glyphicon-floppy-saved:before { + content: "\e173" +} + +.glyphicon-floppy-remove:before { + content: "\e174" +} + +.glyphicon-floppy-save:before { + content: "\e175" +} + +.glyphicon-floppy-open:before { + content: "\e176" +} + +.glyphicon-credit-card:before { + content: "\e177" +} + +.glyphicon-transfer:before { + content: "\e178" +} + +.glyphicon-cutlery:before { + content: "\e179" +} + +.glyphicon-header:before { + content: "\e180" +} + +.glyphicon-compressed:before { + content: "\e181" +} + +.glyphicon-earphone:before { + content: "\e182" +} + +.glyphicon-phone-alt:before { + content: "\e183" +} + +.glyphicon-tower:before { + content: "\e184" +} + +.glyphicon-stats:before { + content: "\e185" +} + +.glyphicon-sd-video:before { + content: "\e186" +} + +.glyphicon-hd-video:before { + content: "\e187" +} + +.glyphicon-subtitles:before { + content: "\e188" +} + +.glyphicon-sound-stereo:before { + content: "\e189" +} + +.glyphicon-sound-dolby:before { + content: "\e190" +} + +.glyphicon-sound-5-1:before { + content: "\e191" +} + +.glyphicon-sound-6-1:before { + content: "\e192" +} + +.glyphicon-sound-7-1:before { + content: "\e193" +} + +.glyphicon-copyright-mark:before { + content: "\e194" +} + +.glyphicon-registration-mark:before { + content: "\e195" +} + +.glyphicon-cloud-download:before { + content: "\e197" +} + +.glyphicon-cloud-upload:before { + content: "\e198" +} + +.glyphicon-tree-conifer:before { + content: "\e199" +} + +.glyphicon-tree-deciduous:before { + content: "\e200" +} + +.glyphicon-cd:before { + content: "\e201" +} + +.glyphicon-save-file:before { + content: "\e202" +} + +.glyphicon-open-file:before { + content: "\e203" +} + +.glyphicon-level-up:before { + content: "\e204" +} + +.glyphicon-copy:before { + content: "\e205" +} + +.glyphicon-paste:before { + content: "\e206" +} + +.glyphicon-alert:before { + content: "\e209" +} + +.glyphicon-equalizer:before { + content: "\e210" +} + +.glyphicon-king:before { + content: "\e211" +} + +.glyphicon-queen:before { + content: "\e212" +} + +.glyphicon-pawn:before { + content: "\e213" +} + +.glyphicon-bishop:before { + content: "\e214" +} + +.glyphicon-knight:before { + content: "\e215" +} + +.glyphicon-baby-formula:before { + content: "\e216" +} + +.glyphicon-tent:before { + content: "\26fa" +} + +.glyphicon-blackboard:before { + content: "\e218" +} + +.glyphicon-bed:before { + content: "\e219" +} + +.glyphicon-apple:before { + content: "\f8ff" +} + +.glyphicon-erase:before { + content: "\e221" +} + +.glyphicon-hourglass:before { + content: "\231b" +} + +.glyphicon-lamp:before { + content: "\e223" +} + +.glyphicon-duplicate:before { + content: "\e224" +} + +.glyphicon-piggy-bank:before { + content: "\e225" +} + +.glyphicon-scissors:before { + content: "\e226" +} + +.glyphicon-bitcoin:before { + content: "\e227" +} + +.glyphicon-btc:before { + content: "\e227" +} + +.glyphicon-xbt:before { + content: "\e227" +} + +.glyphicon-yen:before { + content: "\00a5" +} + +.glyphicon-jpy:before { + content: "\00a5" +} + +.glyphicon-ruble:before { + content: "\20bd" +} + +.glyphicon-rub:before { + content: "\20bd" +} + +.glyphicon-scale:before { + content: "\e230" +} + +.glyphicon-ice-lolly:before { + content: "\e231" +} + +.glyphicon-ice-lolly-tasted:before { + content: "\e232" +} + +.glyphicon-education:before { + content: "\e233" +} + +.glyphicon-option-horizontal:before { + content: "\e234" +} + +.glyphicon-option-vertical:before { + content: "\e235" +} + +.glyphicon-menu-hamburger:before { + content: "\e236" +} + +.glyphicon-modal-window:before { + content: "\e237" +} + +.glyphicon-oil:before { + content: "\e238" +} + +.glyphicon-grain:before { + content: "\e239" +} + +.glyphicon-sunglasses:before { + content: "\e240" +} + +.glyphicon-text-size:before { + content: "\e241" +} + +.glyphicon-text-color:before { + content: "\e242" +} + +.glyphicon-text-background:before { + content: "\e243" +} + +.glyphicon-object-align-top:before { + content: "\e244" +} + +.glyphicon-object-align-bottom:before { + content: "\e245" +} + +.glyphicon-object-align-horizontal:before { + content: "\e246" +} + +.glyphicon-object-align-left:before { + content: "\e247" +} + +.glyphicon-object-align-vertical:before { + content: "\e248" +} + +.glyphicon-object-align-right:before { + content: "\e249" +} + +.glyphicon-triangle-right:before { + content: "\e250" +} + +.glyphicon-triangle-left:before { + content: "\e251" +} + +.glyphicon-triangle-bottom:before { + content: "\e252" +} + +.glyphicon-triangle-top:before { + content: "\e253" +} + +.glyphicon-console:before { + content: "\e254" +} + +.glyphicon-superscript:before { + content: "\e255" +} + +.glyphicon-subscript:before { + content: "\e256" +} + +.glyphicon-menu-left:before { + content: "\e257" +} + +.glyphicon-menu-right:before { + content: "\e258" +} + +.glyphicon-menu-down:before { + content: "\e259" +} + +.glyphicon-menu-up:before { + content: "\e260" +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +*:before, *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +html { + font-size: 10px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff +} + +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +a { + color: #337ab7; + text-decoration: none +} + +a:hover, a:focus { + color: #23527c; + text-decoration: underline +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +figure { + margin: 0 +} + +img { + vertical-align: middle +} + +.img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto +} + +.img-rounded { + border-radius: 6px +} + +.img-thumbnail { + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + display: inline-block; + max-width: 100%; + height: auto +} + +.img-circle { + border-radius: 50% +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0 +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto +} + +[role="button"] { + cursor: pointer +} + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit +} + +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { + font-weight: normal; + line-height: 1; + color: #777 +} + +h1, .h1, h2, .h2, h3, .h3 { + margin-top: 20px; + margin-bottom: 10px +} + +h1 small, .h1 small, h2 small, .h2 small, h3 small, .h3 small, h1 .small, .h1 .small, h2 .small, .h2 .small, h3 .small, .h3 .small { + font-size: 65% +} + +h4, .h4, h5, .h5, h6, .h6 { + margin-top: 10px; + margin-bottom: 10px +} + +h4 small, .h4 small, h5 small, .h5 small, h6 small, .h6 small, h4 .small, .h4 .small, h5 .small, .h5 .small, h6 .small, .h6 .small { + font-size: 75% +} + +h1, .h1 { + font-size: 36px +} + +h2, .h2 { + font-size: 30px +} + +h3, .h3 { + font-size: 24px +} + +h4, .h4 { + font-size: 18px +} + +h5, .h5 { + font-size: 14px +} + +h6, .h6 { + font-size: 12px +} + +p { + margin: 0 0 10px +} + +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4 +} + +@media (min-width: 768px) { + .lead { + font-size: 21px + } +} + +small, .small { + font-size: 85% +} + +mark, .mark { + background-color: #fcf8e3; + padding: .2em +} + +.text-left { + text-align: left +} + +.text-right { + text-align: right +} + +.text-center { + text-align: center +} + +.text-justify { + text-align: justify +} + +.text-nowrap { + white-space: nowrap +} + +.text-lowercase { + text-transform: lowercase +} + +.text-uppercase { + text-transform: uppercase +} + +.text-capitalize { + text-transform: capitalize +} + +.text-muted { + color: #777 +} + +.text-primary { + color: #337ab7 +} + +a.text-primary:hover, a.text-primary:focus { + color: #286090 +} + +.text-success { + color: #3c763d +} + +a.text-success:hover, a.text-success:focus { + color: #2b542c +} + +.text-info { + color: #31708f +} + +a.text-info:hover, a.text-info:focus { + color: #245269 +} + +.text-warning { + color: #8a6d3b +} + +a.text-warning:hover, a.text-warning:focus { + color: #66512c +} + +.text-danger { + color: #a94442 +} + +a.text-danger:hover, a.text-danger:focus { + color: #843534 +} + +.bg-primary { + color: #fff; + background-color: #337ab7 +} + +a.bg-primary:hover, a.bg-primary:focus { + background-color: #286090 +} + +.bg-success { + background-color: #dff0d8 +} + +a.bg-success:hover, a.bg-success:focus { + background-color: #c1e2b3 +} + +.bg-info { + background-color: #d9edf7 +} + +a.bg-info:hover, a.bg-info:focus { + background-color: #afd9ee +} + +.bg-warning { + background-color: #fcf8e3 +} + +a.bg-warning:hover, a.bg-warning:focus { + background-color: #f7ecb5 +} + +.bg-danger { + background-color: #f2dede +} + +a.bg-danger:hover, a.bg-danger:focus { + background-color: #e4b9b9 +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee +} + +ul, ol { + margin-top: 0; + margin-bottom: 10px +} + +ul ul, ol ul, ul ol, ol ol { + margin-bottom: 0 +} + +.list-unstyled { + padding-left: 0; + list-style: none +} + +.list-inline { + padding-left: 0; + list-style: none; + margin-left: -5px +} + +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px +} + +dl { + margin-top: 0; + margin-bottom: 20px +} + +dt, dd { + line-height: 1.42857143 +} + +dt { + font-weight: bold +} + +dd { + margin-left: 0 +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap + } + + .dl-horizontal dd { + margin-left: 180px + } +} + +abbr[title], abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777 +} + +.initialism { + font-size: 90%; + text-transform: uppercase +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee +} + +blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child { + margin-bottom: 0 +} + +blockquote footer, blockquote small, blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777 +} + +blockquote footer:before, blockquote small:before, blockquote .small:before { + content: '\2014 \00A0' +} + +.blockquote-reverse, blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eee; + border-left: 0; + text-align: right +} + +.blockquote-reverse footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before { + content: '' +} + +.blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small:after, blockquote.pull-right .small:after { + content: '\00A0 \2014' +} + +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143 +} + +code, kbd, pre, samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px +} + +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25) +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + word-break: break-all; + word-wrap: break-word; + color: #333; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0 +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll +} + +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px +} + +@media (min-width: 768px) { + .container { + width: 750px + } +} + +@media (min-width: 992px) { + .container { + width: 970px + } +} + +@media (min-width: 1200px) { + .container { + width: 1170px + } +} + +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px +} + +.row { + margin-left: -15px; + margin-right: -15px +} + +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left +} + +.col-xs-12 { + width: 100% +} + +.col-xs-11 { + width: 91.66666667% +} + +.col-xs-10 { + width: 83.33333333% +} + +.col-xs-9 { + width: 75% +} + +.col-xs-8 { + width: 66.66666667% +} + +.col-xs-7 { + width: 58.33333333% +} + +.col-xs-6 { + width: 50% +} + +.col-xs-5 { + width: 41.66666667% +} + +.col-xs-4 { + width: 33.33333333% +} + +.col-xs-3 { + width: 25% +} + +.col-xs-2 { + width: 16.66666667% +} + +.col-xs-1 { + width: 8.33333333% +} + +.col-xs-pull-12 { + right: 100% +} + +.col-xs-pull-11 { + right: 91.66666667% +} + +.col-xs-pull-10 { + right: 83.33333333% +} + +.col-xs-pull-9 { + right: 75% +} + +.col-xs-pull-8 { + right: 66.66666667% +} + +.col-xs-pull-7 { + right: 58.33333333% +} + +.col-xs-pull-6 { + right: 50% +} + +.col-xs-pull-5 { + right: 41.66666667% +} + +.col-xs-pull-4 { + right: 33.33333333% +} + +.col-xs-pull-3 { + right: 25% +} + +.col-xs-pull-2 { + right: 16.66666667% +} + +.col-xs-pull-1 { + right: 8.33333333% +} + +.col-xs-pull-0 { + right: auto +} + +.col-xs-push-12 { + left: 100% +} + +.col-xs-push-11 { + left: 91.66666667% +} + +.col-xs-push-10 { + left: 83.33333333% +} + +.col-xs-push-9 { + left: 75% +} + +.col-xs-push-8 { + left: 66.66666667% +} + +.col-xs-push-7 { + left: 58.33333333% +} + +.col-xs-push-6 { + left: 50% +} + +.col-xs-push-5 { + left: 41.66666667% +} + +.col-xs-push-4 { + left: 33.33333333% +} + +.col-xs-push-3 { + left: 25% +} + +.col-xs-push-2 { + left: 16.66666667% +} + +.col-xs-push-1 { + left: 8.33333333% +} + +.col-xs-push-0 { + left: auto +} + +.col-xs-offset-12 { + margin-left: 100% +} + +.col-xs-offset-11 { + margin-left: 91.66666667% +} + +.col-xs-offset-10 { + margin-left: 83.33333333% +} + +.col-xs-offset-9 { + margin-left: 75% +} + +.col-xs-offset-8 { + margin-left: 66.66666667% +} + +.col-xs-offset-7 { + margin-left: 58.33333333% +} + +.col-xs-offset-6 { + margin-left: 50% +} + +.col-xs-offset-5 { + margin-left: 41.66666667% +} + +.col-xs-offset-4 { + margin-left: 33.33333333% +} + +.col-xs-offset-3 { + margin-left: 25% +} + +.col-xs-offset-2 { + margin-left: 16.66666667% +} + +.col-xs-offset-1 { + margin-left: 8.33333333% +} + +.col-xs-offset-0 { + margin-left: 0 +} + +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left + } + + .col-sm-12 { + width: 100% + } + + .col-sm-11 { + width: 91.66666667% + } + + .col-sm-10 { + width: 83.33333333% + } + + .col-sm-9 { + width: 75% + } + + .col-sm-8 { + width: 66.66666667% + } + + .col-sm-7 { + width: 58.33333333% + } + + .col-sm-6 { + width: 50% + } + + .col-sm-5 { + width: 41.66666667% + } + + .col-sm-4 { + width: 33.33333333% + } + + .col-sm-3 { + width: 25% + } + + .col-sm-2 { + width: 16.66666667% + } + + .col-sm-1 { + width: 8.33333333% + } + + .col-sm-pull-12 { + right: 100% + } + + .col-sm-pull-11 { + right: 91.66666667% + } + + .col-sm-pull-10 { + right: 83.33333333% + } + + .col-sm-pull-9 { + right: 75% + } + + .col-sm-pull-8 { + right: 66.66666667% + } + + .col-sm-pull-7 { + right: 58.33333333% + } + + .col-sm-pull-6 { + right: 50% + } + + .col-sm-pull-5 { + right: 41.66666667% + } + + .col-sm-pull-4 { + right: 33.33333333% + } + + .col-sm-pull-3 { + right: 25% + } + + .col-sm-pull-2 { + right: 16.66666667% + } + + .col-sm-pull-1 { + right: 8.33333333% + } + + .col-sm-pull-0 { + right: auto + } + + .col-sm-push-12 { + left: 100% + } + + .col-sm-push-11 { + left: 91.66666667% + } + + .col-sm-push-10 { + left: 83.33333333% + } + + .col-sm-push-9 { + left: 75% + } + + .col-sm-push-8 { + left: 66.66666667% + } + + .col-sm-push-7 { + left: 58.33333333% + } + + .col-sm-push-6 { + left: 50% + } + + .col-sm-push-5 { + left: 41.66666667% + } + + .col-sm-push-4 { + left: 33.33333333% + } + + .col-sm-push-3 { + left: 25% + } + + .col-sm-push-2 { + left: 16.66666667% + } + + .col-sm-push-1 { + left: 8.33333333% + } + + .col-sm-push-0 { + left: auto + } + + .col-sm-offset-12 { + margin-left: 100% + } + + .col-sm-offset-11 { + margin-left: 91.66666667% + } + + .col-sm-offset-10 { + margin-left: 83.33333333% + } + + .col-sm-offset-9 { + margin-left: 75% + } + + .col-sm-offset-8 { + margin-left: 66.66666667% + } + + .col-sm-offset-7 { + margin-left: 58.33333333% + } + + .col-sm-offset-6 { + margin-left: 50% + } + + .col-sm-offset-5 { + margin-left: 41.66666667% + } + + .col-sm-offset-4 { + margin-left: 33.33333333% + } + + .col-sm-offset-3 { + margin-left: 25% + } + + .col-sm-offset-2 { + margin-left: 16.66666667% + } + + .col-sm-offset-1 { + margin-left: 8.33333333% + } + + .col-sm-offset-0 { + margin-left: 0 + } +} + +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left + } + + .col-md-12 { + width: 100% + } + + .col-md-11 { + width: 91.66666667% + } + + .col-md-10 { + width: 83.33333333% + } + + .col-md-9 { + width: 75% + } + + .col-md-8 { + width: 66.66666667% + } + + .col-md-7 { + width: 58.33333333% + } + + .col-md-6 { + width: 50% + } + + .col-md-5 { + width: 41.66666667% + } + + .col-md-4 { + width: 33.33333333% + } + + .col-md-3 { + width: 25% + } + + .col-md-2 { + width: 16.66666667% + } + + .col-md-1 { + width: 8.33333333% + } + + .col-md-pull-12 { + right: 100% + } + + .col-md-pull-11 { + right: 91.66666667% + } + + .col-md-pull-10 { + right: 83.33333333% + } + + .col-md-pull-9 { + right: 75% + } + + .col-md-pull-8 { + right: 66.66666667% + } + + .col-md-pull-7 { + right: 58.33333333% + } + + .col-md-pull-6 { + right: 50% + } + + .col-md-pull-5 { + right: 41.66666667% + } + + .col-md-pull-4 { + right: 33.33333333% + } + + .col-md-pull-3 { + right: 25% + } + + .col-md-pull-2 { + right: 16.66666667% + } + + .col-md-pull-1 { + right: 8.33333333% + } + + .col-md-pull-0 { + right: auto + } + + .col-md-push-12 { + left: 100% + } + + .col-md-push-11 { + left: 91.66666667% + } + + .col-md-push-10 { + left: 83.33333333% + } + + .col-md-push-9 { + left: 75% + } + + .col-md-push-8 { + left: 66.66666667% + } + + .col-md-push-7 { + left: 58.33333333% + } + + .col-md-push-6 { + left: 50% + } + + .col-md-push-5 { + left: 41.66666667% + } + + .col-md-push-4 { + left: 33.33333333% + } + + .col-md-push-3 { + left: 25% + } + + .col-md-push-2 { + left: 16.66666667% + } + + .col-md-push-1 { + left: 8.33333333% + } + + .col-md-push-0 { + left: auto + } + + .col-md-offset-12 { + margin-left: 100% + } + + .col-md-offset-11 { + margin-left: 91.66666667% + } + + .col-md-offset-10 { + margin-left: 83.33333333% + } + + .col-md-offset-9 { + margin-left: 75% + } + + .col-md-offset-8 { + margin-left: 66.66666667% + } + + .col-md-offset-7 { + margin-left: 58.33333333% + } + + .col-md-offset-6 { + margin-left: 50% + } + + .col-md-offset-5 { + margin-left: 41.66666667% + } + + .col-md-offset-4 { + margin-left: 33.33333333% + } + + .col-md-offset-3 { + margin-left: 25% + } + + .col-md-offset-2 { + margin-left: 16.66666667% + } + + .col-md-offset-1 { + margin-left: 8.33333333% + } + + .col-md-offset-0 { + margin-left: 0 + } +} + +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left + } + + .col-lg-12 { + width: 100% + } + + .col-lg-11 { + width: 91.66666667% + } + + .col-lg-10 { + width: 83.33333333% + } + + .col-lg-9 { + width: 75% + } + + .col-lg-8 { + width: 66.66666667% + } + + .col-lg-7 { + width: 58.33333333% + } + + .col-lg-6 { + width: 50% + } + + .col-lg-5 { + width: 41.66666667% + } + + .col-lg-4 { + width: 33.33333333% + } + + .col-lg-3 { + width: 25% + } + + .col-lg-2 { + width: 16.66666667% + } + + .col-lg-1 { + width: 8.33333333% + } + + .col-lg-pull-12 { + right: 100% + } + + .col-lg-pull-11 { + right: 91.66666667% + } + + .col-lg-pull-10 { + right: 83.33333333% + } + + .col-lg-pull-9 { + right: 75% + } + + .col-lg-pull-8 { + right: 66.66666667% + } + + .col-lg-pull-7 { + right: 58.33333333% + } + + .col-lg-pull-6 { + right: 50% + } + + .col-lg-pull-5 { + right: 41.66666667% + } + + .col-lg-pull-4 { + right: 33.33333333% + } + + .col-lg-pull-3 { + right: 25% + } + + .col-lg-pull-2 { + right: 16.66666667% + } + + .col-lg-pull-1 { + right: 8.33333333% + } + + .col-lg-pull-0 { + right: auto + } + + .col-lg-push-12 { + left: 100% + } + + .col-lg-push-11 { + left: 91.66666667% + } + + .col-lg-push-10 { + left: 83.33333333% + } + + .col-lg-push-9 { + left: 75% + } + + .col-lg-push-8 { + left: 66.66666667% + } + + .col-lg-push-7 { + left: 58.33333333% + } + + .col-lg-push-6 { + left: 50% + } + + .col-lg-push-5 { + left: 41.66666667% + } + + .col-lg-push-4 { + left: 33.33333333% + } + + .col-lg-push-3 { + left: 25% + } + + .col-lg-push-2 { + left: 16.66666667% + } + + .col-lg-push-1 { + left: 8.33333333% + } + + .col-lg-push-0 { + left: auto + } + + .col-lg-offset-12 { + margin-left: 100% + } + + .col-lg-offset-11 { + margin-left: 91.66666667% + } + + .col-lg-offset-10 { + margin-left: 83.33333333% + } + + .col-lg-offset-9 { + margin-left: 75% + } + + .col-lg-offset-8 { + margin-left: 66.66666667% + } + + .col-lg-offset-7 { + margin-left: 58.33333333% + } + + .col-lg-offset-6 { + margin-left: 50% + } + + .col-lg-offset-5 { + margin-left: 41.66666667% + } + + .col-lg-offset-4 { + margin-left: 33.33333333% + } + + .col-lg-offset-3 { + margin-left: 25% + } + + .col-lg-offset-2 { + margin-left: 16.66666667% + } + + .col-lg-offset-1 { + margin-left: 8.33333333% + } + + .col-lg-offset-0 { + margin-left: 0 + } +} + +table { + background-color: transparent +} + +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left +} + +th { + text-align: left +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px +} + +.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd +} + +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd +} + +.table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td { + border-top: 0 +} + +.table > tbody + tbody { + border-top: 2px solid #ddd +} + +.table .table { + background-color: #fff +} + +.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td { + padding: 5px +} + +.table-bordered { + border: 1px solid #ddd +} + +.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { + border: 1px solid #ddd +} + +.table-bordered > thead > tr > th, .table-bordered > thead > tr > td { + border-bottom-width: 2px +} + +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9 +} + +.table-hover > tbody > tr:hover { + background-color: #f5f5f5 +} + +table col[class*="col-"] { + position: static; + float: none; + display: table-column +} + +table td[class*="col-"], table th[class*="col-"] { + position: static; + float: none; + display: table-cell +} + +.table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { + background-color: #f5f5f5 +} + +.table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8 +} + +.table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { + background-color: #dff0d8 +} + +.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6 +} + +.table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th { + background-color: #d9edf7 +} + +.table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3 +} + +.table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { + background-color: #fcf8e3 +} + +.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc +} + +.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { + background-color: #f2dede +} + +.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc +} + +.table-responsive { + overflow-x: auto; + min-height: 0.01% +} + +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd + } + + .table-responsive > .table { + margin-bottom: 0 + } + + .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { + white-space: nowrap + } + + .table-responsive > .table-bordered { + border: 0 + } + + .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0 + } + + .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0 + } + + .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0 + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0 +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5 +} + +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +input[type="radio"], input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal +} + +input[type="file"] { + display: block +} + +input[type="range"] { + display: block; + width: 100% +} + +select[multiple], select[size] { + height: auto +} + +input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555 +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6) +} + +.form-control::-moz-placeholder { + color: #999; + opacity: 1 +} + +.form-control:-ms-input-placeholder { + color: #999 +} + +.form-control::-webkit-input-placeholder { + color: #999 +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1 +} + +.form-control[disabled], fieldset[disabled] .form-control { + cursor: not-allowed +} + +textarea.form-control { + height: auto +} + +input[type="search"] { + -webkit-appearance: none +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, input[type="time"].form-control, input[type="datetime-local"].form-control, input[type="month"].form-control { + line-height: 34px + } + + input[type="date"].input-sm, input[type="time"].input-sm, input[type="datetime-local"].input-sm, input[type="month"].input-sm, .input-group-sm input[type="date"], .input-group-sm input[type="time"], .input-group-sm input[type="datetime-local"], .input-group-sm input[type="month"] { + line-height: 30px + } + + input[type="date"].input-lg, input[type="time"].input-lg, input[type="datetime-local"].input-lg, input[type="month"].input-lg, .input-group-lg input[type="date"], .input-group-lg input[type="time"], .input-group-lg input[type="datetime-local"], .input-group-lg input[type="month"] { + line-height: 46px + } +} + +.form-group { + margin-bottom: 15px +} + +.radio, .checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px +} + +.radio label, .checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer +} + +.radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9 +} + +.radio + .radio, .checkbox + .checkbox { + margin-top: -5px +} + +.radio-inline, .checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer +} + +.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px +} + +input[type="radio"][disabled], input[type="checkbox"][disabled], input[type="radio"].disabled, input[type="checkbox"].disabled, fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed +} + +.radio-inline.disabled, .checkbox-inline.disabled, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox-inline { + cursor: not-allowed +} + +.radio.disabled label, .checkbox.disabled label, fieldset[disabled] .radio label, fieldset[disabled] .checkbox label { + cursor: not-allowed +} + +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; + min-height: 34px +} + +.form-control-static.input-lg, .form-control-static.input-sm { + padding-left: 0; + padding-right: 0 +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +select.input-sm { + height: 30px; + line-height: 30px +} + +textarea.input-sm, select[multiple].input-sm { + height: auto +} + +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.form-group-sm select.form-control { + height: 30px; + line-height: 30px +} + +.form-group-sm textarea.form-control, .form-group-sm select[multiple].form-control { + height: auto +} + +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5 +} + +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +select.input-lg { + height: 46px; + line-height: 46px +} + +textarea.input-lg, select[multiple].input-lg { + height: auto +} + +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +.form-group-lg select.form-control { + height: 46px; + line-height: 46px +} + +.form-group-lg textarea.form-control, .form-group-lg select[multiple].form-control { + height: auto +} + +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333 +} + +.has-feedback { + position: relative +} + +.has-feedback .form-control { + padding-right: 42.5px +} + +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none +} + +.input-lg + .form-control-feedback, .input-group-lg + .form-control-feedback, .form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px +} + +.input-sm + .form-control-feedback, .input-group-sm + .form-control-feedback, .form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px +} + +.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline, .has-success.radio label, .has-success.checkbox label, .has-success.radio-inline label, .has-success.checkbox-inline label { + color: #3c763d +} + +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075) +} + +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168 +} + +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8 +} + +.has-success .form-control-feedback { + color: #3c763d +} + +.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline, .has-warning.radio label, .has-warning.checkbox label, .has-warning.radio-inline label, .has-warning.checkbox-inline label { + color: #8a6d3b +} + +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075) +} + +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b +} + +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3 +} + +.has-warning .form-control-feedback { + color: #8a6d3b +} + +.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline, .has-error.radio label, .has-error.checkbox label, .has-error.radio-inline label, .has-error.checkbox-inline label { + color: #a94442 +} + +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075) +} + +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483 +} + +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede +} + +.has-error .form-control-feedback { + color: #a94442 +} + +.has-feedback label ~ .form-control-feedback { + top: 25px +} + +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0 +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373 +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + + .form-inline .form-control-static { + display: inline-block + } + + .form-inline .input-group { + display: inline-table; + vertical-align: middle + } + + .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn, .form-inline .input-group .form-control { + width: auto + } + + .form-inline .input-group > .form-control { + width: 100% + } + + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle + } + + .form-inline .radio, .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle + } + + .form-inline .radio label, .form-inline .checkbox label { + padding-left: 0 + } + + .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0 + } + + .form-inline .has-feedback .form-control-feedback { + top: 0 + } +} + +.form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px +} + +.form-horizontal .radio, .form-horizontal .checkbox { + min-height: 27px +} + +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px + } +} + +.form-horizontal .has-feedback .form-control-feedback { + right: 15px +} + +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + font-size: 18px + } +} + +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px + } +} + +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +.btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +.btn:hover, .btn:focus, .btn.focus { + color: #333; + text-decoration: none +} + +.btn:active, .btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) +} + +.btn.disabled, .btn[disabled], fieldset[disabled] .btn { + cursor: not-allowed; + opacity: .65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none +} + +a.btn.disabled, fieldset[disabled] a.btn { + pointer-events: none +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc +} + +.btn-default:focus, .btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c +} + +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad +} + +.btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad +} + +.btn-default:active:hover, .btn-default.active:hover, .open > .dropdown-toggle.btn-default:hover, .btn-default:active:focus, .btn-default.active:focus, .open > .dropdown-toggle.btn-default:focus, .btn-default:active.focus, .btn-default.active.focus, .open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c +} + +.btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + background-image: none +} + +.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled.focus, .btn-default[disabled].focus, fieldset[disabled] .btn-default.focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc +} + +.btn-default .badge { + color: #fff; + background-color: #333 +} + +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4 +} + +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40 +} + +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74 +} + +.btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74 +} + +.btn-primary:active:hover, .btn-primary.active:hover, .open > .dropdown-toggle.btn-primary:hover, .btn-primary:active:focus, .btn-primary.active:focus, .open > .dropdown-toggle.btn-primary:focus, .btn-primary:active.focus, .btn-primary.active.focus, .open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40 +} + +.btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { + background-image: none +} + +.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled.focus, .btn-primary[disabled].focus, fieldset[disabled] .btn-primary.focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4 +} + +.btn-primary .badge { + color: #337ab7; + background-color: #fff +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625 +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439 +} + +.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439 +} + +.btn-success:active:hover, .btn-success.active:hover, .open > .dropdown-toggle.btn-success:hover, .btn-success:active:focus, .btn-success.active:focus, .open > .dropdown-toggle.btn-success:focus, .btn-success:active.focus, .btn-success.active.focus, .open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625 +} + +.btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { + background-image: none +} + +.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled.focus, .btn-success[disabled].focus, fieldset[disabled] .btn-success.focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success .badge { + color: #5cb85c; + background-color: #fff +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85 +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc +} + +.btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc +} + +.btn-info:active:hover, .btn-info.active:hover, .open > .dropdown-toggle.btn-info:hover, .btn-info:active:focus, .btn-info.active:focus, .open > .dropdown-toggle.btn-info:focus, .btn-info:active.focus, .btn-info.active.focus, .open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85 +} + +.btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { + background-image: none +} + +.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled.focus, .btn-info[disabled].focus, fieldset[disabled] .btn-info.focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info .badge { + color: #5bc0de; + background-color: #fff +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning:focus, .btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512 +} + +.btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512 +} + +.btn-warning:active:hover, .btn-warning.active:hover, .open > .dropdown-toggle.btn-warning:hover, .btn-warning:active:focus, .btn-warning.active:focus, .open > .dropdown-toggle.btn-warning:focus, .btn-warning:active.focus, .btn-warning.active.focus, .open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d +} + +.btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { + background-image: none +} + +.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled.focus, .btn-warning[disabled].focus, fieldset[disabled] .btn-warning.focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19 +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925 +} + +.btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925 +} + +.btn-danger:active:hover, .btn-danger.active:hover, .open > .dropdown-toggle.btn-danger:hover, .btn-danger:active:focus, .btn-danger.active:focus, .open > .dropdown-toggle.btn-danger:focus, .btn-danger:active.focus, .btn-danger.active.focus, .open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19 +} + +.btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { + background-image: none +} + +.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled.focus, .btn-danger[disabled].focus, fieldset[disabled] .btn-danger.focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger .badge { + color: #d9534f; + background-color: #fff +} + +.btn-link { + color: #337ab7; + font-weight: normal; + border-radius: 0 +} + +.btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent +} + +.btn-link:hover, .btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent +} + +.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none +} + +.btn-lg, .btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +.btn-sm, .btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-xs, .btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-block { + display: block; + width: 100% +} + +.btn-block + .btn-block { + margin-top: 5px +} + +input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { + width: 100% +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear +} + +.fade.in { + opacity: 1 +} + +.collapse { + display: none +} + +.collapse.in { + display: block +} + +tr.collapse.in { + display: table-row +} + +tbody.collapse.in { + display: table-row-group +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent +} + +.dropup, .dropdown { + position: relative +} + +.dropdown-toggle:focus { + outline: 0 +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + -webkit-background-clip: padding-box; + background-clip: padding-box +} + +.dropdown-menu.pull-right { + right: 0; + left: auto +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap +} + +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5 +} + +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #337ab7 +} + +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #777 +} + +.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + cursor: not-allowed +} + +.open > .dropdown-menu { + display: block +} + +.open > a { + outline: 0 +} + +.dropdown-menu-right { + left: auto; + right: 0 +} + +.dropdown-menu-left { + left: 0; + right: auto +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap +} + +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990 +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto +} + +.dropup .caret, .navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; + content: "" +} + +.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + left: auto; + right: 0 + } + + .navbar-right .dropdown-menu-left { + left: 0; + right: auto + } +} + +.btn-group, .btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle +} + +.btn-group > .btn, .btn-group-vertical > .btn { + position: relative; + float: left +} + +.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { + z-index: 2 +} + +.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { + margin-left: -1px +} + +.btn-toolbar { + margin-left: -5px +} + +.btn-toolbar .btn, .btn-toolbar .btn-group, .btn-toolbar .input-group { + float: left +} + +.btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group { + margin-left: 5px +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0 +} + +.btn-group > .btn:first-child { + margin-left: 0 +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group > .btn-group { + float: left +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { + outline: 0 +} + +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) +} + +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none +} + +.btn .caret { + margin-left: 0 +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0 +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px +} + +.btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100% +} + +.btn-group-vertical > .btn-group > .btn { + float: none +} + +.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0 +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate +} + +.btn-group-justified > .btn, .btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1% +} + +.btn-group-justified > .btn-group .btn { + width: 100% +} + +.btn-group-justified > .btn-group .dropdown-menu { + left: auto +} + +[data-toggle="buttons"] > .btn input[type="radio"], [data-toggle="buttons"] > .btn-group > .btn input[type="radio"], [data-toggle="buttons"] > .btn input[type="checkbox"], [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none +} + +.input-group { + position: relative; + display: table; + border-collapse: separate +} + +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0 +} + +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0 +} + +.input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px +} + +select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px +} + +textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto +} + +.input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px +} + +textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto +} + +.input-group-addon, .input-group-btn, .input-group .form-control { + display: table-cell +} + +.input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.input-group-addon, .input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px +} + +.input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { + margin-top: 0 +} + +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.input-group-addon:first-child { + border-right: 0 +} + +.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.input-group-addon:last-child { + border-left: 0 +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap +} + +.input-group-btn > .btn { + position: relative +} + +.input-group-btn > .btn + .btn { + margin-left: -1px +} + +.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { + z-index: 2 +} + +.input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group { + margin-right: -1px +} + +.input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px +} + +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none +} + +.nav > li { + position: relative; + display: block +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px +} + +.nav > li > a:hover, .nav > li > a:focus { + text-decoration: none; + background-color: #eee +} + +.nav > li.disabled > a { + color: #777 +} + +.nav > li.disabled > a:hover, .nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed +} + +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: #eee; + border-color: #337ab7 +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.nav > li > a > img { + max-width: none +} + +.nav-tabs { + border-bottom: 1px solid #ddd +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0 +} + +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd +} + +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #555; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0 +} + +.nav-tabs.nav-justified > li { + float: none +} + +.nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px +} + +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1% + } + + .nav-tabs.nav-justified > li > a { + margin-bottom: 0 + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px +} + +.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0 + } + + .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff + } +} + +.nav-pills > li { + float: left +} + +.nav-pills > li > a { + border-radius: 4px +} + +.nav-pills > li + li { + margin-left: 2px +} + +.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7 +} + +.nav-stacked > li { + float: none +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0 +} + +.nav-justified { + width: 100% +} + +.nav-justified > li { + float: none +} + +.nav-justified > li > a { + text-align: center; + margin-bottom: 5px +} + +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1% + } + + .nav-justified > li > a { + margin-bottom: 0 + } +} + +.nav-tabs-justified { + border-bottom: 0 +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px +} + +.nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd +} + +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0 + } + + .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff + } +} + +.tab-content > .tab-pane { + display: none +} + +.tab-content > .active { + display: block +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px + } +} + +@media (min-width: 768px) { + .navbar-header { + float: left + } +} + +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch +} + +.navbar-collapse.in { + overflow-y: auto +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none + } + + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important + } + + .navbar-collapse.in { + overflow-y: visible + } + + .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0 + } +} + +.navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + max-height: 340px +} + +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + max-height: 200px + } +} + +.container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px +} + +@media (min-width: 768px) { + .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0 + } +} + +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0 + } +} + +.navbar-fixed-top, .navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030 +} + +@media (min-width: 768px) { + .navbar-fixed-top, .navbar-fixed-bottom { + border-radius: 0 + } +} + +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0 +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; + height: 50px +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none +} + +.navbar-brand > img { + display: block +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { + margin-left: -15px + } +} + +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px +} + +.navbar-toggle:focus { + outline: 0 +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none + } +} + +.navbar-nav { + margin: 7.5px -15px +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none + } + + .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px + } + + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px + } + + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0 + } + + .navbar-nav > li { + float: left + } + + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px + } +} + +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + + .navbar-form .form-control-static { + display: inline-block + } + + .navbar-form .input-group { + display: inline-table; + vertical-align: middle + } + + .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn, .navbar-form .input-group .form-control { + width: auto + } + + .navbar-form .input-group > .form-control { + width: 100% + } + + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle + } + + .navbar-form .radio, .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle + } + + .navbar-form .radio label, .navbar-form .checkbox label { + padding-left: 0 + } + + .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0 + } + + .navbar-form .has-feedback .form-control-feedback { + top: 0 + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px + } + + .navbar-form .form-group:last-child { + margin-bottom: 0 + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px +} + +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px +} + +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px +} + +.navbar-text { + margin-top: 15px; + margin-bottom: 15px +} + +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important + } + + .navbar-right { + float: right !important; + margin-right: -15px + } + + .navbar-right ~ .navbar-right { + margin-right: 0 + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7 +} + +.navbar-default .navbar-brand { + color: #777 +} + +.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent +} + +.navbar-default .navbar-text { + color: #777 +} + +.navbar-default .navbar-nav > li > a { + color: #777 +} + +.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent +} + +.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7 +} + +.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent +} + +.navbar-default .navbar-toggle { + border-color: #ddd +} + +.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { + background-color: #ddd +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #888 +} + +.navbar-default .navbar-collapse, .navbar-default .navbar-form { + border-color: #e7e7e7 +} + +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555 +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777 + } + + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent + } + + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7 + } + + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent + } +} + +.navbar-default .navbar-link { + color: #777 +} + +.navbar-default .navbar-link:hover { + color: #333 +} + +.navbar-default .btn-link { + color: #777 +} + +.navbar-default .btn-link:hover, .navbar-default .btn-link:focus { + color: #333 +} + +.navbar-default .btn-link[disabled]:hover, fieldset[disabled] .navbar-default .btn-link:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc +} + +.navbar-inverse { + background-color: #222; + border-color: #080808 +} + +.navbar-inverse .navbar-brand { + color: #9d9d9d +} + +.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-text { + color: #9d9d9d +} + +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d +} + +.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808 +} + +.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent +} + +.navbar-inverse .navbar-toggle { + border-color: #333 +} + +.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { + background-color: #333 +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff +} + +.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { + border-color: #101010 +} + +.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { + background-color: #080808; + color: #fff +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808 + } + + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808 + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808 + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent + } +} + +.navbar-inverse .navbar-link { + color: #9d9d9d +} + +.navbar-inverse .navbar-link:hover { + color: #fff +} + +.navbar-inverse .btn-link { + color: #9d9d9d +} + +.navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { + color: #fff +} + +.navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444 +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px +} + +.breadcrumb > li { + display: inline-block +} + +.breadcrumb > li + li:before { + content: "/\00a0"; + padding: 0 5px; + color: #ccc +} + +.breadcrumb > .active { + color: #777 +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px +} + +.pagination > li { + display: inline +} + +.pagination > li > a, .pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #337ab7; + background-color: #fff; + border: 1px solid #ddd; + margin-left: -1px +} + +.pagination > li:first-child > a, .pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px +} + +.pagination > li:last-child > a, .pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px +} + +.pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { + z-index: 3; + color: #23527c; + background-color: #eee; + border-color: #ddd +} + +.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; + cursor: default +} + +.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { + color: #777; + background-color: #fff; + border-color: #ddd; + cursor: not-allowed +} + +.pagination-lg > li > a, .pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333 +} + +.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px +} + +.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px +} + +.pagination-sm > li > a, .pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5 +} + +.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px +} + +.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px +} + +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center +} + +.pager li { + display: inline +} + +.pager li > a, .pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px +} + +.pager li > a:hover, .pager li > a:focus { + text-decoration: none; + background-color: #eee +} + +.pager .next > a, .pager .next > span { + float: right +} + +.pager .previous > a, .pager .previous > span { + float: left +} + +.pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { + color: #777; + background-color: #fff; + cursor: not-allowed +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em +} + +a.label:hover, a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.label:empty { + display: none +} + +.btn .label { + position: relative; + top: -1px +} + +.label-default { + background-color: #777 +} + +.label-default[href]:hover, .label-default[href]:focus { + background-color: #5e5e5e +} + +.label-primary { + background-color: #337ab7 +} + +.label-primary[href]:hover, .label-primary[href]:focus { + background-color: #286090 +} + +.label-success { + background-color: #5cb85c +} + +.label-success[href]:hover, .label-success[href]:focus { + background-color: #449d44 +} + +.label-info { + background-color: #5bc0de +} + +.label-info[href]:hover, .label-info[href]:focus { + background-color: #31b0d5 +} + +.label-warning { + background-color: #f0ad4e +} + +.label-warning[href]:hover, .label-warning[href]:focus { + background-color: #ec971f +} + +.label-danger { + background-color: #d9534f +} + +.label-danger[href]:hover, .label-danger[href]:focus { + background-color: #c9302c +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #fff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: #777; + border-radius: 10px +} + +.badge:empty { + display: none +} + +.btn .badge { + position: relative; + top: -1px +} + +.btn-xs .badge, .btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px +} + +a.badge:hover, a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.list-group-item.active > .badge, .nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff +} + +.list-group-item > .badge { + float: right +} + +.list-group-item > .badge + .badge { + margin-right: 5px +} + +.nav-pills > li > a > .badge { + margin-left: 3px +} + +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee +} + +.jumbotron h1, .jumbotron .h1 { + color: inherit +} + +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200 +} + +.jumbotron > hr { + border-top-color: #d5d5d5 +} + +.container .jumbotron, .container-fluid .jumbotron { + border-radius: 6px +} + +.jumbotron .container { + max-width: 100% +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px + } + + .container .jumbotron, .container-fluid .jumbotron { + padding-left: 60px; + padding-right: 60px + } + + .jumbotron h1, .jumbotron .h1 { + font-size: 63px + } +} + +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out +} + +.thumbnail > img, .thumbnail a > img { + margin-left: auto; + margin-right: auto +} + +a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { + border-color: #337ab7 +} + +.thumbnail .caption { + padding: 9px; + color: #333 +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px +} + +.alert h4 { + margin-top: 0; + color: inherit +} + +.alert .alert-link { + font-weight: bold +} + +.alert > p, .alert > ul { + margin-bottom: 0 +} + +.alert > p + p { + margin-top: 5px +} + +.alert-dismissable, .alert-dismissible { + padding-right: 35px +} + +.alert-dismissable .close, .alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit +} + +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d +} + +.alert-success hr { + border-top-color: #c9e2b3 +} + +.alert-success .alert-link { + color: #2b542c +} + +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f +} + +.alert-info hr { + border-top-color: #a6e1ec +} + +.alert-info .alert-link { + color: #245269 +} + +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b +} + +.alert-warning hr { + border-top-color: #f7e1b5 +} + +.alert-warning .alert-link { + color: #66512c +} + +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442 +} + +.alert-danger hr { + border-top-color: #e4b9c0 +} + +.alert-danger .alert-link { + color: #843534 +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1) +} + +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease +} + +.progress-striped .progress-bar, .progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px +} + +.progress.active .progress-bar, .progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite +} + +.progress-bar-success { + background-color: #5cb85c +} + +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.progress-bar-info { + background-color: #5bc0de +} + +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.progress-bar-warning { + background-color: #f0ad4e +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.progress-bar-danger { + background-color: #d9534f +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent) +} + +.media { + margin-top: 15px +} + +.media:first-child { + margin-top: 0 +} + +.media, .media-body { + zoom: 1; + overflow: hidden +} + +.media-body { + width: 10000px +} + +.media-object { + display: block +} + +.media-object.img-thumbnail { + max-width: none +} + +.media-right, .media > .pull-right { + padding-left: 10px +} + +.media-left, .media > .pull-left { + padding-right: 10px +} + +.media-left, .media-right, .media-body { + display: table-cell; + vertical-align: top +} + +.media-middle { + vertical-align: middle +} + +.media-bottom { + vertical-align: bottom +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px +} + +.media-list { + padding-left: 0; + list-style: none +} + +.list-group { + margin-bottom: 20px; + padding-left: 0 +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px +} + +a.list-group-item, button.list-group-item { + color: #555 +} + +a.list-group-item .list-group-item-heading, button.list-group-item .list-group-item-heading { + color: #333 +} + +a.list-group-item:hover, button.list-group-item:hover, a.list-group-item:focus, button.list-group-item:focus { + text-decoration: none; + color: #555; + background-color: #f5f5f5 +} + +button.list-group-item { + width: 100%; + text-align: left +} + +.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { + background-color: #eee; + color: #777; + cursor: not-allowed +} + +.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { + color: inherit +} + +.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { + color: #777 +} + +.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7 +} + +.list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active .list-group-item-heading > small, .list-group-item.active:hover .list-group-item-heading > small, .list-group-item.active:focus .list-group-item-heading > small, .list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading > .small { + color: inherit +} + +.list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { + color: #c7ddef +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8 +} + +a.list-group-item-success, button.list-group-item-success { + color: #3c763d +} + +a.list-group-item-success .list-group-item-heading, button.list-group-item-success .list-group-item-heading { + color: inherit +} + +a.list-group-item-success:hover, button.list-group-item-success:hover, a.list-group-item-success:focus, button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6 +} + +a.list-group-item-success.active, button.list-group-item-success.active, a.list-group-item-success.active:hover, button.list-group-item-success.active:hover, a.list-group-item-success.active:focus, button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7 +} + +a.list-group-item-info, button.list-group-item-info { + color: #31708f +} + +a.list-group-item-info .list-group-item-heading, button.list-group-item-info .list-group-item-heading { + color: inherit +} + +a.list-group-item-info:hover, button.list-group-item-info:hover, a.list-group-item-info:focus, button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3 +} + +a.list-group-item-info.active, button.list-group-item-info.active, a.list-group-item-info.active:hover, button.list-group-item-info.active:hover, a.list-group-item-info.active:focus, button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3 +} + +a.list-group-item-warning, button.list-group-item-warning { + color: #8a6d3b +} + +a.list-group-item-warning .list-group-item-heading, button.list-group-item-warning .list-group-item-heading { + color: inherit +} + +a.list-group-item-warning:hover, button.list-group-item-warning:hover, a.list-group-item-warning:focus, button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc +} + +a.list-group-item-warning.active, button.list-group-item-warning.active, a.list-group-item-warning.active:hover, button.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus, button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede +} + +a.list-group-item-danger, button.list-group-item-danger { + color: #a94442 +} + +a.list-group-item-danger .list-group-item-heading, button.list-group-item-danger .list-group-item-heading { + color: inherit +} + +a.list-group-item-danger:hover, button.list-group-item-danger:hover, a.list-group-item-danger:focus, button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc +} + +a.list-group-item-danger.active, button.list-group-item-danger.active, a.list-group-item-danger.active:hover, button.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus, button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442 +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3 +} + +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05) +} + +.panel-body { + padding: 15px +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel-heading > .dropdown .dropdown-toggle { + color: inherit +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit +} + +.panel-title > a, .panel-title > small, .panel-title > .small, .panel-title > small > a, .panel-title > .small > a { + color: inherit +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel > .list-group, .panel > .panel-collapse > .list-group { + margin-bottom: 0 +} + +.panel > .list-group .list-group-item, .panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0 +} + +.panel > .list-group:first-child .list-group-item:first-child, .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel > .list-group:last-child .list-group-item:last-child, .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0 +} + +.list-group + .panel-footer { + border-top-width: 0 +} + +.panel > .table, .panel > .table-responsive > .table, .panel > .panel-collapse > .table { + margin-bottom: 0 +} + +.panel > .table caption, .panel > .table-responsive > .table caption, .panel > .panel-collapse > .table caption { + padding-left: 15px; + padding-right: 15px +} + +.panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px +} + +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px +} + +.panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px +} + +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px +} + +.panel > .panel-body + .table, .panel > .panel-body + .table-responsive, .panel > .table + .panel-body, .panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd +} + +.panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td { + border-top: 0 +} + +.panel > .table-bordered, .panel > .table-responsive > .table-bordered { + border: 0 +} + +.panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0 +} + +.panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0 +} + +.panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, .panel > .table-bordered > thead > tr:first-child > th, .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0 +} + +.panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0 +} + +.panel > .table-responsive { + border: 0; + margin-bottom: 0 +} + +.panel-group { + margin-bottom: 20px +} + +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px +} + +.panel-group .panel + .panel { + margin-top: 5px +} + +.panel-group .panel-heading { + border-bottom: 0 +} + +.panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd +} + +.panel-group .panel-footer { + border-top: 0 +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd +} + +.panel-default { + border-color: #ddd +} + +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd +} + +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd +} + +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333 +} + +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd +} + +.panel-primary { + border-color: #337ab7 +} + +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7 +} + +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7 +} + +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff +} + +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7 +} + +.panel-success { + border-color: #d6e9c6 +} + +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6 +} + +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6 +} + +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d +} + +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6 +} + +.panel-info { + border-color: #bce8f1 +} + +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1 +} + +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1 +} + +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f +} + +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1 +} + +.panel-warning { + border-color: #faebcc +} + +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc +} + +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc +} + +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b +} + +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc +} + +.panel-danger { + border-color: #ebccd1 +} + +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1 +} + +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1 +} + +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442 +} + +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1 +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden +} + +.embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, .embed-responsive object, .embed-responsive video { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0 +} + +.embed-responsive-16by9 { + padding-bottom: 56.25% +} + +.embed-responsive-4by3 { + padding-bottom: 75% +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05) +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15) +} + +.well-lg { + padding: 24px; + border-radius: 6px +} + +.well-sm { + padding: 9px; + border-radius: 3px +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; + filter: alpha(opacity=20) +} + +.close:hover, .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; + filter: alpha(opacity=50) +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none +} + +.modal-open { + overflow: hidden +} + +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0 +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0) +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px +} + +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + background-clip: padding-box; + outline: 0 +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000 +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0) +} + +.modal-backdrop.in { + opacity: .5; + filter: alpha(opacity=50) +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857143px +} + +.modal-header .close { + margin-top: -2px +} + +.modal-title { + margin: 0; + line-height: 1.42857143 +} + +.modal-body { + position: relative; + padding: 15px +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5 +} + +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0 +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0 +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll +} + +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto + } + + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5) + } + + .modal-sm { + width: 300px + } +} + +@media (min-width: 992px) { + .modal-lg { + width: 900px + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 12px; + opacity: 0; + filter: alpha(opacity=0) +} + +.tooltip.in { + opacity: .9; + filter: alpha(opacity=90) +} + +.tooltip.top { + margin-top: -3px; + padding: 5px 0 +} + +.tooltip.right { + margin-left: 3px; + padding: 0 5px +} + +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0 +} + +.tooltip.left { + margin-left: -3px; + padding: 0 5px +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + right: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000 +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000 +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + font-size: 14px; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2) +} + +.popover.top { + margin-top: -10px +} + +.popover.right { + margin-left: 10px +} + +.popover.bottom { + margin-top: 10px +} + +.popover.left { + margin-left: -10px +} + +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0 +} + +.popover-content { + padding: 9px 14px +} + +.popover > .arrow, .popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.popover > .arrow { + border-width: 11px +} + +.popover > .arrow:after { + border-width: 10px; + content: "" +} + +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px +} + +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #fff +} + +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25) +} + +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff +} + +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px +} + +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #fff +} + +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25) +} + +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #fff; + bottom: -10px +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100% +} + +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left +} + +.carousel-inner > .item > img, .carousel-inner > .item > a > img { + line-height: 1 +} + +@media all and (transform-3d),(-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px + } + + .carousel-inner > .item.next, .carousel-inner > .item.active.right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + left: 0 + } + + .carousel-inner > .item.prev, .carousel-inner > .item.active.left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + left: 0 + } + + .carousel-inner > .item.next.left, .carousel-inner > .item.prev.right, .carousel-inner > .item.active { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + left: 0 + } +} + +.carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { + display: block +} + +.carousel-inner > .active { + left: 0 +} + +.carousel-inner > .next, .carousel-inner > .prev { + position: absolute; + top: 0; + width: 100% +} + +.carousel-inner > .next { + left: 100% +} + +.carousel-inner > .prev { + left: -100% +} + +.carousel-inner > .next.left, .carousel-inner > .prev.right { + left: 0 +} + +.carousel-inner > .active.left { + left: -100% +} + +.carousel-inner > .active.right { + left: 100% +} + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: .5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6) +} + +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1) +} + +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1) +} + +.carousel-control:hover, .carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + opacity: .9; + filter: alpha(opacity=90) +} + +.carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block +} + +.carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px +} + +.carousel-control .icon-next, .carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px +} + +.carousel-control .icon-prev, .carousel-control .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif +} + +.carousel-control .icon-prev:before { + content: '\2039' +} + +.carousel-control .icon-next:before { + content: '\203a' +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0) +} + +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff +} + +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6) +} + +.carousel-caption .btn { + text-shadow: none +} + +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px + } + + .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { + margin-left: -15px + } + + .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { + margin-right: -15px + } + + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px + } + + .carousel-indicators { + bottom: 20px + } +} + +.clearfix:before, .clearfix:after, .dl-horizontal dd:before, .dl-horizontal dd:after, .container:before, .container:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after, .form-horizontal .form-group:before, .form-horizontal .form-group:after, .btn-toolbar:before, .btn-toolbar:after, .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after, .nav:before, .nav:after, .navbar:before, .navbar:after, .navbar-header:before, .navbar-header:after, .navbar-collapse:before, .navbar-collapse:after, .pager:before, .pager:after, .panel-body:before, .panel-body:after, .modal-footer:before, .modal-footer:after { + content: " "; + display: table +} + +.clearfix:after, .dl-horizontal dd:after, .container:after, .container-fluid:after, .row:after, .form-horizontal .form-group:after, .btn-toolbar:after, .btn-group-vertical > .btn-group:after, .nav:after, .navbar:after, .navbar-header:after, .navbar-collapse:after, .pager:after, .panel-body:after, .modal-footer:after { + clear: both +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto +} + +.pull-right { + float: right !important +} + +.pull-left { + float: left !important +} + +.hide { + display: none !important +} + +.show { + display: block !important +} + +.invisible { + visibility: hidden +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0 +} + +.hidden { + display: none !important +} + +.affix { + position: fixed +} + +@-ms-viewport { + width: device-width +} + +.visible-xs, .visible-sm, .visible-md, .visible-lg { + display: none !important +} + +.visible-xs-block, .visible-xs-inline, .visible-xs-inline-block, .visible-sm-block, .visible-sm-inline, .visible-sm-inline-block, .visible-md-block, .visible-md-inline, .visible-md-inline-block, .visible-lg-block, .visible-lg-inline, .visible-lg-inline-block { + display: none !important +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important + } + + table.visible-xs { + display: table !important + } + + tr.visible-xs { + display: table-row !important + } + + th.visible-xs, td.visible-xs { + display: table-cell !important + } +} + +@media (max-width: 767px) { + .visible-xs-block { + display: block !important + } +} + +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important + } +} + +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important + } + + table.visible-sm { + display: table !important + } + + tr.visible-sm { + display: table-row !important + } + + th.visible-sm, td.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important + } + + table.visible-md { + display: table !important + } + + tr.visible-md { + display: table-row !important + } + + th.visible-md, td.visible-md { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important + } + + table.visible-lg { + display: table !important + } + + tr.visible-lg { + display: table-row !important + } + + th.visible-lg, td.visible-lg { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important + } +} + +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important + } +} + +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important + } +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important + } +} + +.visible-print { + display: none !important +} + +@media print { + .visible-print { + display: block !important + } + + table.visible-print { + display: table !important + } + + tr.visible-print { + display: table-row !important + } + + th.visible-print, td.visible-print { + display: table-cell !important + } +} + +.visible-print-block { + display: none !important +} + +@media print { + .visible-print-block { + display: block !important + } +} + +.visible-print-inline { + display: none !important +} + +@media print { + .visible-print-inline { + display: inline !important + } +} + +.visible-print-inline-block { + display: none !important +} + +@media print { + .visible-print-inline-block { + display: inline-block !important + } +} + +@media print { + .hidden-print { + display: none !important + } +} diff --git a/apollo-portal/src/main/resources/static/vendor/bootstrap/js/bootstrap.min.js b/apollo-portal/src/main/resources/static/vendor/bootstrap/js/bootstrap.min.js index 72a38defc..35354c186 100755 --- a/apollo-portal/src/main/resources/static/vendor/bootstrap/js/bootstrap.min.js +++ b/apollo-portal/src/main/resources/static/vendor/bootstrap/js/bootstrap.min.js @@ -8,5 +8,781 @@ * Generated using the Bootstrap Customizer (http://v3.bootcss.com/customize/?id=822d18dc2e4e823a577b) * Config saved to config.json and https://gist.github.com/822d18dc2e4e823a577b */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.5",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t(s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.5",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target);o.hasClass("btn")||(o=o.closest(".btn")),e.call(o,"toggle"),t(i.target).is('input[type="radio"]')||t(i.target).is('input[type="checkbox"]')||i.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.5",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e),o="prev"==t&&0===i||"next"==t&&i==this.$items.length-1;if(o&&!this.options.wrap)return e;var n="prev"==t?-1:1,s=(i+n)%this.$items.length;return this.$items.eq(s)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger("hidden.bs.dropdown",s))))}))}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.5",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger("shown.bs.dropdown",r)}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, :disabled")){var n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&n.find(s).trigger("focus"),o.trigger("click");var r=" li:not(.disabled):visible a",l=n.find(".dropdown-menu"+r);if(l.length){var h=l.index(i.target);38==i.which&&h>0&&h--,40==i.which&&hdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),i.isInStateTrue()?void 0:(clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide())},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top-cu.width?"left":"left"==r&&d.left-pa.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.5",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new i(this)),"string"==typeof e&&n[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.5",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=i.find(".active:last a"),s=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(s),e.trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},i.prototype.activate=function(e,o,n){function s(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.5",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return i>n?"top":!1;if("bottom"==this.affixed)return null!=i?n+this.unpin<=s.top?!1:"bottom":t-o>=n+a?!1:"bottom";var r=null==this.affixed,l=r?n:s.top,h=r?a:e;return null!=i&&i>=n?"top":null!=o&&l+h>=t-o?"bottom":!1},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),+function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.5",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l]); -}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.5",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(void 0===n[t+1]||e this.$items.length - 1 || 0 > t ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function () { + e.to(t) + }) : i == t ? this.pause().cycle() : this.slide(t > i ? "next" : "prev", this.$items.eq(t)) + }, i.prototype.pause = function (e) { + return e || (this.paused = !0), this.$element.find(".next, .prev").length && t.support.transition && (this.$element.trigger(t.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this + }, i.prototype.next = function () { + return this.sliding ? void 0 : this.slide("next") + }, i.prototype.prev = function () { + return this.sliding ? void 0 : this.slide("prev") + }, i.prototype.slide = function (e, o) { + var n = this.$element.find(".item.active"), s = o || this.getItemForDirection(e, n), a = this.interval, r = "next" == e ? "left" : "right", l = this; + if (s.hasClass("active"))return this.sliding = !1; + var h = s[0], d = t.Event("slide.bs.carousel", {relatedTarget: h, direction: r}); + if (this.$element.trigger(d), !d.isDefaultPrevented()) { + if (this.sliding = !0, a && this.pause(), this.$indicators.length) { + this.$indicators.find(".active").removeClass("active"); + var p = t(this.$indicators.children()[this.getItemIndex(s)]); + p && p.addClass("active") + } + var c = t.Event("slid.bs.carousel", {relatedTarget: h, direction: r}); + return t.support.transition && this.$element.hasClass("slide") ? (s.addClass(e), s[0].offsetWidth, n.addClass(r), s.addClass(r), n.one("bsTransitionEnd", function () { + s.removeClass([e, r].join(" ")).addClass("active"), n.removeClass(["active", r].join(" ")), l.sliding = !1, setTimeout(function () { + l.$element.trigger(c) + }, 0) + }).emulateTransitionEnd(i.TRANSITION_DURATION)) : (n.removeClass("active"), s.addClass("active"), this.sliding = !1, this.$element.trigger(c)), a && this.cycle(), this + } + }; + var o = t.fn.carousel; + t.fn.carousel = e, t.fn.carousel.Constructor = i, t.fn.carousel.noConflict = function () { + return t.fn.carousel = o, this + }; + var n = function (i) { + var o, n = t(this), s = t(n.attr("data-target") || (o = n.attr("href")) && o.replace(/.*(?=#[^\s]+$)/, "")); + if (s.hasClass("carousel")) { + var a = t.extend({}, s.data(), n.data()), r = n.attr("data-slide-to"); + r && (a.interval = !1), e.call(s, a), r && s.data("bs.carousel").to(r), i.preventDefault() + } + }; + t(document).on("click.bs.carousel.data-api", "[data-slide]", n).on("click.bs.carousel.data-api", "[data-slide-to]", n), t(window).on("load", function () { + t('[data-ride="carousel"]').each(function () { + var i = t(this); + e.call(i, i.data()) + }) + }) +}(jQuery), +function (t) { + "use strict"; + function e(e) { + var i = e.attr("data-target"); + i || (i = e.attr("href"), i = i && /#[A-Za-z]/.test(i) && i.replace(/.*(?=#[^\s]*$)/, "")); + var o = i && t(i); + return o && o.length ? o : e.parent() + } + + function i(i) { + i && 3 === i.which || (t(n).remove(), t(s).each(function () { + var o = t(this), n = e(o), s = {relatedTarget: this}; + n.hasClass("open") && (i && "click" == i.type && /input|textarea/i.test(i.target.tagName) && t.contains(n[0], i.target) || (n.trigger(i = t.Event("hide.bs.dropdown", s)), i.isDefaultPrevented() || (o.attr("aria-expanded", "false"), n.removeClass("open").trigger("hidden.bs.dropdown", s)))) + })) + } + + function o(e) { + return this.each(function () { + var i = t(this), o = i.data("bs.dropdown"); + o || i.data("bs.dropdown", o = new a(this)), "string" == typeof e && o[e].call(i) + }) + } + + var n = ".dropdown-backdrop", s = '[data-toggle="dropdown"]', a = function (e) { + t(e).on("click.bs.dropdown", this.toggle) + }; + a.VERSION = "3.3.5", a.prototype.toggle = function (o) { + var n = t(this); + if (!n.is(".disabled, :disabled")) { + var s = e(n), a = s.hasClass("open"); + if (i(), !a) { + "ontouchstart" in document.documentElement && !s.closest(".navbar-nav").length && t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click", i); + var r = {relatedTarget: this}; + if (s.trigger(o = t.Event("show.bs.dropdown", r)), o.isDefaultPrevented())return; + n.trigger("focus").attr("aria-expanded", "true"), s.toggleClass("open").trigger("shown.bs.dropdown", r) + } + return !1 + } + }, a.prototype.keydown = function (i) { + if (/(38|40|27|32)/.test(i.which) && !/input|textarea/i.test(i.target.tagName)) { + var o = t(this); + if (i.preventDefault(), i.stopPropagation(), !o.is(".disabled, :disabled")) { + var n = e(o), a = n.hasClass("open"); + if (!a && 27 != i.which || a && 27 == i.which)return 27 == i.which && n.find(s).trigger("focus"), o.trigger("click"); + var r = " li:not(.disabled):visible a", l = n.find(".dropdown-menu" + r); + if (l.length) { + var h = l.index(i.target); + 38 == i.which && h > 0 && h--, 40 == i.which && h < l.length - 1 && h++, ~h || (h = 0), l.eq(h).trigger("focus") + } + } + } + }; + var r = t.fn.dropdown; + t.fn.dropdown = o, t.fn.dropdown.Constructor = a, t.fn.dropdown.noConflict = function () { + return t.fn.dropdown = r, this + }, t(document).on("click.bs.dropdown.data-api", i).on("click.bs.dropdown.data-api", ".dropdown form", function (t) { + t.stopPropagation() + }).on("click.bs.dropdown.data-api", s, a.prototype.toggle).on("keydown.bs.dropdown.data-api", s, a.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", a.prototype.keydown) +}(jQuery), +function (t) { + "use strict"; + function e(e, o) { + return this.each(function () { + var n = t(this), s = n.data("bs.modal"), a = t.extend({}, i.DEFAULTS, n.data(), "object" == typeof e && e); + s || n.data("bs.modal", s = new i(this, a)), "string" == typeof e ? s[e](o) : a.show && s.show(o) + }) + } + + var i = function (e, i) { + this.options = i, this.$body = t(document.body), this.$element = t(e), this.$dialog = this.$element.find(".modal-dialog"), this.$backdrop = null, this.isShown = null, this.originalBodyPad = null, this.scrollbarWidth = 0, this.ignoreBackdropClick = !1, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, t.proxy(function () { + this.$element.trigger("loaded.bs.modal") + }, this)) + }; + i.VERSION = "3.3.5", i.TRANSITION_DURATION = 300, i.BACKDROP_TRANSITION_DURATION = 150, i.DEFAULTS = { + backdrop: !0, + keyboard: !0, + show: !0 + }, i.prototype.toggle = function (t) { + return this.isShown ? this.hide() : this.show(t) + }, i.prototype.show = function (e) { + var o = this, n = t.Event("show.bs.modal", {relatedTarget: e}); + this.$element.trigger(n), this.isShown || n.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', t.proxy(this.hide, this)), this.$dialog.on("mousedown.dismiss.bs.modal", function () { + o.$element.one("mouseup.dismiss.bs.modal", function (e) { + t(e.target).is(o.$element) && (o.ignoreBackdropClick = !0) + }) + }), this.backdrop(function () { + var n = t.support.transition && o.$element.hasClass("fade"); + o.$element.parent().length || o.$element.appendTo(o.$body), o.$element.show().scrollTop(0), o.adjustDialog(), n && o.$element[0].offsetWidth, o.$element.addClass("in"), o.enforceFocus(); + var s = t.Event("shown.bs.modal", {relatedTarget: e}); + n ? o.$dialog.one("bsTransitionEnd", function () { + o.$element.trigger("focus").trigger(s) + }).emulateTransitionEnd(i.TRANSITION_DURATION) : o.$element.trigger("focus").trigger(s) + })) + }, i.prototype.hide = function (e) { + e && e.preventDefault(), e = t.Event("hide.bs.modal"), this.$element.trigger(e), this.isShown && !e.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), t(document).off("focusin.bs.modal"), this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"), this.$dialog.off("mousedown.dismiss.bs.modal"), t.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", t.proxy(this.hideModal, this)).emulateTransitionEnd(i.TRANSITION_DURATION) : this.hideModal()) + }, i.prototype.enforceFocus = function () { + t(document).off("focusin.bs.modal").on("focusin.bs.modal", t.proxy(function (t) { + this.$element[0] === t.target || this.$element.has(t.target).length || this.$element.trigger("focus") + }, this)) + }, i.prototype.escape = function () { + this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", t.proxy(function (t) { + 27 == t.which && this.hide() + }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal") + }, i.prototype.resize = function () { + this.isShown ? t(window).on("resize.bs.modal", t.proxy(this.handleUpdate, this)) : t(window).off("resize.bs.modal") + }, i.prototype.hideModal = function () { + var t = this; + this.$element.hide(), this.backdrop(function () { + t.$body.removeClass("modal-open"), t.resetAdjustments(), t.resetScrollbar(), t.$element.trigger("hidden.bs.modal") + }) + }, i.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove(), this.$backdrop = null + }, i.prototype.backdrop = function (e) { + var o = this, n = this.$element.hasClass("fade") ? "fade" : ""; + if (this.isShown && this.options.backdrop) { + var s = t.support.transition && n; + if (this.$backdrop = t(document.createElement("div")).addClass("modal-backdrop " + n).appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", t.proxy(function (t) { + return this.ignoreBackdropClick ? void(this.ignoreBackdropClick = !1) : void(t.target === t.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide())) + }, this)), s && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !e)return; + s ? this.$backdrop.one("bsTransitionEnd", e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION) : e() + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass("in"); + var a = function () { + o.removeBackdrop(), e && e() + }; + t.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION) : a() + } else e && e() + }, i.prototype.handleUpdate = function () { + this.adjustDialog() + }, i.prototype.adjustDialog = function () { + var t = this.$element[0].scrollHeight > document.documentElement.clientHeight; + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && t ? this.scrollbarWidth : "", + paddingRight: this.bodyIsOverflowing && !t ? this.scrollbarWidth : "" + }) + }, i.prototype.resetAdjustments = function () { + this.$element.css({paddingLeft: "", paddingRight: ""}) + }, i.prototype.checkScrollbar = function () { + var t = window.innerWidth; + if (!t) { + var e = document.documentElement.getBoundingClientRect(); + t = e.right - Math.abs(e.left) + } + this.bodyIsOverflowing = document.body.clientWidth < t, this.scrollbarWidth = this.measureScrollbar() + }, i.prototype.setScrollbar = function () { + var t = parseInt(this.$body.css("padding-right") || 0, 10); + this.originalBodyPad = document.body.style.paddingRight || "", this.bodyIsOverflowing && this.$body.css("padding-right", t + this.scrollbarWidth) + }, i.prototype.resetScrollbar = function () { + this.$body.css("padding-right", this.originalBodyPad) + }, i.prototype.measureScrollbar = function () { + var t = document.createElement("div"); + t.className = "modal-scrollbar-measure", this.$body.append(t); + var e = t.offsetWidth - t.clientWidth; + return this.$body[0].removeChild(t), e + }; + var o = t.fn.modal; + t.fn.modal = e, t.fn.modal.Constructor = i, t.fn.modal.noConflict = function () { + return t.fn.modal = o, this + }, t(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (i) { + var o = t(this), n = o.attr("href"), s = t(o.attr("data-target") || n && n.replace(/.*(?=#[^\s]+$)/, "")), a = s.data("bs.modal") ? "toggle" : t.extend({remote: !/#/.test(n) && n}, s.data(), o.data()); + o.is("a") && i.preventDefault(), s.one("show.bs.modal", function (t) { + t.isDefaultPrevented() || s.one("hidden.bs.modal", function () { + o.is(":visible") && o.trigger("focus") + }) + }), e.call(s, a, this) + }) +}(jQuery), +function (t) { + "use strict"; + function e(e) { + return this.each(function () { + var o = t(this), n = o.data("bs.tooltip"), s = "object" == typeof e && e; + (n || !/destroy|hide/.test(e)) && (n || o.data("bs.tooltip", n = new i(this, s)), "string" == typeof e && n[e]()) + }) + } + + var i = function (t, e) { + this.type = null, this.options = null, this.enabled = null, this.timeout = null, this.hoverState = null, this.$element = null, this.inState = null, this.init("tooltip", t, e) + }; + i.VERSION = "3.3.5", i.TRANSITION_DURATION = 150, i.DEFAULTS = { + animation: !0, + placement: "top", + selector: !1, + template: '', + trigger: "hover focus", + title: "", + delay: 0, + html: !1, + container: !1, + viewport: {selector: "body", padding: 0} + }, i.prototype.init = function (e, i, o) { + if (this.enabled = !0, this.type = e, this.$element = t(i), this.options = this.getOptions(o), this.$viewport = this.options.viewport && t(t.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport), this.inState = { + click: !1, + hover: !1, + focus: !1 + }, this.$element[0] instanceof document.constructor && !this.options.selector)throw new Error("`selector` option must be specified when initializing " + this.type + " on the window.document object!"); + for (var n = this.options.trigger.split(" "), s = n.length; s--;) { + var a = n[s]; + if ("click" == a)this.$element.on("click." + this.type, this.options.selector, t.proxy(this.toggle, this)); else if ("manual" != a) { + var r = "hover" == a ? "mouseenter" : "focusin", l = "hover" == a ? "mouseleave" : "focusout"; + this.$element.on(r + "." + this.type, this.options.selector, t.proxy(this.enter, this)), this.$element.on(l + "." + this.type, this.options.selector, t.proxy(this.leave, this)) + } + } + this.options.selector ? this._options = t.extend({}, this.options, { + trigger: "manual", + selector: "" + }) : this.fixTitle() + }, i.prototype.getDefaults = function () { + return i.DEFAULTS + }, i.prototype.getOptions = function (e) { + return e = t.extend({}, this.getDefaults(), this.$element.data(), e), e.delay && "number" == typeof e.delay && (e.delay = { + show: e.delay, + hide: e.delay + }), e + }, i.prototype.getDelegateOptions = function () { + var e = {}, i = this.getDefaults(); + return this._options && t.each(this._options, function (t, o) { + i[t] != o && (e[t] = o) + }), e + }, i.prototype.enter = function (e) { + var i = e instanceof this.constructor ? e : t(e.currentTarget).data("bs." + this.type); + return i || (i = new this.constructor(e.currentTarget, this.getDelegateOptions()), t(e.currentTarget).data("bs." + this.type, i)), e instanceof t.Event && (i.inState["focusin" == e.type ? "focus" : "hover"] = !0), i.tip().hasClass("in") || "in" == i.hoverState ? void(i.hoverState = "in") : (clearTimeout(i.timeout), i.hoverState = "in", i.options.delay && i.options.delay.show ? void(i.timeout = setTimeout(function () { + "in" == i.hoverState && i.show() + }, i.options.delay.show)) : i.show()) + }, i.prototype.isInStateTrue = function () { + for (var t in this.inState)if (this.inState[t])return !0; + return !1 + }, i.prototype.leave = function (e) { + var i = e instanceof this.constructor ? e : t(e.currentTarget).data("bs." + this.type); + return i || (i = new this.constructor(e.currentTarget, this.getDelegateOptions()), t(e.currentTarget).data("bs." + this.type, i)), e instanceof t.Event && (i.inState["focusout" == e.type ? "focus" : "hover"] = !1), i.isInStateTrue() ? void 0 : (clearTimeout(i.timeout), i.hoverState = "out", i.options.delay && i.options.delay.hide ? void(i.timeout = setTimeout(function () { + "out" == i.hoverState && i.hide() + }, i.options.delay.hide)) : i.hide()) + }, i.prototype.show = function () { + var e = t.Event("show.bs." + this.type); + if (this.hasContent() && this.enabled) { + this.$element.trigger(e); + var o = t.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]); + if (e.isDefaultPrevented() || !o)return; + var n = this, s = this.tip(), a = this.getUID(this.type); + this.setContent(), s.attr("id", a), this.$element.attr("aria-describedby", a), this.options.animation && s.addClass("fade"); + var r = "function" == typeof this.options.placement ? this.options.placement.call(this, s[0], this.$element[0]) : this.options.placement, l = /\s?auto?\s?/i, h = l.test(r); + h && (r = r.replace(l, "") || "top"), s.detach().css({ + top: 0, + left: 0, + display: "block" + }).addClass(r).data("bs." + this.type, this), this.options.container ? s.appendTo(this.options.container) : s.insertAfter(this.$element), this.$element.trigger("inserted.bs." + this.type); + var d = this.getPosition(), p = s[0].offsetWidth, c = s[0].offsetHeight; + if (h) { + var f = r, u = this.getPosition(this.$viewport); + r = "bottom" == r && d.bottom + c > u.bottom ? "top" : "top" == r && d.top - c < u.top ? "bottom" : "right" == r && d.right + p > u.width ? "left" : "left" == r && d.left - p < u.left ? "right" : r, s.removeClass(f).addClass(r) + } + var g = this.getCalculatedOffset(r, d, p, c); + this.applyPlacement(g, r); + var m = function () { + var t = n.hoverState; + n.$element.trigger("shown.bs." + n.type), n.hoverState = null, "out" == t && n.leave(n) + }; + t.support.transition && this.$tip.hasClass("fade") ? s.one("bsTransitionEnd", m).emulateTransitionEnd(i.TRANSITION_DURATION) : m() + } + }, i.prototype.applyPlacement = function (e, i) { + var o = this.tip(), n = o[0].offsetWidth, s = o[0].offsetHeight, a = parseInt(o.css("margin-top"), 10), r = parseInt(o.css("margin-left"), 10); + isNaN(a) && (a = 0), isNaN(r) && (r = 0), e.top += a, e.left += r, t.offset.setOffset(o[0], t.extend({ + using: function (t) { + o.css({top: Math.round(t.top), left: Math.round(t.left)}) + } + }, e), 0), o.addClass("in"); + var l = o[0].offsetWidth, h = o[0].offsetHeight; + "top" == i && h != s && (e.top = e.top + s - h); + var d = this.getViewportAdjustedDelta(i, e, l, h); + d.left ? e.left += d.left : e.top += d.top; + var p = /top|bottom/.test(i), c = p ? 2 * d.left - n + l : 2 * d.top - s + h, f = p ? "offsetWidth" : "offsetHeight"; + o.offset(e), this.replaceArrow(c, o[0][f], p) + }, i.prototype.replaceArrow = function (t, e, i) { + this.arrow().css(i ? "left" : "top", 50 * (1 - t / e) + "%").css(i ? "top" : "left", "") + }, i.prototype.setContent = function () { + var t = this.tip(), e = this.getTitle(); + t.find(".tooltip-inner")[this.options.html ? "html" : "text"](e), t.removeClass("fade in top bottom left right") + }, i.prototype.hide = function (e) { + function o() { + "in" != n.hoverState && s.detach(), n.$element.removeAttr("aria-describedby").trigger("hidden.bs." + n.type), e && e() + } + + var n = this, s = t(this.$tip), a = t.Event("hide.bs." + this.type); + return this.$element.trigger(a), a.isDefaultPrevented() ? void 0 : (s.removeClass("in"), t.support.transition && s.hasClass("fade") ? s.one("bsTransitionEnd", o).emulateTransitionEnd(i.TRANSITION_DURATION) : o(), this.hoverState = null, this) + }, i.prototype.fixTitle = function () { + var t = this.$element; + (t.attr("title") || "string" != typeof t.attr("data-original-title")) && t.attr("data-original-title", t.attr("title") || "").attr("title", "") + }, i.prototype.hasContent = function () { + return this.getTitle() + }, i.prototype.getPosition = function (e) { + e = e || this.$element; + var i = e[0], o = "BODY" == i.tagName, n = i.getBoundingClientRect(); + null == n.width && (n = t.extend({}, n, {width: n.right - n.left, height: n.bottom - n.top})); + var s = o ? { + top: 0, + left: 0 + } : e.offset(), a = {scroll: o ? document.documentElement.scrollTop || document.body.scrollTop : e.scrollTop()}, r = o ? { + width: t(window).width(), + height: t(window).height() + } : null; + return t.extend({}, n, a, r, s) + }, i.prototype.getCalculatedOffset = function (t, e, i, o) { + return "bottom" == t ? { + top: e.top + e.height, + left: e.left + e.width / 2 - i / 2 + } : "top" == t ? { + top: e.top - o, + left: e.left + e.width / 2 - i / 2 + } : "left" == t ? {top: e.top + e.height / 2 - o / 2, left: e.left - i} : { + top: e.top + e.height / 2 - o / 2, + left: e.left + e.width + } + }, i.prototype.getViewportAdjustedDelta = function (t, e, i, o) { + var n = {top: 0, left: 0}; + if (!this.$viewport)return n; + var s = this.options.viewport && this.options.viewport.padding || 0, a = this.getPosition(this.$viewport); + if (/right|left/.test(t)) { + var r = e.top - s - a.scroll, l = e.top + s - a.scroll + o; + r < a.top ? n.top = a.top - r : l > a.top + a.height && (n.top = a.top + a.height - l) + } else { + var h = e.left - s, d = e.left + s + i; + h < a.left ? n.left = a.left - h : d > a.right && (n.left = a.left + a.width - d) + } + return n + }, i.prototype.getTitle = function () { + var t, e = this.$element, i = this.options; + return t = e.attr("data-original-title") || ("function" == typeof i.title ? i.title.call(e[0]) : i.title) + }, i.prototype.getUID = function (t) { + do t += ~~(1e6 * Math.random()); while (document.getElementById(t)); + return t + }, i.prototype.tip = function () { + if (!this.$tip && (this.$tip = t(this.options.template), 1 != this.$tip.length))throw new Error(this.type + " `template` option must consist of exactly 1 top-level element!"); + return this.$tip + }, i.prototype.arrow = function () { + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + }, i.prototype.enable = function () { + this.enabled = !0 + }, i.prototype.disable = function () { + this.enabled = !1 + }, i.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + }, i.prototype.toggle = function (e) { + var i = this; + e && (i = t(e.currentTarget).data("bs." + this.type), i || (i = new this.constructor(e.currentTarget, this.getDelegateOptions()), t(e.currentTarget).data("bs." + this.type, i))), e ? (i.inState.click = !i.inState.click, i.isInStateTrue() ? i.enter(i) : i.leave(i)) : i.tip().hasClass("in") ? i.leave(i) : i.enter(i) + }, i.prototype.destroy = function () { + var t = this; + clearTimeout(this.timeout), this.hide(function () { + t.$element.off("." + t.type).removeData("bs." + t.type), t.$tip && t.$tip.detach(), t.$tip = null, t.$arrow = null, t.$viewport = null + }) + }; + var o = t.fn.tooltip; + t.fn.tooltip = e, t.fn.tooltip.Constructor = i, t.fn.tooltip.noConflict = function () { + return t.fn.tooltip = o, this + } +}(jQuery), +function (t) { + "use strict"; + function e(e) { + return this.each(function () { + var o = t(this), n = o.data("bs.popover"), s = "object" == typeof e && e; + (n || !/destroy|hide/.test(e)) && (n || o.data("bs.popover", n = new i(this, s)), "string" == typeof e && n[e]()) + }) + } + + var i = function (t, e) { + this.init("popover", t, e) + }; + if (!t.fn.tooltip)throw new Error("Popover requires tooltip.js"); + i.VERSION = "3.3.5", i.DEFAULTS = t.extend({}, t.fn.tooltip.Constructor.DEFAULTS, { + placement: "right", + trigger: "click", + content: "", + template: '' + }), i.prototype = t.extend({}, t.fn.tooltip.Constructor.prototype), i.prototype.constructor = i, i.prototype.getDefaults = function () { + return i.DEFAULTS + }, i.prototype.setContent = function () { + var t = this.tip(), e = this.getTitle(), i = this.getContent(); + t.find(".popover-title")[this.options.html ? "html" : "text"](e), t.find(".popover-content").children().detach().end()[this.options.html ? "string" == typeof i ? "html" : "append" : "text"](i), t.removeClass("fade top bottom left right in"), t.find(".popover-title").html() || t.find(".popover-title").hide() + }, i.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + }, i.prototype.getContent = function () { + var t = this.$element, e = this.options; + return t.attr("data-content") || ("function" == typeof e.content ? e.content.call(t[0]) : e.content) + }, i.prototype.arrow = function () { + return this.$arrow = this.$arrow || this.tip().find(".arrow") + }; + var o = t.fn.popover; + t.fn.popover = e, t.fn.popover.Constructor = i, t.fn.popover.noConflict = function () { + return t.fn.popover = o, this + } +}(jQuery), +function (t) { + "use strict"; + function e(e) { + return this.each(function () { + var o = t(this), n = o.data("bs.tab"); + n || o.data("bs.tab", n = new i(this)), "string" == typeof e && n[e]() + }) + } + + var i = function (e) { + this.element = t(e) + }; + i.VERSION = "3.3.5", i.TRANSITION_DURATION = 150, i.prototype.show = function () { + var e = this.element, i = e.closest("ul:not(.dropdown-menu)"), o = e.data("target"); + if (o || (o = e.attr("href"), o = o && o.replace(/.*(?=#[^\s]*$)/, "")), !e.parent("li").hasClass("active")) { + var n = i.find(".active:last a"), s = t.Event("hide.bs.tab", {relatedTarget: e[0]}), a = t.Event("show.bs.tab", {relatedTarget: n[0]}); + if (n.trigger(s), e.trigger(a), !a.isDefaultPrevented() && !s.isDefaultPrevented()) { + var r = t(o); + this.activate(e.closest("li"), i), this.activate(r, r.parent(), function () { + n.trigger({type: "hidden.bs.tab", relatedTarget: e[0]}), e.trigger({ + type: "shown.bs.tab", + relatedTarget: n[0] + }) + }) + } + } + }, i.prototype.activate = function (e, o, n) { + function s() { + a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), r ? (e[0].offsetWidth, e.addClass("in")) : e.removeClass("fade"), e.parent(".dropdown-menu").length && e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), n && n() + } + + var a = o.find("> .active"), r = n && t.support.transition && (a.length && a.hasClass("fade") || !!o.find("> .fade").length); + a.length && r ? a.one("bsTransitionEnd", s).emulateTransitionEnd(i.TRANSITION_DURATION) : s(), a.removeClass("in") + }; + var o = t.fn.tab; + t.fn.tab = e, t.fn.tab.Constructor = i, t.fn.tab.noConflict = function () { + return t.fn.tab = o, this + }; + var n = function (i) { + i.preventDefault(), e.call(t(this), "show") + }; + t(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', n).on("click.bs.tab.data-api", '[data-toggle="pill"]', n) +}(jQuery), +function (t) { + "use strict"; + function e(e) { + return this.each(function () { + var o = t(this), n = o.data("bs.affix"), s = "object" == typeof e && e; + n || o.data("bs.affix", n = new i(this, s)), "string" == typeof e && n[e]() + }) + } + + var i = function (e, o) { + this.options = t.extend({}, i.DEFAULTS, o), this.$target = t(this.options.target).on("scroll.bs.affix.data-api", t.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", t.proxy(this.checkPositionWithEventLoop, this)), this.$element = t(e), this.affixed = null, this.unpin = null, this.pinnedOffset = null, this.checkPosition() + }; + i.VERSION = "3.3.5", i.RESET = "affix affix-top affix-bottom", i.DEFAULTS = { + offset: 0, + target: window + }, i.prototype.getState = function (t, e, i, o) { + var n = this.$target.scrollTop(), s = this.$element.offset(), a = this.$target.height(); + if (null != i && "top" == this.affixed)return i > n ? "top" : !1; + if ("bottom" == this.affixed)return null != i ? n + this.unpin <= s.top ? !1 : "bottom" : t - o >= n + a ? !1 : "bottom"; + var r = null == this.affixed, l = r ? n : s.top, h = r ? a : e; + return null != i && i >= n ? "top" : null != o && l + h >= t - o ? "bottom" : !1 + }, i.prototype.getPinnedOffset = function () { + if (this.pinnedOffset)return this.pinnedOffset; + this.$element.removeClass(i.RESET).addClass("affix"); + var t = this.$target.scrollTop(), e = this.$element.offset(); + return this.pinnedOffset = e.top - t + }, i.prototype.checkPositionWithEventLoop = function () { + setTimeout(t.proxy(this.checkPosition, this), 1) + }, i.prototype.checkPosition = function () { + if (this.$element.is(":visible")) { + var e = this.$element.height(), o = this.options.offset, n = o.top, s = o.bottom, a = Math.max(t(document).height(), t(document.body).height()); + "object" != typeof o && (s = n = o), "function" == typeof n && (n = o.top(this.$element)), "function" == typeof s && (s = o.bottom(this.$element)); + var r = this.getState(a, e, n, s); + if (this.affixed != r) { + null != this.unpin && this.$element.css("top", ""); + var l = "affix" + (r ? "-" + r : ""), h = t.Event(l + ".bs.affix"); + if (this.$element.trigger(h), h.isDefaultPrevented())return; + this.affixed = r, this.unpin = "bottom" == r ? this.getPinnedOffset() : null, this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix", "affixed") + ".bs.affix") + } + "bottom" == r && this.$element.offset({top: a - e - s}) + } + }; + var o = t.fn.affix; + t.fn.affix = e, t.fn.affix.Constructor = i, t.fn.affix.noConflict = function () { + return t.fn.affix = o, this + }, t(window).on("load", function () { + t('[data-spy="affix"]').each(function () { + var i = t(this), o = i.data(); + o.offset = o.offset || {}, null != o.offsetBottom && (o.offset.bottom = o.offsetBottom), null != o.offsetTop && (o.offset.top = o.offsetTop), e.call(i, o) + }) + }) +}(jQuery), +function (t) { + "use strict"; + function e(e) { + var i, o = e.attr("data-target") || (i = e.attr("href")) && i.replace(/.*(?=#[^\s]+$)/, ""); + return t(o) + } + + function i(e) { + return this.each(function () { + var i = t(this), n = i.data("bs.collapse"), s = t.extend({}, o.DEFAULTS, i.data(), "object" == typeof e && e); + !n && s.toggle && /show|hide/.test(e) && (s.toggle = !1), n || i.data("bs.collapse", n = new o(this, s)), "string" == typeof e && n[e]() + }) + } + + var o = function (e, i) { + this.$element = t(e), this.options = t.extend({}, o.DEFAULTS, i), this.$trigger = t('[data-toggle="collapse"][href="#' + e.id + '"],[data-toggle="collapse"][data-target="#' + e.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle() + }; + o.VERSION = "3.3.5", o.TRANSITION_DURATION = 350, o.DEFAULTS = {toggle: !0}, o.prototype.dimension = function () { + var t = this.$element.hasClass("width"); + return t ? "width" : "height" + }, o.prototype.show = function () { + if (!this.transitioning && !this.$element.hasClass("in")) { + var e, n = this.$parent && this.$parent.children(".panel").children(".in, .collapsing"); + if (!(n && n.length && (e = n.data("bs.collapse"), e && e.transitioning))) { + var s = t.Event("show.bs.collapse"); + if (this.$element.trigger(s), !s.isDefaultPrevented()) { + n && n.length && (i.call(n, "hide"), e || n.data("bs.collapse", null)); + var a = this.dimension(); + this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1; + var r = function () { + this.$element.removeClass("collapsing").addClass("collapse in")[a](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse") + }; + if (!t.support.transition)return r.call(this); + var l = t.camelCase(["scroll", a].join("-")); + this.$element.one("bsTransitionEnd", t.proxy(r, this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l]); + } + } + } + }, o.prototype.hide = function () { + if (!this.transitioning && this.$element.hasClass("in")) { + var e = t.Event("hide.bs.collapse"); + if (this.$element.trigger(e), !e.isDefaultPrevented()) { + var i = this.dimension(); + this.$element[i](this.$element[i]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1; + var n = function () { + this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse") + }; + return t.support.transition ? void this.$element[i](0).one("bsTransitionEnd", t.proxy(n, this)).emulateTransitionEnd(o.TRANSITION_DURATION) : n.call(this) + } + } + }, o.prototype.toggle = function () { + this[this.$element.hasClass("in") ? "hide" : "show"]() + }, o.prototype.getParent = function () { + return t(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(t.proxy(function (i, o) { + var n = t(o); + this.addAriaAndCollapsedClass(e(n), n) + }, this)).end() + }, o.prototype.addAriaAndCollapsedClass = function (t, e) { + var i = t.hasClass("in"); + t.attr("aria-expanded", i), e.toggleClass("collapsed", !i).attr("aria-expanded", i) + }; + var n = t.fn.collapse; + t.fn.collapse = i, t.fn.collapse.Constructor = o, t.fn.collapse.noConflict = function () { + return t.fn.collapse = n, this + }, t(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function (o) { + var n = t(this); + n.attr("data-target") || o.preventDefault(); + var s = e(n), a = s.data("bs.collapse"), r = a ? "toggle" : n.data(); + i.call(s, r) + }) +}(jQuery), +function (t) { + "use strict"; + function e(i, o) { + this.$body = t(document.body), this.$scrollElement = t(t(i).is(document.body) ? window : i), this.options = t.extend({}, e.DEFAULTS, o), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", t.proxy(this.process, this)), this.refresh(), this.process() + } + + function i(i) { + return this.each(function () { + var o = t(this), n = o.data("bs.scrollspy"), s = "object" == typeof i && i; + n || o.data("bs.scrollspy", n = new e(this, s)), "string" == typeof i && n[i]() + }) + } + + e.VERSION = "3.3.5", e.DEFAULTS = {offset: 10}, e.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + }, e.prototype.refresh = function () { + var e = this, i = "offset", o = 0; + this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight(), t.isWindow(this.$scrollElement[0]) || (i = "position", o = this.$scrollElement.scrollTop()), this.$body.find(this.selector).map(function () { + var e = t(this), n = e.data("target") || e.attr("href"), s = /^#./.test(n) && t(n); + return s && s.length && s.is(":visible") && [[s[i]().top + o, n]] || null + }).sort(function (t, e) { + return t[0] - e[0] + }).each(function () { + e.offsets.push(this[0]), e.targets.push(this[1]) + }) + }, e.prototype.process = function () { + var t, e = this.$scrollElement.scrollTop() + this.options.offset, i = this.getScrollHeight(), o = this.options.offset + i - this.$scrollElement.height(), n = this.offsets, s = this.targets, a = this.activeTarget; + if (this.scrollHeight != i && this.refresh(), e >= o)return a != (t = s[s.length - 1]) && this.activate(t); + if (a && e < n[0])return this.activeTarget = null, this.clear(); + for (t = n.length; t--;)a != s[t] && e >= n[t] && (void 0 === n[t + 1] || e < n[t + 1]) && this.activate(s[t]) + }, e.prototype.activate = function (e) { + this.activeTarget = e, this.clear(); + var i = this.selector + '[data-target="' + e + '"],' + this.selector + '[href="' + e + '"]', o = t(i).parents("li").addClass("active"); + o.parent(".dropdown-menu").length && (o = o.closest("li.dropdown").addClass("active")), o.trigger("activate.bs.scrollspy") + }, e.prototype.clear = function () { + t(this.selector).parentsUntil(this.options.target, ".active").removeClass("active") + }; + var o = t.fn.scrollspy; + t.fn.scrollspy = i, t.fn.scrollspy.Constructor = e, t.fn.scrollspy.noConflict = function () { + return t.fn.scrollspy = o, this + }, t(window).on("load.bs.scrollspy.data-api", function () { + t('[data-spy="scroll"]').each(function () { + var e = t(this); + i.call(e, e.data()) + }) + }) +}(jQuery), +function (t) { + "use strict"; + function e() { + var t = document.createElement("bootstrap"), e = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd otransitionend", + transition: "transitionend" + }; + for (var i in e)if (void 0 !== t.style[i])return {end: e[i]}; + return !1 + } + + t.fn.emulateTransitionEnd = function (e) { + var i = !1, o = this; + t(this).one("bsTransitionEnd", function () { + i = !0 + }); + var n = function () { + i || t(o).trigger(t.support.transition.end) + }; + return setTimeout(n, e), this + }, t(function () { + t.support.transition = e(), t.support.transition && (t.event.special.bsTransitionEnd = { + bindType: t.support.transition.end, + delegateType: t.support.transition.end, + handle: function (e) { + return t(e.target).is(this) ? e.handleObj.handler.apply(this, arguments) : void 0 + } + }) + }) +}(jQuery); diff --git a/apollo-portal/src/main/resources/static/vendor/jquery.js b/apollo-portal/src/main/resources/static/vendor/jquery.js index 76d21a465..71de8f178 100644 --- a/apollo-portal/src/main/resources/static/vendor/jquery.js +++ b/apollo-portal/src/main/resources/static/vendor/jquery.js @@ -1,6 +1,2570 @@ /*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery-1.10.2.min.map -*/ -(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
    ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t -}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); -u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("