rsanchez
2014-10-14 fb1b6755a9ecd43601dc4fbef9166d11d8a86f24
#2021 config - Added application Metadata management
1 files deleted
4 files added
30 files modified
changed files
securis/src/main/java/net/curisit/securis/beans/MetadataType.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/Application.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/LicenseType.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/Pack.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/PackMetadata.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/ApplicationResource.java patch | view | blame | history
securis/src/main/resources/db/schema.sql patch | view | blame | history
securis/src/main/resources/securis-server.properties patch | view | blame | history
securis/src/main/resources/static/admin.html patch | view | blame | history
securis/src/main/resources/static/css/bootstrap-theme.css patch | view | blame | history
securis/src/main/resources/static/css/bootstrap-theme.css.map patch | view | blame | history
securis/src/main/resources/static/css/bootstrap-theme.min.css patch | view | blame | history
securis/src/main/resources/static/css/bootstrap.css patch | view | blame | history
securis/src/main/resources/static/css/bootstrap.css.map patch | view | blame | history
securis/src/main/resources/static/css/bootstrap.min.css patch | view | blame | history
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.eot patch | view | blame | history
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.svg patch | view | blame | history
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf patch | view | blame | history
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.woff patch | view | blame | history
securis/src/main/resources/static/js/admin.js patch | view | blame | history
securis/src/main/resources/static/js/angular/angular-animate.min.js patch | view | blame | history
securis/src/main/resources/static/js/angular/angular-animate.min.js.map patch | view | blame | history
securis/src/main/resources/static/js/angular/angular-resource.min.js patch | view | blame | history
securis/src/main/resources/static/js/angular/angular-resource.min.js.map patch | view | blame | history
securis/src/main/resources/static/js/angular/angular-route.min.js patch | view | blame | history
securis/src/main/resources/static/js/angular/angular-route.min.js.map patch | view | blame | history
securis/src/main/resources/static/js/angular/angular.js patch | view | blame | history
securis/src/main/resources/static/js/angular/angular.min.js patch | view | blame | history
securis/src/main/resources/static/js/angular/angular.min.js.map patch | view | blame | history
securis/src/main/resources/static/js/catalogs.js patch | view | blame | history
securis/src/main/resources/static/js/catalogs.json patch | view | blame | history
securis/src/main/resources/static/js/vendor/bootstrap.js patch | view | blame | history
securis/src/main/resources/static/js/vendor/bootstrap.min.js patch | view | blame | history
securis/src/main/java/net/curisit/securis/beans/MetadataType.java
deleted file mode 100644
....@@ -1,16 +0,0 @@
1
-package net.curisit.securis.beans;
2
-
3
-public enum MetadataType {
4
-
5
- NUMBER(1),
6
- STRING(2),
7
- BOOLEAN(3);
8
-
9
- private final int id;
10
- MetadataType(int id) {
11
- this.id = id;
12
- }
13
- public int getId() {
14
- return id;
15
- }
16
-}
securis/src/main/java/net/curisit/securis/db/Application.java
....@@ -16,7 +16,9 @@
1616
1717 import org.codehaus.jackson.annotate.JsonAutoDetect;
1818 import org.codehaus.jackson.annotate.JsonIgnore;
19
+import org.codehaus.jackson.annotate.JsonProperty;
1920 import org.codehaus.jackson.map.annotate.JsonSerialize;
21
+
2022
2123 /**
2224 * Entity implementation class for Entity: application
....@@ -35,7 +37,7 @@
3537
3638 @Id
3739 @GeneratedValue
38
- private int id;
40
+ private Integer id;
3941
4042 private String name;
4143 private String description;
....@@ -49,9 +51,6 @@
4951 @OneToMany(fetch = FetchType.LAZY, mappedBy = "application")
5052 private Set<LicenseType> licenseTypes;
5153
52
- @JsonIgnore
53
- // We don't include the referenced entities to limit the size of each row at
54
- // the listing
5554 @OneToMany(fetch = FetchType.LAZY, mappedBy = "application")
5655 private Set<ApplicationMetadata> metadata;
5756
....@@ -95,12 +94,27 @@
9594 this.licenseTypes = licenseTypes;
9695 }
9796
97
+ @JsonProperty("metadata")
9898 public Set<ApplicationMetadata> getApplicationMetadata() {
9999 return metadata;
100100 }
101101
102
+ @JsonProperty("metadata")
102103 public void setApplicationMetadata(Set<ApplicationMetadata> metadata) {
103104 this.metadata = metadata;
104105 }
105106
107
+ @Override
108
+ public boolean equals(Object obj) {
109
+ if (!(obj instanceof Application))
110
+ return false;
111
+ Application other = (Application)obj;
112
+ return id.equals(other.id);
113
+ }
114
+
115
+ @Override
116
+ public int hashCode() {
117
+
118
+ return (id == null ? 0 : id.hashCode());
119
+ }
106120 }
securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
....@@ -2,21 +2,16 @@
22
33 import java.io.Serializable;
44 import java.util.Date;
5
-import java.util.Set;
65
76 import javax.persistence.Column;
87 import javax.persistence.Entity;
9
-import javax.persistence.FetchType;
108 import javax.persistence.GeneratedValue;
119 import javax.persistence.Id;
1210 import javax.persistence.JoinColumn;
1311 import javax.persistence.ManyToOne;
1412 import javax.persistence.NamedQueries;
1513 import javax.persistence.NamedQuery;
16
-import javax.persistence.OneToMany;
1714 import javax.persistence.Table;
18
-
19
-import net.curisit.securis.beans.MetadataType;
2015
2116 import org.codehaus.jackson.annotate.JsonAutoDetect;
2217 import org.codehaus.jackson.annotate.JsonIgnore;
....@@ -38,31 +33,22 @@
3833
3934 private static final long serialVersionUID = 1L;
4035
41
- @Id
42
- @GeneratedValue
43
- private int id;
44
-
45
- private String key;
46
-
47
- private String description;
48
-
49
- private MetadataType dataType;
50
-
5136 @JsonIgnore
37
+ @Id
5238 @ManyToOne
5339 @JoinColumn(name = "application_id")
5440 private Application application;
5541
42
+ @Id
43
+ private String key;
44
+
45
+ private String value;
46
+
47
+ private boolean mandatory;
48
+
5649 @Column(name = "creation_timestamp")
5750 private Date creationTimestamp;
5851
59
- public int getId() {
60
- return id;
61
- }
62
-
63
- public void setId(int id) {
64
- this.id = id;
65
- }
6652
6753 public String getKey() {
6854 return key;
....@@ -70,22 +56,6 @@
7056
7157 public void setKey(String key) {
7258 this.key = key;
73
- }
74
-
75
- public String getDescription() {
76
- return description;
77
- }
78
-
79
- public void setDescription(String description) {
80
- this.description = description;
81
- }
82
-
83
- public MetadataType getDataType() {
84
- return dataType;
85
- }
86
-
87
- public void setDataType(MetadataType dataType) {
88
- this.dataType = dataType;
8959 }
9060
9161 public Application getApplication() {
....@@ -120,4 +90,34 @@
12090 }
12191 }
12292
93
+ public String getValue() {
94
+ return value;
95
+ }
96
+
97
+ public void setValue(String value) {
98
+ this.value = value;
99
+ }
100
+
101
+ public boolean isMandatory() {
102
+ return mandatory;
103
+ }
104
+
105
+ public void setMandatory(boolean mandatory) {
106
+ this.mandatory = mandatory;
107
+ }
108
+
109
+ @Override
110
+ public boolean equals(Object obj) {
111
+ if (!(obj instanceof ApplicationMetadata))
112
+ return false;
113
+ ApplicationMetadata other = (ApplicationMetadata)obj;
114
+ return key.equals(other.key) && (application == null || application.equals(other.application));
115
+ }
116
+
117
+ @Override
118
+ public int hashCode() {
119
+
120
+ return key.hashCode() + (application == null ? 0 : application.hashCode());
121
+ }
122
+
123123 }
securis/src/main/java/net/curisit/securis/db/LicenseType.java
....@@ -59,10 +59,7 @@
5959 @JoinColumn(name = "application_id")
6060 private Application application;
6161
62
- @JsonIgnore
63
- // We don't include the referenced entities to limit the size of each row at
64
- // the listing
65
- @OneToMany(fetch = FetchType.LAZY, mappedBy = "license_type")
62
+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "licenseType")
6663 private Set<LicenseTypeMetadata> metadata;
6764
6865 public Set<LicenseTypeMetadata> getMetadata() {
securis/src/main/java/net/curisit/securis/db/LicenseTypeMetadata.java
....@@ -1,9 +1,7 @@
11 package net.curisit.securis.db;
22
33 import java.io.Serializable;
4
-import java.util.Date;
54
6
-import javax.persistence.Column;
75 import javax.persistence.Entity;
86 import javax.persistence.GeneratedValue;
97 import javax.persistence.Id;
....@@ -12,8 +10,6 @@
1210 import javax.persistence.NamedQueries;
1311 import javax.persistence.NamedQuery;
1412 import javax.persistence.Table;
15
-
16
-import net.curisit.securis.beans.MetadataType;
1713
1814 import org.codehaus.jackson.annotate.JsonAutoDetect;
1915 import org.codehaus.jackson.annotate.JsonIgnore;
....@@ -39,16 +35,13 @@
3935 @GeneratedValue
4036 private int id;
4137
38
+ private String key;
39
+
4240 private String value;
4341
4442 @JsonIgnore
4543 @ManyToOne
46
- @JoinColumn(name = "metadata_id")
47
- private ApplicationMetadata metadata;
48
-
49
- @JsonIgnore
50
- @ManyToOne
51
- @JoinColumn(name = "licensetype_id")
44
+ @JoinColumn(name = "license_type_id")
5245 private LicenseType licenseType;
5346
5447 public int getId() {
....@@ -74,29 +67,6 @@
7467 }
7568 }
7669
77
- @JsonProperty("metadata_id")
78
- public Integer getMetadataId() {
79
- return metadata == null ? null : metadata.getId();
80
- }
81
-
82
- @JsonProperty("metadata_id")
83
- public void setMetadataId(Integer idMetadata) {
84
- if (idMetadata == null) {
85
- metadata = null;
86
- } else {
87
- metadata = new ApplicationMetadata();
88
- metadata.setId(idMetadata);
89
- }
90
- }
91
-
92
- public ApplicationMetadata getMetadata() {
93
- return metadata;
94
- }
95
-
96
- public void setMetadata(ApplicationMetadata metadata) {
97
- this.metadata = metadata;
98
- }
99
-
10070 public LicenseType getLicenseType() {
10171 return licenseType;
10272 }
....@@ -113,4 +83,12 @@
11383 this.value = value;
11484 }
11585
86
+ public String getKey() {
87
+ return key;
88
+ }
89
+
90
+ public void setKey(String key) {
91
+ this.key = key;
92
+ }
93
+
11694 }
securis/src/main/java/net/curisit/securis/db/Pack.java
....@@ -78,6 +78,9 @@
7878 @JsonProperty("license_preactivation")
7979 private boolean licensePreactivation;
8080
81
+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "pack")
82
+ private Set<PackMetadata> metadata;
83
+
8184 public int getId() {
8285 return id;
8386 }
securis/src/main/java/net/curisit/securis/db/PackMetadata.java
....@@ -1,9 +1,7 @@
11 package net.curisit.securis.db;
22
33 import java.io.Serializable;
4
-import java.util.Date;
54
6
-import javax.persistence.Column;
75 import javax.persistence.Entity;
86 import javax.persistence.GeneratedValue;
97 import javax.persistence.Id;
....@@ -37,12 +35,11 @@
3735 @GeneratedValue
3836 private int id;
3937
38
+ private String key;
39
+
4040 private String value;
4141
42
- @JsonIgnore
43
- @ManyToOne
44
- @JoinColumn(name = "metadata_id")
45
- private ApplicationMetadata metadata;
42
+ private boolean readonly;
4643
4744 @JsonIgnore
4845 @ManyToOne
....@@ -72,29 +69,6 @@
7269 }
7370 }
7471
75
- @JsonProperty("metadata_id")
76
- public Integer getMetadataId() {
77
- return metadata == null ? null : metadata.getId();
78
- }
79
-
80
- @JsonProperty("metadata_id")
81
- public void setMetadataId(Integer idMetadata) {
82
- if (idMetadata == null) {
83
- metadata = null;
84
- } else {
85
- metadata = new ApplicationMetadata();
86
- metadata.setId(idMetadata);
87
- }
88
- }
89
-
90
- public ApplicationMetadata getMetadata() {
91
- return metadata;
92
- }
93
-
94
- public void setMetadata(ApplicationMetadata metadata) {
95
- this.metadata = metadata;
96
- }
97
-
9872 public Pack getPack() {
9973 return pack;
10074 }
....@@ -111,4 +85,20 @@
11185 this.value = value;
11286 }
11387
88
+ public String getKey() {
89
+ return key;
90
+ }
91
+
92
+ public void setKey(String key) {
93
+ this.key = key;
94
+ }
95
+
96
+ public boolean isReadonly() {
97
+ return readonly;
98
+ }
99
+
100
+ public void setReadonly(boolean readonly) {
101
+ this.readonly = readonly;
102
+ }
103
+
114104 }
securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
....@@ -2,6 +2,7 @@
22
33 import java.util.Date;
44 import java.util.List;
5
+import java.util.Set;
56
67 import javax.inject.Inject;
78 import javax.inject.Provider;
....@@ -25,6 +26,7 @@
2526 import net.curisit.integrity.commons.Utils;
2627 import net.curisit.securis.DefaultExceptionHandler;
2728 import net.curisit.securis.db.Application;
29
+import net.curisit.securis.db.ApplicationMetadata;
2830 import net.curisit.securis.utils.TokenHelper;
2931
3032 import org.apache.logging.log4j.LogManager;
....@@ -110,6 +112,14 @@
110112 EntityManager em = emProvider.get();
111113 app.setCreationTimestamp(new Date());
112114 em.persist(app);
115
+ LOG.info("App ID: {}", app.getId());
116
+ if (app.getApplicationMetadata() != null) {
117
+ for (ApplicationMetadata md : app.getApplicationMetadata()) {
118
+ md.setApplication(app);
119
+ md.setCreationTimestamp(app.getCreationTimestamp());
120
+ em.persist(md);
121
+ }
122
+ }
113123
114124 return Response.ok(app).build();
115125 }
....@@ -134,7 +144,23 @@
134144 currentapp.setName(app.getName());
135145 currentapp.setDescription(app.getDescription());
136146 em.persist(currentapp);
137
-
147
+
148
+ Set<ApplicationMetadata> newMD = app.getApplicationMetadata();
149
+ for (ApplicationMetadata currentMd : currentapp.getApplicationMetadata()) {
150
+ if (newMD == null || !newMD.contains(currentMd));
151
+ em.remove(currentMd);
152
+ }
153
+
154
+ if (newMD != null) {
155
+ for (ApplicationMetadata md : newMD) {
156
+ md.setApplication(app);
157
+ if (md.getCreationTimestamp() == null) {
158
+ md.setCreationTimestamp(app.getCreationTimestamp());
159
+ }
160
+ em.persist(md);
161
+ }
162
+ }
163
+ currentapp.setApplicationMetadata(app.getApplicationMetadata());
138164 return Response.ok(currentapp).build();
139165 }
140166
securis/src/main/resources/db/schema.sql
....@@ -26,6 +26,15 @@
2626 creation_timestamp DATETIME NULL ,
2727 PRIMARY KEY (id));
2828
29
+drop table IF EXISTS application_metadata;
30
+CREATE TABLE IF NOT EXISTS application_metadata (
31
+ application_id INT NOT NULL ,
32
+ key VARCHAR(100) NOT NULL ,
33
+ value VARCHAR(200) NULL ,
34
+ mandatory BOOLEAN NOT NULL default true,
35
+ creation_timestamp DATETIME NOT NULL ,
36
+ PRIMARY KEY (application_id, key));
37
+
2938
3039 drop table IF EXISTS license_type;
3140 CREATE TABLE IF NOT EXISTS license_type (
....@@ -35,6 +44,14 @@
3544 description VARCHAR(100) NULL ,
3645 application_id INT NULL ,
3746 creation_timestamp DATETIME NULL ,
47
+ PRIMARY KEY (id));
48
+
49
+drop table IF EXISTS licensetype_metadata;
50
+CREATE TABLE IF NOT EXISTS licensetype_metadata (
51
+ id INT NOT NULL auto_increment,
52
+ license_type_id INT NOT NULL ,
53
+ key VARCHAR(100) NOT NULL ,
54
+ value VARCHAR(200) NULL ,
3855 PRIMARY KEY (id));
3956
4057 drop table IF EXISTS organization;
....@@ -66,6 +83,16 @@
6683 creation_timestamp DATETIME NOT NULL ,
6784 PRIMARY KEY (id));
6885
86
+drop table IF EXISTS pack_metadata;
87
+CREATE TABLE IF NOT EXISTS pack_metadata (
88
+ id INT NOT NULL auto_increment,
89
+ pack_id INT NOT NULL ,
90
+ key VARCHAR(100) NOT NULL ,
91
+ value VARCHAR(200) NULL ,
92
+ readonly BOOlEAN NOT NULL default false,
93
+ PRIMARY KEY (id));
94
+
95
+
6996 drop table IF EXISTS license;
7097 CREATE TABLE IF NOT EXISTS license (
7198 id INT NOT NULL auto_increment,
securis/src/main/resources/securis-server.properties
....@@ -8,7 +8,7 @@
88 license.server.port = 9080
99 license.server.ssl.port = 9443
1010
11
-ssl.keystore.path = /change-path-to/securis.pkcs12
11
+ssl.keystore.path = /Users/rob/.ssh/keys/securis.pkcs12
1212 ssl.keystore.type = PKCS12
1313 ssl.keystore.password = curist3c
1414 ssl.keystore.alias =
securis/src/main/resources/static/admin.html
....@@ -58,6 +58,36 @@
5858 <select chosen multiple ng-switch-when="multiselect" class="form-control" ng-required="field.mandatory" ng-model="formu[field.name]"
5959 ng-options="o.id as o.label for o in refs[field.name]" data-placeholder="...">
6060 </select>
61
+ <div ng-switch-when="metadata" >
62
+ <table class="table table-hover table-condensed">
63
+ <thead>
64
+ <tr>
65
+ <th i18n >Key</th>
66
+ <th i18n >Value</th>
67
+ <th i18n >Mandatory</th>
68
+ <th ng-if="field.allow_creation"><span ng-click="createMetadataRow()" id="md_add" class="btn btn-success btn-xs glyphicon glyphicon-plus"></span></th>
69
+ </tr>
70
+ </thead>
71
+ <tbody>
72
+ <tr ng-repeat="row_md in formu['metadata']" >
73
+ <td><input type="text" id="md_key" name="md_key" placeholder="" ng-readonly="!field.allow_creation"
74
+ class="form-control" ng-model="row_md['key']" ng-required="true" ng-maxlength="150" />
75
+ </td>
76
+ <td>
77
+ <input type="text" id="md_value" name="md_value" placeholder=""
78
+ class="form-control" ng-model="row_md['value']" ng-required="false" ng-maxlength="150" />
79
+ </td>
80
+ <td>
81
+ <input type="checkbox" id="md_mandatory" name="md_mandatory"
82
+ class="form-control" ng-model="row_md['mandatory']" />
83
+ </td>
84
+ <td ng-if="field.allow_creation">
85
+ <span ng-click="removeMetadataKey(row_md)" id="md_delete" class="btn btn-danger btn-xs glyphicon glyphicon-trash"></span>
86
+ </td>
87
+ </tr>
88
+ </tbody>
89
+ </table>
90
+ </div>
6191
6292
6393 </div>
securis/src/main/resources/static/css/bootstrap-theme.css
....@@ -1,5 +1,5 @@
11 /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
33 * Copyright 2011-2014 Twitter, Inc.
44 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
55 */
....@@ -36,6 +36,8 @@
3636 .btn-default {
3737 text-shadow: 0 1px 0 #fff;
3838 background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
39
+ background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
40
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
3941 background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
4042 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
4143 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -53,8 +55,15 @@
5355 background-color: #e0e0e0;
5456 border-color: #dbdbdb;
5557 }
58
+.btn-default:disabled,
59
+.btn-default[disabled] {
60
+ background-color: #e0e0e0;
61
+ background-image: none;
62
+}
5663 .btn-primary {
5764 background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
65
+ background-image: -o-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
66
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#2d6ca2));
5867 background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
5968 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
6069 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -71,8 +80,15 @@
7180 background-color: #2d6ca2;
7281 border-color: #2b669a;
7382 }
83
+.btn-primary:disabled,
84
+.btn-primary[disabled] {
85
+ background-color: #2d6ca2;
86
+ background-image: none;
87
+}
7488 .btn-success {
7589 background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
90
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
91
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
7692 background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
7793 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
7894 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -89,8 +105,15 @@
89105 background-color: #419641;
90106 border-color: #3e8f3e;
91107 }
108
+.btn-success:disabled,
109
+.btn-success[disabled] {
110
+ background-color: #419641;
111
+ background-image: none;
112
+}
92113 .btn-info {
93114 background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
115
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
116
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
94117 background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
95118 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
96119 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -107,8 +130,15 @@
107130 background-color: #2aabd2;
108131 border-color: #28a4c9;
109132 }
133
+.btn-info:disabled,
134
+.btn-info[disabled] {
135
+ background-color: #2aabd2;
136
+ background-image: none;
137
+}
110138 .btn-warning {
111139 background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
140
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
141
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
112142 background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
113143 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
114144 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -125,8 +155,15 @@
125155 background-color: #eb9316;
126156 border-color: #e38d13;
127157 }
158
+.btn-warning:disabled,
159
+.btn-warning[disabled] {
160
+ background-color: #eb9316;
161
+ background-image: none;
162
+}
128163 .btn-danger {
129164 background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
165
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
166
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
130167 background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
131168 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
132169 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -143,6 +180,11 @@
143180 background-color: #c12e2a;
144181 border-color: #b92c28;
145182 }
183
+.btn-danger:disabled,
184
+.btn-danger[disabled] {
185
+ background-color: #c12e2a;
186
+ background-image: none;
187
+}
146188 .thumbnail,
147189 .img-thumbnail {
148190 -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
....@@ -152,6 +194,8 @@
152194 .dropdown-menu > li > a:focus {
153195 background-color: #e8e8e8;
154196 background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
197
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
198
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
155199 background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
156200 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
157201 background-repeat: repeat-x;
....@@ -161,12 +205,16 @@
161205 .dropdown-menu > .active > a:focus {
162206 background-color: #357ebd;
163207 background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
208
+ background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
209
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
164210 background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
165211 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
166212 background-repeat: repeat-x;
167213 }
168214 .navbar-default {
169215 background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
216
+ background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
217
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
170218 background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
171219 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
172220 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -177,6 +225,8 @@
177225 }
178226 .navbar-default .navbar-nav > .active > a {
179227 background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
228
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
229
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f3f3f3));
180230 background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
181231 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
182232 background-repeat: repeat-x;
....@@ -189,6 +239,8 @@
189239 }
190240 .navbar-inverse {
191241 background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
242
+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
243
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
192244 background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
193245 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
194246 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
....@@ -196,6 +248,8 @@
196248 }
197249 .navbar-inverse .navbar-nav > .active > a {
198250 background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
251
+ background-image: -o-linear-gradient(top, #222 0%, #282828 100%);
252
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#222), to(#282828));
199253 background-image: linear-gradient(to bottom, #222 0%, #282828 100%);
200254 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
201255 background-repeat: repeat-x;
....@@ -218,6 +272,8 @@
218272 }
219273 .alert-success {
220274 background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
275
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
276
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
221277 background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
222278 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
223279 background-repeat: repeat-x;
....@@ -225,6 +281,8 @@
225281 }
226282 .alert-info {
227283 background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
284
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
285
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
228286 background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
229287 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
230288 background-repeat: repeat-x;
....@@ -232,6 +290,8 @@
232290 }
233291 .alert-warning {
234292 background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
293
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
294
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
235295 background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
236296 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
237297 background-repeat: repeat-x;
....@@ -239,6 +299,8 @@
239299 }
240300 .alert-danger {
241301 background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
302
+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
303
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
242304 background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
243305 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
244306 background-repeat: repeat-x;
....@@ -246,39 +308,56 @@
246308 }
247309 .progress {
248310 background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
311
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
312
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
249313 background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
250314 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
251315 background-repeat: repeat-x;
252316 }
253317 .progress-bar {
254318 background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
319
+ background-image: -o-linear-gradient(top, #428bca 0%, #3071a9 100%);
320
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3071a9));
255321 background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
256322 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
257323 background-repeat: repeat-x;
258324 }
259325 .progress-bar-success {
260326 background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
327
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
328
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
261329 background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
262330 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
263331 background-repeat: repeat-x;
264332 }
265333 .progress-bar-info {
266334 background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
335
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
336
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
267337 background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
268338 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
269339 background-repeat: repeat-x;
270340 }
271341 .progress-bar-warning {
272342 background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
343
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
344
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
273345 background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
274346 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
275347 background-repeat: repeat-x;
276348 }
277349 .progress-bar-danger {
278350 background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
351
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
352
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
279353 background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
280354 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
281355 background-repeat: repeat-x;
356
+}
357
+.progress-bar-striped {
358
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
359
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
360
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
282361 }
283362 .list-group {
284363 border-radius: 4px;
....@@ -290,6 +369,8 @@
290369 .list-group-item.active:focus {
291370 text-shadow: 0 -1px 0 #3071a9;
292371 background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
372
+ background-image: -o-linear-gradient(top, #428bca 0%, #3278b3 100%);
373
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#3278b3));
293374 background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
294375 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
295376 background-repeat: repeat-x;
....@@ -301,42 +382,56 @@
301382 }
302383 .panel-default > .panel-heading {
303384 background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
385
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
386
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
304387 background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
305388 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
306389 background-repeat: repeat-x;
307390 }
308391 .panel-primary > .panel-heading {
309392 background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
393
+ background-image: -o-linear-gradient(top, #428bca 0%, #357ebd 100%);
394
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#428bca), to(#357ebd));
310395 background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
311396 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
312397 background-repeat: repeat-x;
313398 }
314399 .panel-success > .panel-heading {
315400 background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
401
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
402
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
316403 background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
317404 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
318405 background-repeat: repeat-x;
319406 }
320407 .panel-info > .panel-heading {
321408 background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
409
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
410
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
322411 background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
323412 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
324413 background-repeat: repeat-x;
325414 }
326415 .panel-warning > .panel-heading {
327416 background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
417
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
418
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
328419 background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
329420 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
330421 background-repeat: repeat-x;
331422 }
332423 .panel-danger > .panel-heading {
333424 background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
425
+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
426
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
334427 background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
335428 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
336429 background-repeat: repeat-x;
337430 }
338431 .well {
339432 background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
433
+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
434
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
340435 background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
341436 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
342437 background-repeat: repeat-x;
securis/src/main/resources/static/css/bootstrap-theme.css.map
....@@ -1 +1 @@
1
-{"version":3,"sources":["less/theme.less","less/mixins.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &:-moz-placeholder { color: @color; } // Firefox 4-18\n &::-moz-placeholder { color: @color; // Firefox 19+\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n -o-user-select: @select;\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n &,\n tr&,\n th&,\n td& { display: none !important; }\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.make-grid-columns-float(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.make-grid(@index, @class, @type) when (@index >= 0) {\n .calc-grid(@index, @class, @type);\n // next iteration\n .make-grid((@index - 1), @class, @type);\n}\n\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n"]}
1
+{"version":3,"file":"bootstrap-theme.css","sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",null,"// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
securis/src/main/resources/static/css/bootstrap-theme.min.css
....@@ -1,7 +1,5 @@
11 /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
33 * Copyright 2011-2014 Twitter, Inc.
44 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-
7
-.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(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,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);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-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);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-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);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-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);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-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);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}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(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: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,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);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,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);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)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);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: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: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: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: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,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);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: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: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:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);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,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);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: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: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: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: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,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
5
+ */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(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,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;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,from(#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;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]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-o-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#2d6ca2));background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#2b669a}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-primary:disabled,.btn-primary[disabled]{background-color:#2d6ca2;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,from(#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]{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,from(#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]{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,from(#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]{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,from(#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]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;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,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.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,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f3f3f3));background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.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,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:-o-linear-gradient(top,#222 0,#282828 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#282828));background-image:linear-gradient(to bottom,#222 0,#282828 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(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,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;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,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;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,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;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,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;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,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-o-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3071a9));background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);background-repeat:repeat-x}.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,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.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,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.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,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.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,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-o-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#3278b3));background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);background-repeat:repeat-x;border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(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,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-o-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#428bca),to(#357ebd));background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);background-repeat:repeat-x}.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,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.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,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.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,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.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,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.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,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
securis/src/main/resources/static/css/bootstrap.css
....@@ -1,10 +1,10 @@
11 /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
33 * Copyright 2011-2014 Twitter, Inc.
44 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
55 */
66
7
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
7
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
88 html {
99 font-family: sans-serif;
1010 -webkit-text-size-adjust: 100%;
....@@ -94,8 +94,9 @@
9494 }
9595 hr {
9696 height: 0;
97
- -moz-box-sizing: content-box;
98
- box-sizing: content-box;
97
+ -webkit-box-sizing: content-box;
98
+ -moz-box-sizing: content-box;
99
+ box-sizing: content-box;
99100 }
100101 pre {
101102 overflow: auto;
....@@ -144,7 +145,9 @@
144145 }
145146 input[type="checkbox"],
146147 input[type="radio"] {
147
- box-sizing: border-box;
148
+ -webkit-box-sizing: border-box;
149
+ -moz-box-sizing: border-box;
150
+ box-sizing: border-box;
148151 padding: 0;
149152 }
150153 input[type="number"]::-webkit-inner-spin-button,
....@@ -189,7 +192,8 @@
189192 color: #000 !important;
190193 text-shadow: none !important;
191194 background: transparent !important;
192
- box-shadow: none !important;
195
+ -webkit-box-shadow: none !important;
196
+ box-shadow: none !important;
193197 }
194198 a,
195199 a:visited {
....@@ -255,2114 +259,6 @@
255259 .table-bordered td {
256260 border: 1px solid #ddd !important;
257261 }
258
-}
259
-* {
260
- -webkit-box-sizing: border-box;
261
- -moz-box-sizing: border-box;
262
- box-sizing: border-box;
263
-}
264
-*:before,
265
-*:after {
266
- -webkit-box-sizing: border-box;
267
- -moz-box-sizing: border-box;
268
- box-sizing: border-box;
269
-}
270
-html {
271
- font-size: 62.5%;
272
-
273
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
274
-}
275
-body {
276
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
277
- font-size: 14px;
278
- line-height: 1.428571429;
279
- color: #333;
280
- background-color: #fff;
281
-}
282
-input,
283
-button,
284
-select,
285
-textarea {
286
- font-family: inherit;
287
- font-size: inherit;
288
- line-height: inherit;
289
-}
290
-a {
291
- color: #428bca;
292
- text-decoration: none;
293
-}
294
-a:hover,
295
-a:focus {
296
- color: #2a6496;
297
- text-decoration: underline;
298
-}
299
-a:focus {
300
- outline: thin dotted;
301
- outline: 5px auto -webkit-focus-ring-color;
302
- outline-offset: -2px;
303
-}
304
-figure {
305
- margin: 0;
306
-}
307
-img {
308
- vertical-align: middle;
309
-}
310
-.img-responsive {
311
- display: block;
312
- max-width: 100%;
313
- height: auto;
314
-}
315
-.img-rounded {
316
- border-radius: 6px;
317
-}
318
-.img-thumbnail {
319
- display: inline-block;
320
- max-width: 100%;
321
- height: auto;
322
- padding: 4px;
323
- line-height: 1.428571429;
324
- background-color: #fff;
325
- border: 1px solid #ddd;
326
- border-radius: 4px;
327
- -webkit-transition: all .2s ease-in-out;
328
- transition: all .2s ease-in-out;
329
-}
330
-.img-circle {
331
- border-radius: 50%;
332
-}
333
-hr {
334
- margin-top: 20px;
335
- margin-bottom: 20px;
336
- border: 0;
337
- border-top: 1px solid #eee;
338
-}
339
-.sr-only {
340
- position: absolute;
341
- width: 1px;
342
- height: 1px;
343
- padding: 0;
344
- margin: -1px;
345
- overflow: hidden;
346
- clip: rect(0, 0, 0, 0);
347
- border: 0;
348
-}
349
-h1,
350
-h2,
351
-h3,
352
-h4,
353
-h5,
354
-h6,
355
-.h1,
356
-.h2,
357
-.h3,
358
-.h4,
359
-.h5,
360
-.h6 {
361
- font-family: inherit;
362
- font-weight: 500;
363
- line-height: 1.1;
364
- color: inherit;
365
-}
366
-h1 small,
367
-h2 small,
368
-h3 small,
369
-h4 small,
370
-h5 small,
371
-h6 small,
372
-.h1 small,
373
-.h2 small,
374
-.h3 small,
375
-.h4 small,
376
-.h5 small,
377
-.h6 small,
378
-h1 .small,
379
-h2 .small,
380
-h3 .small,
381
-h4 .small,
382
-h5 .small,
383
-h6 .small,
384
-.h1 .small,
385
-.h2 .small,
386
-.h3 .small,
387
-.h4 .small,
388
-.h5 .small,
389
-.h6 .small {
390
- font-weight: normal;
391
- line-height: 1;
392
- color: #999;
393
-}
394
-h1,
395
-.h1,
396
-h2,
397
-.h2,
398
-h3,
399
-.h3 {
400
- margin-top: 20px;
401
- margin-bottom: 10px;
402
-}
403
-h1 small,
404
-.h1 small,
405
-h2 small,
406
-.h2 small,
407
-h3 small,
408
-.h3 small,
409
-h1 .small,
410
-.h1 .small,
411
-h2 .small,
412
-.h2 .small,
413
-h3 .small,
414
-.h3 .small {
415
- font-size: 65%;
416
-}
417
-h4,
418
-.h4,
419
-h5,
420
-.h5,
421
-h6,
422
-.h6 {
423
- margin-top: 10px;
424
- margin-bottom: 10px;
425
-}
426
-h4 small,
427
-.h4 small,
428
-h5 small,
429
-.h5 small,
430
-h6 small,
431
-.h6 small,
432
-h4 .small,
433
-.h4 .small,
434
-h5 .small,
435
-.h5 .small,
436
-h6 .small,
437
-.h6 .small {
438
- font-size: 75%;
439
-}
440
-h1,
441
-.h1 {
442
- font-size: 36px;
443
-}
444
-h2,
445
-.h2 {
446
- font-size: 30px;
447
-}
448
-h3,
449
-.h3 {
450
- font-size: 24px;
451
-}
452
-h4,
453
-.h4 {
454
- font-size: 18px;
455
-}
456
-h5,
457
-.h5 {
458
- font-size: 14px;
459
-}
460
-h6,
461
-.h6 {
462
- font-size: 12px;
463
-}
464
-p {
465
- margin: 0 0 10px;
466
-}
467
-.lead {
468
- margin-bottom: 20px;
469
- font-size: 16px;
470
- font-weight: 200;
471
- line-height: 1.4;
472
-}
473
-@media (min-width: 768px) {
474
- .lead {
475
- font-size: 21px;
476
- }
477
-}
478
-small,
479
-.small {
480
- font-size: 85%;
481
-}
482
-cite {
483
- font-style: normal;
484
-}
485
-.text-left {
486
- text-align: left;
487
-}
488
-.text-right {
489
- text-align: right;
490
-}
491
-.text-center {
492
- text-align: center;
493
-}
494
-.text-justify {
495
- text-align: justify;
496
-}
497
-.text-muted {
498
- color: #999;
499
-}
500
-.text-primary {
501
- color: #428bca;
502
-}
503
-a.text-primary:hover {
504
- color: #3071a9;
505
-}
506
-.text-success {
507
- color: #3c763d;
508
-}
509
-a.text-success:hover {
510
- color: #2b542c;
511
-}
512
-.text-info {
513
- color: #31708f;
514
-}
515
-a.text-info:hover {
516
- color: #245269;
517
-}
518
-.text-warning {
519
- color: #8a6d3b;
520
-}
521
-a.text-warning:hover {
522
- color: #66512c;
523
-}
524
-.text-danger {
525
- color: #a94442;
526
-}
527
-a.text-danger:hover {
528
- color: #843534;
529
-}
530
-.bg-primary {
531
- color: #fff;
532
- background-color: #428bca;
533
-}
534
-a.bg-primary:hover {
535
- background-color: #3071a9;
536
-}
537
-.bg-success {
538
- background-color: #dff0d8;
539
-}
540
-a.bg-success:hover {
541
- background-color: #c1e2b3;
542
-}
543
-.bg-info {
544
- background-color: #d9edf7;
545
-}
546
-a.bg-info:hover {
547
- background-color: #afd9ee;
548
-}
549
-.bg-warning {
550
- background-color: #fcf8e3;
551
-}
552
-a.bg-warning:hover {
553
- background-color: #f7ecb5;
554
-}
555
-.bg-danger {
556
- background-color: #f2dede;
557
-}
558
-a.bg-danger:hover {
559
- background-color: #e4b9b9;
560
-}
561
-.page-header {
562
- padding-bottom: 9px;
563
- margin: 40px 0 20px;
564
- border-bottom: 1px solid #eee;
565
-}
566
-ul,
567
-ol {
568
- margin-top: 0;
569
- margin-bottom: 10px;
570
-}
571
-ul ul,
572
-ol ul,
573
-ul ol,
574
-ol ol {
575
- margin-bottom: 0;
576
-}
577
-.list-unstyled {
578
- padding-left: 0;
579
- list-style: none;
580
-}
581
-.list-inline {
582
- padding-left: 0;
583
- list-style: none;
584
-}
585
-.list-inline > li {
586
- display: inline-block;
587
- padding-right: 5px;
588
- padding-left: 5px;
589
-}
590
-.list-inline > li:first-child {
591
- padding-left: 0;
592
-}
593
-dl {
594
- margin-top: 0;
595
- margin-bottom: 20px;
596
-}
597
-dt,
598
-dd {
599
- line-height: 1.428571429;
600
-}
601
-dt {
602
- font-weight: bold;
603
-}
604
-dd {
605
- margin-left: 0;
606
-}
607
-@media (min-width: 768px) {
608
- .dl-horizontal dt {
609
- float: left;
610
- width: 160px;
611
- overflow: hidden;
612
- clear: left;
613
- text-align: right;
614
- text-overflow: ellipsis;
615
- white-space: nowrap;
616
- }
617
- .dl-horizontal dd {
618
- margin-left: 180px;
619
- }
620
-}
621
-abbr[title],
622
-abbr[data-original-title] {
623
- cursor: help;
624
- border-bottom: 1px dotted #999;
625
-}
626
-.initialism {
627
- font-size: 90%;
628
- text-transform: uppercase;
629
-}
630
-blockquote {
631
- padding: 10px 20px;
632
- margin: 0 0 20px;
633
- font-size: 17.5px;
634
- border-left: 5px solid #eee;
635
-}
636
-blockquote p:last-child,
637
-blockquote ul:last-child,
638
-blockquote ol:last-child {
639
- margin-bottom: 0;
640
-}
641
-blockquote footer,
642
-blockquote small,
643
-blockquote .small {
644
- display: block;
645
- font-size: 80%;
646
- line-height: 1.428571429;
647
- color: #999;
648
-}
649
-blockquote footer:before,
650
-blockquote small:before,
651
-blockquote .small:before {
652
- content: '\2014 \00A0';
653
-}
654
-.blockquote-reverse,
655
-blockquote.pull-right {
656
- padding-right: 15px;
657
- padding-left: 0;
658
- text-align: right;
659
- border-right: 5px solid #eee;
660
- border-left: 0;
661
-}
662
-.blockquote-reverse footer:before,
663
-blockquote.pull-right footer:before,
664
-.blockquote-reverse small:before,
665
-blockquote.pull-right small:before,
666
-.blockquote-reverse .small:before,
667
-blockquote.pull-right .small:before {
668
- content: '';
669
-}
670
-.blockquote-reverse footer:after,
671
-blockquote.pull-right footer:after,
672
-.blockquote-reverse small:after,
673
-blockquote.pull-right small:after,
674
-.blockquote-reverse .small:after,
675
-blockquote.pull-right .small:after {
676
- content: '\00A0 \2014';
677
-}
678
-blockquote:before,
679
-blockquote:after {
680
- content: "";
681
-}
682
-address {
683
- margin-bottom: 20px;
684
- font-style: normal;
685
- line-height: 1.428571429;
686
-}
687
-code,
688
-kbd,
689
-pre,
690
-samp {
691
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
692
-}
693
-code {
694
- padding: 2px 4px;
695
- font-size: 90%;
696
- color: #c7254e;
697
- white-space: nowrap;
698
- background-color: #f9f2f4;
699
- border-radius: 4px;
700
-}
701
-kbd {
702
- padding: 2px 4px;
703
- font-size: 90%;
704
- color: #fff;
705
- background-color: #333;
706
- border-radius: 3px;
707
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
708
-}
709
-pre {
710
- display: block;
711
- padding: 9.5px;
712
- margin: 0 0 10px;
713
- font-size: 13px;
714
- line-height: 1.428571429;
715
- color: #333;
716
- word-break: break-all;
717
- word-wrap: break-word;
718
- background-color: #f5f5f5;
719
- border: 1px solid #ccc;
720
- border-radius: 4px;
721
-}
722
-pre code {
723
- padding: 0;
724
- font-size: inherit;
725
- color: inherit;
726
- white-space: pre-wrap;
727
- background-color: transparent;
728
- border-radius: 0;
729
-}
730
-.pre-scrollable {
731
- max-height: 340px;
732
- overflow-y: scroll;
733
-}
734
-.container {
735
- padding-right: 15px;
736
- padding-left: 15px;
737
- margin-right: auto;
738
- margin-left: auto;
739
-}
740
-@media (min-width: 768px) {
741
- .container {
742
- width: 750px;
743
- }
744
-}
745
-@media (min-width: 992px) {
746
- .container {
747
- width: 970px;
748
- }
749
-}
750
-@media (min-width: 1200px) {
751
- .container {
752
- width: 1170px;
753
- }
754
-}
755
-.container-fluid {
756
- padding-right: 15px;
757
- padding-left: 15px;
758
- margin-right: auto;
759
- margin-left: auto;
760
-}
761
-.row {
762
- margin-right: -15px;
763
- margin-left: -15px;
764
-}
765
-.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 {
766
- position: relative;
767
- min-height: 1px;
768
- padding-right: 15px;
769
- padding-left: 15px;
770
-}
771
-.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 {
772
- float: left;
773
-}
774
-.col-xs-12 {
775
- width: 100%;
776
-}
777
-.col-xs-11 {
778
- width: 91.66666666666666%;
779
-}
780
-.col-xs-10 {
781
- width: 83.33333333333334%;
782
-}
783
-.col-xs-9 {
784
- width: 75%;
785
-}
786
-.col-xs-8 {
787
- width: 66.66666666666666%;
788
-}
789
-.col-xs-7 {
790
- width: 58.333333333333336%;
791
-}
792
-.col-xs-6 {
793
- width: 50%;
794
-}
795
-.col-xs-5 {
796
- width: 41.66666666666667%;
797
-}
798
-.col-xs-4 {
799
- width: 33.33333333333333%;
800
-}
801
-.col-xs-3 {
802
- width: 25%;
803
-}
804
-.col-xs-2 {
805
- width: 16.666666666666664%;
806
-}
807
-.col-xs-1 {
808
- width: 8.333333333333332%;
809
-}
810
-.col-xs-pull-12 {
811
- right: 100%;
812
-}
813
-.col-xs-pull-11 {
814
- right: 91.66666666666666%;
815
-}
816
-.col-xs-pull-10 {
817
- right: 83.33333333333334%;
818
-}
819
-.col-xs-pull-9 {
820
- right: 75%;
821
-}
822
-.col-xs-pull-8 {
823
- right: 66.66666666666666%;
824
-}
825
-.col-xs-pull-7 {
826
- right: 58.333333333333336%;
827
-}
828
-.col-xs-pull-6 {
829
- right: 50%;
830
-}
831
-.col-xs-pull-5 {
832
- right: 41.66666666666667%;
833
-}
834
-.col-xs-pull-4 {
835
- right: 33.33333333333333%;
836
-}
837
-.col-xs-pull-3 {
838
- right: 25%;
839
-}
840
-.col-xs-pull-2 {
841
- right: 16.666666666666664%;
842
-}
843
-.col-xs-pull-1 {
844
- right: 8.333333333333332%;
845
-}
846
-.col-xs-pull-0 {
847
- right: 0;
848
-}
849
-.col-xs-push-12 {
850
- left: 100%;
851
-}
852
-.col-xs-push-11 {
853
- left: 91.66666666666666%;
854
-}
855
-.col-xs-push-10 {
856
- left: 83.33333333333334%;
857
-}
858
-.col-xs-push-9 {
859
- left: 75%;
860
-}
861
-.col-xs-push-8 {
862
- left: 66.66666666666666%;
863
-}
864
-.col-xs-push-7 {
865
- left: 58.333333333333336%;
866
-}
867
-.col-xs-push-6 {
868
- left: 50%;
869
-}
870
-.col-xs-push-5 {
871
- left: 41.66666666666667%;
872
-}
873
-.col-xs-push-4 {
874
- left: 33.33333333333333%;
875
-}
876
-.col-xs-push-3 {
877
- left: 25%;
878
-}
879
-.col-xs-push-2 {
880
- left: 16.666666666666664%;
881
-}
882
-.col-xs-push-1 {
883
- left: 8.333333333333332%;
884
-}
885
-.col-xs-push-0 {
886
- left: 0;
887
-}
888
-.col-xs-offset-12 {
889
- margin-left: 100%;
890
-}
891
-.col-xs-offset-11 {
892
- margin-left: 91.66666666666666%;
893
-}
894
-.col-xs-offset-10 {
895
- margin-left: 83.33333333333334%;
896
-}
897
-.col-xs-offset-9 {
898
- margin-left: 75%;
899
-}
900
-.col-xs-offset-8 {
901
- margin-left: 66.66666666666666%;
902
-}
903
-.col-xs-offset-7 {
904
- margin-left: 58.333333333333336%;
905
-}
906
-.col-xs-offset-6 {
907
- margin-left: 50%;
908
-}
909
-.col-xs-offset-5 {
910
- margin-left: 41.66666666666667%;
911
-}
912
-.col-xs-offset-4 {
913
- margin-left: 33.33333333333333%;
914
-}
915
-.col-xs-offset-3 {
916
- margin-left: 25%;
917
-}
918
-.col-xs-offset-2 {
919
- margin-left: 16.666666666666664%;
920
-}
921
-.col-xs-offset-1 {
922
- margin-left: 8.333333333333332%;
923
-}
924
-.col-xs-offset-0 {
925
- margin-left: 0;
926
-}
927
-@media (min-width: 768px) {
928
- .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 {
929
- float: left;
930
- }
931
- .col-sm-12 {
932
- width: 100%;
933
- }
934
- .col-sm-11 {
935
- width: 91.66666666666666%;
936
- }
937
- .col-sm-10 {
938
- width: 83.33333333333334%;
939
- }
940
- .col-sm-9 {
941
- width: 75%;
942
- }
943
- .col-sm-8 {
944
- width: 66.66666666666666%;
945
- }
946
- .col-sm-7 {
947
- width: 58.333333333333336%;
948
- }
949
- .col-sm-6 {
950
- width: 50%;
951
- }
952
- .col-sm-5 {
953
- width: 41.66666666666667%;
954
- }
955
- .col-sm-4 {
956
- width: 33.33333333333333%;
957
- }
958
- .col-sm-3 {
959
- width: 25%;
960
- }
961
- .col-sm-2 {
962
- width: 16.666666666666664%;
963
- }
964
- .col-sm-1 {
965
- width: 8.333333333333332%;
966
- }
967
- .col-sm-pull-12 {
968
- right: 100%;
969
- }
970
- .col-sm-pull-11 {
971
- right: 91.66666666666666%;
972
- }
973
- .col-sm-pull-10 {
974
- right: 83.33333333333334%;
975
- }
976
- .col-sm-pull-9 {
977
- right: 75%;
978
- }
979
- .col-sm-pull-8 {
980
- right: 66.66666666666666%;
981
- }
982
- .col-sm-pull-7 {
983
- right: 58.333333333333336%;
984
- }
985
- .col-sm-pull-6 {
986
- right: 50%;
987
- }
988
- .col-sm-pull-5 {
989
- right: 41.66666666666667%;
990
- }
991
- .col-sm-pull-4 {
992
- right: 33.33333333333333%;
993
- }
994
- .col-sm-pull-3 {
995
- right: 25%;
996
- }
997
- .col-sm-pull-2 {
998
- right: 16.666666666666664%;
999
- }
1000
- .col-sm-pull-1 {
1001
- right: 8.333333333333332%;
1002
- }
1003
- .col-sm-pull-0 {
1004
- right: 0;
1005
- }
1006
- .col-sm-push-12 {
1007
- left: 100%;
1008
- }
1009
- .col-sm-push-11 {
1010
- left: 91.66666666666666%;
1011
- }
1012
- .col-sm-push-10 {
1013
- left: 83.33333333333334%;
1014
- }
1015
- .col-sm-push-9 {
1016
- left: 75%;
1017
- }
1018
- .col-sm-push-8 {
1019
- left: 66.66666666666666%;
1020
- }
1021
- .col-sm-push-7 {
1022
- left: 58.333333333333336%;
1023
- }
1024
- .col-sm-push-6 {
1025
- left: 50%;
1026
- }
1027
- .col-sm-push-5 {
1028
- left: 41.66666666666667%;
1029
- }
1030
- .col-sm-push-4 {
1031
- left: 33.33333333333333%;
1032
- }
1033
- .col-sm-push-3 {
1034
- left: 25%;
1035
- }
1036
- .col-sm-push-2 {
1037
- left: 16.666666666666664%;
1038
- }
1039
- .col-sm-push-1 {
1040
- left: 8.333333333333332%;
1041
- }
1042
- .col-sm-push-0 {
1043
- left: 0;
1044
- }
1045
- .col-sm-offset-12 {
1046
- margin-left: 100%;
1047
- }
1048
- .col-sm-offset-11 {
1049
- margin-left: 91.66666666666666%;
1050
- }
1051
- .col-sm-offset-10 {
1052
- margin-left: 83.33333333333334%;
1053
- }
1054
- .col-sm-offset-9 {
1055
- margin-left: 75%;
1056
- }
1057
- .col-sm-offset-8 {
1058
- margin-left: 66.66666666666666%;
1059
- }
1060
- .col-sm-offset-7 {
1061
- margin-left: 58.333333333333336%;
1062
- }
1063
- .col-sm-offset-6 {
1064
- margin-left: 50%;
1065
- }
1066
- .col-sm-offset-5 {
1067
- margin-left: 41.66666666666667%;
1068
- }
1069
- .col-sm-offset-4 {
1070
- margin-left: 33.33333333333333%;
1071
- }
1072
- .col-sm-offset-3 {
1073
- margin-left: 25%;
1074
- }
1075
- .col-sm-offset-2 {
1076
- margin-left: 16.666666666666664%;
1077
- }
1078
- .col-sm-offset-1 {
1079
- margin-left: 8.333333333333332%;
1080
- }
1081
- .col-sm-offset-0 {
1082
- margin-left: 0;
1083
- }
1084
-}
1085
-@media (min-width: 992px) {
1086
- .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 {
1087
- float: left;
1088
- }
1089
- .col-md-12 {
1090
- width: 100%;
1091
- }
1092
- .col-md-11 {
1093
- width: 91.66666666666666%;
1094
- }
1095
- .col-md-10 {
1096
- width: 83.33333333333334%;
1097
- }
1098
- .col-md-9 {
1099
- width: 75%;
1100
- }
1101
- .col-md-8 {
1102
- width: 66.66666666666666%;
1103
- }
1104
- .col-md-7 {
1105
- width: 58.333333333333336%;
1106
- }
1107
- .col-md-6 {
1108
- width: 50%;
1109
- }
1110
- .col-md-5 {
1111
- width: 41.66666666666667%;
1112
- }
1113
- .col-md-4 {
1114
- width: 33.33333333333333%;
1115
- }
1116
- .col-md-3 {
1117
- width: 25%;
1118
- }
1119
- .col-md-2 {
1120
- width: 16.666666666666664%;
1121
- }
1122
- .col-md-1 {
1123
- width: 8.333333333333332%;
1124
- }
1125
- .col-md-pull-12 {
1126
- right: 100%;
1127
- }
1128
- .col-md-pull-11 {
1129
- right: 91.66666666666666%;
1130
- }
1131
- .col-md-pull-10 {
1132
- right: 83.33333333333334%;
1133
- }
1134
- .col-md-pull-9 {
1135
- right: 75%;
1136
- }
1137
- .col-md-pull-8 {
1138
- right: 66.66666666666666%;
1139
- }
1140
- .col-md-pull-7 {
1141
- right: 58.333333333333336%;
1142
- }
1143
- .col-md-pull-6 {
1144
- right: 50%;
1145
- }
1146
- .col-md-pull-5 {
1147
- right: 41.66666666666667%;
1148
- }
1149
- .col-md-pull-4 {
1150
- right: 33.33333333333333%;
1151
- }
1152
- .col-md-pull-3 {
1153
- right: 25%;
1154
- }
1155
- .col-md-pull-2 {
1156
- right: 16.666666666666664%;
1157
- }
1158
- .col-md-pull-1 {
1159
- right: 8.333333333333332%;
1160
- }
1161
- .col-md-pull-0 {
1162
- right: 0;
1163
- }
1164
- .col-md-push-12 {
1165
- left: 100%;
1166
- }
1167
- .col-md-push-11 {
1168
- left: 91.66666666666666%;
1169
- }
1170
- .col-md-push-10 {
1171
- left: 83.33333333333334%;
1172
- }
1173
- .col-md-push-9 {
1174
- left: 75%;
1175
- }
1176
- .col-md-push-8 {
1177
- left: 66.66666666666666%;
1178
- }
1179
- .col-md-push-7 {
1180
- left: 58.333333333333336%;
1181
- }
1182
- .col-md-push-6 {
1183
- left: 50%;
1184
- }
1185
- .col-md-push-5 {
1186
- left: 41.66666666666667%;
1187
- }
1188
- .col-md-push-4 {
1189
- left: 33.33333333333333%;
1190
- }
1191
- .col-md-push-3 {
1192
- left: 25%;
1193
- }
1194
- .col-md-push-2 {
1195
- left: 16.666666666666664%;
1196
- }
1197
- .col-md-push-1 {
1198
- left: 8.333333333333332%;
1199
- }
1200
- .col-md-push-0 {
1201
- left: 0;
1202
- }
1203
- .col-md-offset-12 {
1204
- margin-left: 100%;
1205
- }
1206
- .col-md-offset-11 {
1207
- margin-left: 91.66666666666666%;
1208
- }
1209
- .col-md-offset-10 {
1210
- margin-left: 83.33333333333334%;
1211
- }
1212
- .col-md-offset-9 {
1213
- margin-left: 75%;
1214
- }
1215
- .col-md-offset-8 {
1216
- margin-left: 66.66666666666666%;
1217
- }
1218
- .col-md-offset-7 {
1219
- margin-left: 58.333333333333336%;
1220
- }
1221
- .col-md-offset-6 {
1222
- margin-left: 50%;
1223
- }
1224
- .col-md-offset-5 {
1225
- margin-left: 41.66666666666667%;
1226
- }
1227
- .col-md-offset-4 {
1228
- margin-left: 33.33333333333333%;
1229
- }
1230
- .col-md-offset-3 {
1231
- margin-left: 25%;
1232
- }
1233
- .col-md-offset-2 {
1234
- margin-left: 16.666666666666664%;
1235
- }
1236
- .col-md-offset-1 {
1237
- margin-left: 8.333333333333332%;
1238
- }
1239
- .col-md-offset-0 {
1240
- margin-left: 0;
1241
- }
1242
-}
1243
-@media (min-width: 1200px) {
1244
- .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 {
1245
- float: left;
1246
- }
1247
- .col-lg-12 {
1248
- width: 100%;
1249
- }
1250
- .col-lg-11 {
1251
- width: 91.66666666666666%;
1252
- }
1253
- .col-lg-10 {
1254
- width: 83.33333333333334%;
1255
- }
1256
- .col-lg-9 {
1257
- width: 75%;
1258
- }
1259
- .col-lg-8 {
1260
- width: 66.66666666666666%;
1261
- }
1262
- .col-lg-7 {
1263
- width: 58.333333333333336%;
1264
- }
1265
- .col-lg-6 {
1266
- width: 50%;
1267
- }
1268
- .col-lg-5 {
1269
- width: 41.66666666666667%;
1270
- }
1271
- .col-lg-4 {
1272
- width: 33.33333333333333%;
1273
- }
1274
- .col-lg-3 {
1275
- width: 25%;
1276
- }
1277
- .col-lg-2 {
1278
- width: 16.666666666666664%;
1279
- }
1280
- .col-lg-1 {
1281
- width: 8.333333333333332%;
1282
- }
1283
- .col-lg-pull-12 {
1284
- right: 100%;
1285
- }
1286
- .col-lg-pull-11 {
1287
- right: 91.66666666666666%;
1288
- }
1289
- .col-lg-pull-10 {
1290
- right: 83.33333333333334%;
1291
- }
1292
- .col-lg-pull-9 {
1293
- right: 75%;
1294
- }
1295
- .col-lg-pull-8 {
1296
- right: 66.66666666666666%;
1297
- }
1298
- .col-lg-pull-7 {
1299
- right: 58.333333333333336%;
1300
- }
1301
- .col-lg-pull-6 {
1302
- right: 50%;
1303
- }
1304
- .col-lg-pull-5 {
1305
- right: 41.66666666666667%;
1306
- }
1307
- .col-lg-pull-4 {
1308
- right: 33.33333333333333%;
1309
- }
1310
- .col-lg-pull-3 {
1311
- right: 25%;
1312
- }
1313
- .col-lg-pull-2 {
1314
- right: 16.666666666666664%;
1315
- }
1316
- .col-lg-pull-1 {
1317
- right: 8.333333333333332%;
1318
- }
1319
- .col-lg-pull-0 {
1320
- right: 0;
1321
- }
1322
- .col-lg-push-12 {
1323
- left: 100%;
1324
- }
1325
- .col-lg-push-11 {
1326
- left: 91.66666666666666%;
1327
- }
1328
- .col-lg-push-10 {
1329
- left: 83.33333333333334%;
1330
- }
1331
- .col-lg-push-9 {
1332
- left: 75%;
1333
- }
1334
- .col-lg-push-8 {
1335
- left: 66.66666666666666%;
1336
- }
1337
- .col-lg-push-7 {
1338
- left: 58.333333333333336%;
1339
- }
1340
- .col-lg-push-6 {
1341
- left: 50%;
1342
- }
1343
- .col-lg-push-5 {
1344
- left: 41.66666666666667%;
1345
- }
1346
- .col-lg-push-4 {
1347
- left: 33.33333333333333%;
1348
- }
1349
- .col-lg-push-3 {
1350
- left: 25%;
1351
- }
1352
- .col-lg-push-2 {
1353
- left: 16.666666666666664%;
1354
- }
1355
- .col-lg-push-1 {
1356
- left: 8.333333333333332%;
1357
- }
1358
- .col-lg-push-0 {
1359
- left: 0;
1360
- }
1361
- .col-lg-offset-12 {
1362
- margin-left: 100%;
1363
- }
1364
- .col-lg-offset-11 {
1365
- margin-left: 91.66666666666666%;
1366
- }
1367
- .col-lg-offset-10 {
1368
- margin-left: 83.33333333333334%;
1369
- }
1370
- .col-lg-offset-9 {
1371
- margin-left: 75%;
1372
- }
1373
- .col-lg-offset-8 {
1374
- margin-left: 66.66666666666666%;
1375
- }
1376
- .col-lg-offset-7 {
1377
- margin-left: 58.333333333333336%;
1378
- }
1379
- .col-lg-offset-6 {
1380
- margin-left: 50%;
1381
- }
1382
- .col-lg-offset-5 {
1383
- margin-left: 41.66666666666667%;
1384
- }
1385
- .col-lg-offset-4 {
1386
- margin-left: 33.33333333333333%;
1387
- }
1388
- .col-lg-offset-3 {
1389
- margin-left: 25%;
1390
- }
1391
- .col-lg-offset-2 {
1392
- margin-left: 16.666666666666664%;
1393
- }
1394
- .col-lg-offset-1 {
1395
- margin-left: 8.333333333333332%;
1396
- }
1397
- .col-lg-offset-0 {
1398
- margin-left: 0;
1399
- }
1400
-}
1401
-table {
1402
- max-width: 100%;
1403
- background-color: transparent;
1404
-}
1405
-th {
1406
- text-align: left;
1407
-}
1408
-.table {
1409
- width: 100%;
1410
- margin-bottom: 20px;
1411
-}
1412
-.table > thead > tr > th,
1413
-.table > tbody > tr > th,
1414
-.table > tfoot > tr > th,
1415
-.table > thead > tr > td,
1416
-.table > tbody > tr > td,
1417
-.table > tfoot > tr > td {
1418
- padding: 8px;
1419
- line-height: 1.428571429;
1420
- vertical-align: top;
1421
- border-top: 1px solid #ddd;
1422
-}
1423
-.table > thead > tr > th {
1424
- vertical-align: bottom;
1425
- border-bottom: 2px solid #ddd;
1426
-}
1427
-.table > caption + thead > tr:first-child > th,
1428
-.table > colgroup + thead > tr:first-child > th,
1429
-.table > thead:first-child > tr:first-child > th,
1430
-.table > caption + thead > tr:first-child > td,
1431
-.table > colgroup + thead > tr:first-child > td,
1432
-.table > thead:first-child > tr:first-child > td {
1433
- border-top: 0;
1434
-}
1435
-.table > tbody + tbody {
1436
- border-top: 2px solid #ddd;
1437
-}
1438
-.table .table {
1439
- background-color: #fff;
1440
-}
1441
-.table-condensed > thead > tr > th,
1442
-.table-condensed > tbody > tr > th,
1443
-.table-condensed > tfoot > tr > th,
1444
-.table-condensed > thead > tr > td,
1445
-.table-condensed > tbody > tr > td,
1446
-.table-condensed > tfoot > tr > td {
1447
- padding: 5px;
1448
-}
1449
-.table-bordered {
1450
- border: 1px solid #ddd;
1451
-}
1452
-.table-bordered > thead > tr > th,
1453
-.table-bordered > tbody > tr > th,
1454
-.table-bordered > tfoot > tr > th,
1455
-.table-bordered > thead > tr > td,
1456
-.table-bordered > tbody > tr > td,
1457
-.table-bordered > tfoot > tr > td {
1458
- border: 1px solid #ddd;
1459
-}
1460
-.table-bordered > thead > tr > th,
1461
-.table-bordered > thead > tr > td {
1462
- border-bottom-width: 2px;
1463
-}
1464
-.table-striped > tbody > tr:nth-child(odd) > td,
1465
-.table-striped > tbody > tr:nth-child(odd) > th {
1466
- background-color: #f9f9f9;
1467
-}
1468
-.table-hover > tbody > tr:hover > td,
1469
-.table-hover > tbody > tr:hover > th {
1470
- background-color: #f5f5f5;
1471
-}
1472
-table col[class*="col-"] {
1473
- position: static;
1474
- display: table-column;
1475
- float: none;
1476
-}
1477
-table td[class*="col-"],
1478
-table th[class*="col-"] {
1479
- position: static;
1480
- display: table-cell;
1481
- float: none;
1482
-}
1483
-.table > thead > tr > td.active,
1484
-.table > tbody > tr > td.active,
1485
-.table > tfoot > tr > td.active,
1486
-.table > thead > tr > th.active,
1487
-.table > tbody > tr > th.active,
1488
-.table > tfoot > tr > th.active,
1489
-.table > thead > tr.active > td,
1490
-.table > tbody > tr.active > td,
1491
-.table > tfoot > tr.active > td,
1492
-.table > thead > tr.active > th,
1493
-.table > tbody > tr.active > th,
1494
-.table > tfoot > tr.active > th {
1495
- background-color: #f5f5f5;
1496
-}
1497
-.table-hover > tbody > tr > td.active:hover,
1498
-.table-hover > tbody > tr > th.active:hover,
1499
-.table-hover > tbody > tr.active:hover > td,
1500
-.table-hover > tbody > tr.active:hover > th {
1501
- background-color: #e8e8e8;
1502
-}
1503
-.table > thead > tr > td.success,
1504
-.table > tbody > tr > td.success,
1505
-.table > tfoot > tr > td.success,
1506
-.table > thead > tr > th.success,
1507
-.table > tbody > tr > th.success,
1508
-.table > tfoot > tr > th.success,
1509
-.table > thead > tr.success > td,
1510
-.table > tbody > tr.success > td,
1511
-.table > tfoot > tr.success > td,
1512
-.table > thead > tr.success > th,
1513
-.table > tbody > tr.success > th,
1514
-.table > tfoot > tr.success > th {
1515
- background-color: #dff0d8;
1516
-}
1517
-.table-hover > tbody > tr > td.success:hover,
1518
-.table-hover > tbody > tr > th.success:hover,
1519
-.table-hover > tbody > tr.success:hover > td,
1520
-.table-hover > tbody > tr.success:hover > th {
1521
- background-color: #d0e9c6;
1522
-}
1523
-.table > thead > tr > td.info,
1524
-.table > tbody > tr > td.info,
1525
-.table > tfoot > tr > td.info,
1526
-.table > thead > tr > th.info,
1527
-.table > tbody > tr > th.info,
1528
-.table > tfoot > tr > th.info,
1529
-.table > thead > tr.info > td,
1530
-.table > tbody > tr.info > td,
1531
-.table > tfoot > tr.info > td,
1532
-.table > thead > tr.info > th,
1533
-.table > tbody > tr.info > th,
1534
-.table > tfoot > tr.info > th {
1535
- background-color: #d9edf7;
1536
-}
1537
-.table-hover > tbody > tr > td.info:hover,
1538
-.table-hover > tbody > tr > th.info:hover,
1539
-.table-hover > tbody > tr.info:hover > td,
1540
-.table-hover > tbody > tr.info:hover > th {
1541
- background-color: #c4e3f3;
1542
-}
1543
-.table > thead > tr > td.warning,
1544
-.table > tbody > tr > td.warning,
1545
-.table > tfoot > tr > td.warning,
1546
-.table > thead > tr > th.warning,
1547
-.table > tbody > tr > th.warning,
1548
-.table > tfoot > tr > th.warning,
1549
-.table > thead > tr.warning > td,
1550
-.table > tbody > tr.warning > td,
1551
-.table > tfoot > tr.warning > td,
1552
-.table > thead > tr.warning > th,
1553
-.table > tbody > tr.warning > th,
1554
-.table > tfoot > tr.warning > th {
1555
- background-color: #fcf8e3;
1556
-}
1557
-.table-hover > tbody > tr > td.warning:hover,
1558
-.table-hover > tbody > tr > th.warning:hover,
1559
-.table-hover > tbody > tr.warning:hover > td,
1560
-.table-hover > tbody > tr.warning:hover > th {
1561
- background-color: #faf2cc;
1562
-}
1563
-.table > thead > tr > td.danger,
1564
-.table > tbody > tr > td.danger,
1565
-.table > tfoot > tr > td.danger,
1566
-.table > thead > tr > th.danger,
1567
-.table > tbody > tr > th.danger,
1568
-.table > tfoot > tr > th.danger,
1569
-.table > thead > tr.danger > td,
1570
-.table > tbody > tr.danger > td,
1571
-.table > tfoot > tr.danger > td,
1572
-.table > thead > tr.danger > th,
1573
-.table > tbody > tr.danger > th,
1574
-.table > tfoot > tr.danger > th {
1575
- background-color: #f2dede;
1576
-}
1577
-.table-hover > tbody > tr > td.danger:hover,
1578
-.table-hover > tbody > tr > th.danger:hover,
1579
-.table-hover > tbody > tr.danger:hover > td,
1580
-.table-hover > tbody > tr.danger:hover > th {
1581
- background-color: #ebcccc;
1582
-}
1583
-@media (max-width: 767px) {
1584
- .table-responsive {
1585
- width: 100%;
1586
- margin-bottom: 15px;
1587
- overflow-x: scroll;
1588
- overflow-y: hidden;
1589
- -webkit-overflow-scrolling: touch;
1590
- -ms-overflow-style: -ms-autohiding-scrollbar;
1591
- border: 1px solid #ddd;
1592
- }
1593
- .table-responsive > .table {
1594
- margin-bottom: 0;
1595
- }
1596
- .table-responsive > .table > thead > tr > th,
1597
- .table-responsive > .table > tbody > tr > th,
1598
- .table-responsive > .table > tfoot > tr > th,
1599
- .table-responsive > .table > thead > tr > td,
1600
- .table-responsive > .table > tbody > tr > td,
1601
- .table-responsive > .table > tfoot > tr > td {
1602
- white-space: nowrap;
1603
- }
1604
- .table-responsive > .table-bordered {
1605
- border: 0;
1606
- }
1607
- .table-responsive > .table-bordered > thead > tr > th:first-child,
1608
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
1609
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1610
- .table-responsive > .table-bordered > thead > tr > td:first-child,
1611
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
1612
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1613
- border-left: 0;
1614
- }
1615
- .table-responsive > .table-bordered > thead > tr > th:last-child,
1616
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
1617
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1618
- .table-responsive > .table-bordered > thead > tr > td:last-child,
1619
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
1620
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1621
- border-right: 0;
1622
- }
1623
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
1624
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1625
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
1626
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1627
- border-bottom: 0;
1628
- }
1629
-}
1630
-fieldset {
1631
- min-width: 0;
1632
- padding: 0;
1633
- margin: 0;
1634
- border: 0;
1635
-}
1636
-legend {
1637
- display: block;
1638
- width: 100%;
1639
- padding: 0;
1640
- margin-bottom: 20px;
1641
- font-size: 21px;
1642
- line-height: inherit;
1643
- color: #333;
1644
- border: 0;
1645
- border-bottom: 1px solid #e5e5e5;
1646
-}
1647
-label {
1648
- display: inline-block;
1649
- margin-bottom: 5px;
1650
- font-weight: bold;
1651
-}
1652
-input[type="search"] {
1653
- -webkit-box-sizing: border-box;
1654
- -moz-box-sizing: border-box;
1655
- box-sizing: border-box;
1656
-}
1657
-input[type="radio"],
1658
-input[type="checkbox"] {
1659
- margin: 4px 0 0;
1660
- margin-top: 1px \9;
1661
- /* IE8-9 */
1662
- line-height: normal;
1663
-}
1664
-input[type="file"] {
1665
- display: block;
1666
-}
1667
-input[type="range"] {
1668
- display: block;
1669
- width: 100%;
1670
-}
1671
-select[multiple],
1672
-select[size] {
1673
- height: auto;
1674
-}
1675
-input[type="file"]:focus,
1676
-input[type="radio"]:focus,
1677
-input[type="checkbox"]:focus {
1678
- outline: thin dotted;
1679
- outline: 5px auto -webkit-focus-ring-color;
1680
- outline-offset: -2px;
1681
-}
1682
-output {
1683
- display: block;
1684
- padding-top: 7px;
1685
- font-size: 14px;
1686
- line-height: 1.428571429;
1687
- color: #555;
1688
-}
1689
-.form-control {
1690
- display: block;
1691
- width: 100%;
1692
- height: 34px;
1693
- padding: 6px 12px;
1694
- font-size: 14px;
1695
- line-height: 1.428571429;
1696
- color: #555;
1697
- background-color: #fff;
1698
- background-image: none;
1699
- border: 1px solid #ccc;
1700
- border-radius: 4px;
1701
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1702
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1703
- -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1704
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1705
-}
1706
-.form-control:focus {
1707
- border-color: #66afe9;
1708
- outline: 0;
1709
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
1710
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
1711
-}
1712
-.form-control:-moz-placeholder {
1713
- color: #999;
1714
-}
1715
-.form-control::-moz-placeholder {
1716
- color: #999;
1717
- opacity: 1;
1718
-}
1719
-.form-control:-ms-input-placeholder {
1720
- color: #999;
1721
-}
1722
-.form-control::-webkit-input-placeholder {
1723
- color: #999;
1724
-}
1725
-.form-control[disabled],
1726
-.form-control[readonly],
1727
-fieldset[disabled] .form-control {
1728
- cursor: not-allowed;
1729
- background-color: #eee;
1730
- opacity: 1;
1731
-}
1732
-textarea.form-control {
1733
- height: auto;
1734
-}
1735
-input[type="date"] {
1736
- line-height: 34px;
1737
-}
1738
-.form-group {
1739
- margin-bottom: 15px;
1740
-}
1741
-.radio,
1742
-.checkbox {
1743
- display: block;
1744
- min-height: 20px;
1745
- padding-left: 20px;
1746
- margin-top: 10px;
1747
- margin-bottom: 10px;
1748
-}
1749
-.radio label,
1750
-.checkbox label {
1751
- display: inline;
1752
- font-weight: normal;
1753
- cursor: pointer;
1754
-}
1755
-.radio input[type="radio"],
1756
-.radio-inline input[type="radio"],
1757
-.checkbox input[type="checkbox"],
1758
-.checkbox-inline input[type="checkbox"] {
1759
- float: left;
1760
- margin-left: -20px;
1761
-}
1762
-.radio + .radio,
1763
-.checkbox + .checkbox {
1764
- margin-top: -5px;
1765
-}
1766
-.radio-inline,
1767
-.checkbox-inline {
1768
- display: inline-block;
1769
- padding-left: 20px;
1770
- margin-bottom: 0;
1771
- font-weight: normal;
1772
- vertical-align: middle;
1773
- cursor: pointer;
1774
-}
1775
-.radio-inline + .radio-inline,
1776
-.checkbox-inline + .checkbox-inline {
1777
- margin-top: 0;
1778
- margin-left: 10px;
1779
-}
1780
-input[type="radio"][disabled],
1781
-input[type="checkbox"][disabled],
1782
-.radio[disabled],
1783
-.radio-inline[disabled],
1784
-.checkbox[disabled],
1785
-.checkbox-inline[disabled],
1786
-fieldset[disabled] input[type="radio"],
1787
-fieldset[disabled] input[type="checkbox"],
1788
-fieldset[disabled] .radio,
1789
-fieldset[disabled] .radio-inline,
1790
-fieldset[disabled] .checkbox,
1791
-fieldset[disabled] .checkbox-inline {
1792
- cursor: not-allowed;
1793
-}
1794
-.input-sm {
1795
- height: 30px;
1796
- padding: 5px 10px;
1797
- font-size: 12px;
1798
- line-height: 1.5;
1799
- border-radius: 3px;
1800
-}
1801
-select.input-sm {
1802
- height: 30px;
1803
- line-height: 30px;
1804
-}
1805
-textarea.input-sm,
1806
-select[multiple].input-sm {
1807
- height: auto;
1808
-}
1809
-.input-lg {
1810
- height: 46px;
1811
- padding: 10px 16px;
1812
- font-size: 18px;
1813
- line-height: 1.33;
1814
- border-radius: 6px;
1815
-}
1816
-select.input-lg {
1817
- height: 46px;
1818
- line-height: 46px;
1819
-}
1820
-textarea.input-lg,
1821
-select[multiple].input-lg {
1822
- height: auto;
1823
-}
1824
-.has-feedback {
1825
- position: relative;
1826
-}
1827
-.has-feedback .form-control {
1828
- padding-right: 42.5px;
1829
-}
1830
-.has-feedback .form-control-feedback {
1831
- position: absolute;
1832
- top: 25px;
1833
- right: 0;
1834
- display: block;
1835
- width: 34px;
1836
- height: 34px;
1837
- line-height: 34px;
1838
- text-align: center;
1839
-}
1840
-.has-success .help-block,
1841
-.has-success .control-label,
1842
-.has-success .radio,
1843
-.has-success .checkbox,
1844
-.has-success .radio-inline,
1845
-.has-success .checkbox-inline {
1846
- color: #3c763d;
1847
-}
1848
-.has-success .form-control {
1849
- border-color: #3c763d;
1850
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1851
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1852
-}
1853
-.has-success .form-control:focus {
1854
- border-color: #2b542c;
1855
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
1856
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
1857
-}
1858
-.has-success .input-group-addon {
1859
- color: #3c763d;
1860
- background-color: #dff0d8;
1861
- border-color: #3c763d;
1862
-}
1863
-.has-success .form-control-feedback {
1864
- color: #3c763d;
1865
-}
1866
-.has-warning .help-block,
1867
-.has-warning .control-label,
1868
-.has-warning .radio,
1869
-.has-warning .checkbox,
1870
-.has-warning .radio-inline,
1871
-.has-warning .checkbox-inline {
1872
- color: #8a6d3b;
1873
-}
1874
-.has-warning .form-control {
1875
- border-color: #8a6d3b;
1876
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1877
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1878
-}
1879
-.has-warning .form-control:focus {
1880
- border-color: #66512c;
1881
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
1882
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
1883
-}
1884
-.has-warning .input-group-addon {
1885
- color: #8a6d3b;
1886
- background-color: #fcf8e3;
1887
- border-color: #8a6d3b;
1888
-}
1889
-.has-warning .form-control-feedback {
1890
- color: #8a6d3b;
1891
-}
1892
-.has-error .help-block,
1893
-.has-error .control-label,
1894
-.has-error .radio,
1895
-.has-error .checkbox,
1896
-.has-error .radio-inline,
1897
-.has-error .checkbox-inline {
1898
- color: #a94442;
1899
-}
1900
-.has-error .form-control {
1901
- border-color: #a94442;
1902
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1903
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
1904
-}
1905
-.has-error .form-control:focus {
1906
- border-color: #843534;
1907
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
1908
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
1909
-}
1910
-.has-error .input-group-addon {
1911
- color: #a94442;
1912
- background-color: #f2dede;
1913
- border-color: #a94442;
1914
-}
1915
-.has-error .form-control-feedback {
1916
- color: #a94442;
1917
-}
1918
-.form-control-static {
1919
- margin-bottom: 0;
1920
-}
1921
-.help-block {
1922
- display: block;
1923
- margin-top: 5px;
1924
- margin-bottom: 10px;
1925
- color: #737373;
1926
-}
1927
-@media (min-width: 768px) {
1928
- .form-inline .form-group {
1929
- display: inline-block;
1930
- margin-bottom: 0;
1931
- vertical-align: middle;
1932
- }
1933
- .form-inline .form-control {
1934
- display: inline-block;
1935
- width: auto;
1936
- vertical-align: middle;
1937
- }
1938
- .form-inline .control-label {
1939
- margin-bottom: 0;
1940
- vertical-align: middle;
1941
- }
1942
- .form-inline .radio,
1943
- .form-inline .checkbox {
1944
- display: inline-block;
1945
- padding-left: 0;
1946
- margin-top: 0;
1947
- margin-bottom: 0;
1948
- vertical-align: middle;
1949
- }
1950
- .form-inline .radio input[type="radio"],
1951
- .form-inline .checkbox input[type="checkbox"] {
1952
- float: none;
1953
- margin-left: 0;
1954
- }
1955
- .form-inline .has-feedback .form-control-feedback {
1956
- top: 0;
1957
- }
1958
-}
1959
-.form-horizontal .control-label,
1960
-.form-horizontal .radio,
1961
-.form-horizontal .checkbox,
1962
-.form-horizontal .radio-inline,
1963
-.form-horizontal .checkbox-inline {
1964
- padding-top: 7px;
1965
- margin-top: 0;
1966
- margin-bottom: 0;
1967
-}
1968
-.form-horizontal .radio,
1969
-.form-horizontal .checkbox {
1970
- min-height: 27px;
1971
-}
1972
-.form-horizontal .form-group {
1973
- margin-right: -15px;
1974
- margin-left: -15px;
1975
-}
1976
-.form-horizontal .form-control-static {
1977
- padding-top: 7px;
1978
-}
1979
-@media (min-width: 768px) {
1980
- .form-horizontal .control-label {
1981
- text-align: right;
1982
- }
1983
-}
1984
-.form-horizontal .has-feedback .form-control-feedback {
1985
- top: 0;
1986
- right: 15px;
1987
-}
1988
-.btn {
1989
- display: inline-block;
1990
- padding: 6px 12px;
1991
- margin-bottom: 0;
1992
- font-size: 14px;
1993
- font-weight: normal;
1994
- line-height: 1.428571429;
1995
- text-align: center;
1996
- white-space: nowrap;
1997
- vertical-align: middle;
1998
- cursor: pointer;
1999
- -webkit-user-select: none;
2000
- -moz-user-select: none;
2001
- -ms-user-select: none;
2002
- -o-user-select: none;
2003
- user-select: none;
2004
- background-image: none;
2005
- border: 1px solid transparent;
2006
- border-radius: 4px;
2007
-}
2008
-.btn:focus {
2009
- outline: thin dotted;
2010
- outline: 5px auto -webkit-focus-ring-color;
2011
- outline-offset: -2px;
2012
-}
2013
-.btn:hover,
2014
-.btn:focus {
2015
- color: #333;
2016
- text-decoration: none;
2017
-}
2018
-.btn:active,
2019
-.btn.active {
2020
- background-image: none;
2021
- outline: 0;
2022
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2023
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2024
-}
2025
-.btn.disabled,
2026
-.btn[disabled],
2027
-fieldset[disabled] .btn {
2028
- pointer-events: none;
2029
- cursor: not-allowed;
2030
- filter: alpha(opacity=65);
2031
- -webkit-box-shadow: none;
2032
- box-shadow: none;
2033
- opacity: .65;
2034
-}
2035
-.btn-default {
2036
- color: #333;
2037
- background-color: #fff;
2038
- border-color: #ccc;
2039
-}
2040
-.btn-default:hover,
2041
-.btn-default:focus,
2042
-.btn-default:active,
2043
-.btn-default.active,
2044
-.open .dropdown-toggle.btn-default {
2045
- color: #333;
2046
- background-color: #ebebeb;
2047
- border-color: #adadad;
2048
-}
2049
-.btn-default:active,
2050
-.btn-default.active,
2051
-.open .dropdown-toggle.btn-default {
2052
- background-image: none;
2053
-}
2054
-.btn-default.disabled,
2055
-.btn-default[disabled],
2056
-fieldset[disabled] .btn-default,
2057
-.btn-default.disabled:hover,
2058
-.btn-default[disabled]:hover,
2059
-fieldset[disabled] .btn-default:hover,
2060
-.btn-default.disabled:focus,
2061
-.btn-default[disabled]:focus,
2062
-fieldset[disabled] .btn-default:focus,
2063
-.btn-default.disabled:active,
2064
-.btn-default[disabled]:active,
2065
-fieldset[disabled] .btn-default:active,
2066
-.btn-default.disabled.active,
2067
-.btn-default[disabled].active,
2068
-fieldset[disabled] .btn-default.active {
2069
- background-color: #fff;
2070
- border-color: #ccc;
2071
-}
2072
-.btn-default .badge {
2073
- color: #fff;
2074
- background-color: #333;
2075
-}
2076
-.btn-primary {
2077
- color: #fff;
2078
- background-color: #428bca;
2079
- border-color: #357ebd;
2080
-}
2081
-.btn-primary:hover,
2082
-.btn-primary:focus,
2083
-.btn-primary:active,
2084
-.btn-primary.active,
2085
-.open .dropdown-toggle.btn-primary {
2086
- color: #fff;
2087
- background-color: #3276b1;
2088
- border-color: #285e8e;
2089
-}
2090
-.btn-primary:active,
2091
-.btn-primary.active,
2092
-.open .dropdown-toggle.btn-primary {
2093
- background-image: none;
2094
-}
2095
-.btn-primary.disabled,
2096
-.btn-primary[disabled],
2097
-fieldset[disabled] .btn-primary,
2098
-.btn-primary.disabled:hover,
2099
-.btn-primary[disabled]:hover,
2100
-fieldset[disabled] .btn-primary:hover,
2101
-.btn-primary.disabled:focus,
2102
-.btn-primary[disabled]:focus,
2103
-fieldset[disabled] .btn-primary:focus,
2104
-.btn-primary.disabled:active,
2105
-.btn-primary[disabled]:active,
2106
-fieldset[disabled] .btn-primary:active,
2107
-.btn-primary.disabled.active,
2108
-.btn-primary[disabled].active,
2109
-fieldset[disabled] .btn-primary.active {
2110
- background-color: #428bca;
2111
- border-color: #357ebd;
2112
-}
2113
-.btn-primary .badge {
2114
- color: #428bca;
2115
- background-color: #fff;
2116
-}
2117
-.btn-success {
2118
- color: #fff;
2119
- background-color: #5cb85c;
2120
- border-color: #4cae4c;
2121
-}
2122
-.btn-success:hover,
2123
-.btn-success:focus,
2124
-.btn-success:active,
2125
-.btn-success.active,
2126
-.open .dropdown-toggle.btn-success {
2127
- color: #fff;
2128
- background-color: #47a447;
2129
- border-color: #398439;
2130
-}
2131
-.btn-success:active,
2132
-.btn-success.active,
2133
-.open .dropdown-toggle.btn-success {
2134
- background-image: none;
2135
-}
2136
-.btn-success.disabled,
2137
-.btn-success[disabled],
2138
-fieldset[disabled] .btn-success,
2139
-.btn-success.disabled:hover,
2140
-.btn-success[disabled]:hover,
2141
-fieldset[disabled] .btn-success:hover,
2142
-.btn-success.disabled:focus,
2143
-.btn-success[disabled]:focus,
2144
-fieldset[disabled] .btn-success:focus,
2145
-.btn-success.disabled:active,
2146
-.btn-success[disabled]:active,
2147
-fieldset[disabled] .btn-success:active,
2148
-.btn-success.disabled.active,
2149
-.btn-success[disabled].active,
2150
-fieldset[disabled] .btn-success.active {
2151
- background-color: #5cb85c;
2152
- border-color: #4cae4c;
2153
-}
2154
-.btn-success .badge {
2155
- color: #5cb85c;
2156
- background-color: #fff;
2157
-}
2158
-.btn-info {
2159
- color: #fff;
2160
- background-color: #5bc0de;
2161
- border-color: #46b8da;
2162
-}
2163
-.btn-info:hover,
2164
-.btn-info:focus,
2165
-.btn-info:active,
2166
-.btn-info.active,
2167
-.open .dropdown-toggle.btn-info {
2168
- color: #fff;
2169
- background-color: #39b3d7;
2170
- border-color: #269abc;
2171
-}
2172
-.btn-info:active,
2173
-.btn-info.active,
2174
-.open .dropdown-toggle.btn-info {
2175
- background-image: none;
2176
-}
2177
-.btn-info.disabled,
2178
-.btn-info[disabled],
2179
-fieldset[disabled] .btn-info,
2180
-.btn-info.disabled:hover,
2181
-.btn-info[disabled]:hover,
2182
-fieldset[disabled] .btn-info:hover,
2183
-.btn-info.disabled:focus,
2184
-.btn-info[disabled]:focus,
2185
-fieldset[disabled] .btn-info:focus,
2186
-.btn-info.disabled:active,
2187
-.btn-info[disabled]:active,
2188
-fieldset[disabled] .btn-info:active,
2189
-.btn-info.disabled.active,
2190
-.btn-info[disabled].active,
2191
-fieldset[disabled] .btn-info.active {
2192
- background-color: #5bc0de;
2193
- border-color: #46b8da;
2194
-}
2195
-.btn-info .badge {
2196
- color: #5bc0de;
2197
- background-color: #fff;
2198
-}
2199
-.btn-warning {
2200
- color: #fff;
2201
- background-color: #f0ad4e;
2202
- border-color: #eea236;
2203
-}
2204
-.btn-warning:hover,
2205
-.btn-warning:focus,
2206
-.btn-warning:active,
2207
-.btn-warning.active,
2208
-.open .dropdown-toggle.btn-warning {
2209
- color: #fff;
2210
- background-color: #ed9c28;
2211
- border-color: #d58512;
2212
-}
2213
-.btn-warning:active,
2214
-.btn-warning.active,
2215
-.open .dropdown-toggle.btn-warning {
2216
- background-image: none;
2217
-}
2218
-.btn-warning.disabled,
2219
-.btn-warning[disabled],
2220
-fieldset[disabled] .btn-warning,
2221
-.btn-warning.disabled:hover,
2222
-.btn-warning[disabled]:hover,
2223
-fieldset[disabled] .btn-warning:hover,
2224
-.btn-warning.disabled:focus,
2225
-.btn-warning[disabled]:focus,
2226
-fieldset[disabled] .btn-warning:focus,
2227
-.btn-warning.disabled:active,
2228
-.btn-warning[disabled]:active,
2229
-fieldset[disabled] .btn-warning:active,
2230
-.btn-warning.disabled.active,
2231
-.btn-warning[disabled].active,
2232
-fieldset[disabled] .btn-warning.active {
2233
- background-color: #f0ad4e;
2234
- border-color: #eea236;
2235
-}
2236
-.btn-warning .badge {
2237
- color: #f0ad4e;
2238
- background-color: #fff;
2239
-}
2240
-.btn-danger {
2241
- color: #fff;
2242
- background-color: #d9534f;
2243
- border-color: #d43f3a;
2244
-}
2245
-.btn-danger:hover,
2246
-.btn-danger:focus,
2247
-.btn-danger:active,
2248
-.btn-danger.active,
2249
-.open .dropdown-toggle.btn-danger {
2250
- color: #fff;
2251
- background-color: #d2322d;
2252
- border-color: #ac2925;
2253
-}
2254
-.btn-danger:active,
2255
-.btn-danger.active,
2256
-.open .dropdown-toggle.btn-danger {
2257
- background-image: none;
2258
-}
2259
-.btn-danger.disabled,
2260
-.btn-danger[disabled],
2261
-fieldset[disabled] .btn-danger,
2262
-.btn-danger.disabled:hover,
2263
-.btn-danger[disabled]:hover,
2264
-fieldset[disabled] .btn-danger:hover,
2265
-.btn-danger.disabled:focus,
2266
-.btn-danger[disabled]:focus,
2267
-fieldset[disabled] .btn-danger:focus,
2268
-.btn-danger.disabled:active,
2269
-.btn-danger[disabled]:active,
2270
-fieldset[disabled] .btn-danger:active,
2271
-.btn-danger.disabled.active,
2272
-.btn-danger[disabled].active,
2273
-fieldset[disabled] .btn-danger.active {
2274
- background-color: #d9534f;
2275
- border-color: #d43f3a;
2276
-}
2277
-.btn-danger .badge {
2278
- color: #d9534f;
2279
- background-color: #fff;
2280
-}
2281
-.btn-link {
2282
- font-weight: normal;
2283
- color: #428bca;
2284
- cursor: pointer;
2285
- border-radius: 0;
2286
-}
2287
-.btn-link,
2288
-.btn-link:active,
2289
-.btn-link[disabled],
2290
-fieldset[disabled] .btn-link {
2291
- background-color: transparent;
2292
- -webkit-box-shadow: none;
2293
- box-shadow: none;
2294
-}
2295
-.btn-link,
2296
-.btn-link:hover,
2297
-.btn-link:focus,
2298
-.btn-link:active {
2299
- border-color: transparent;
2300
-}
2301
-.btn-link:hover,
2302
-.btn-link:focus {
2303
- color: #2a6496;
2304
- text-decoration: underline;
2305
- background-color: transparent;
2306
-}
2307
-.btn-link[disabled]:hover,
2308
-fieldset[disabled] .btn-link:hover,
2309
-.btn-link[disabled]:focus,
2310
-fieldset[disabled] .btn-link:focus {
2311
- color: #999;
2312
- text-decoration: none;
2313
-}
2314
-.btn-lg {
2315
- padding: 10px 16px;
2316
- font-size: 18px;
2317
- line-height: 1.33;
2318
- border-radius: 6px;
2319
-}
2320
-.btn-sm {
2321
- padding: 5px 10px;
2322
- font-size: 12px;
2323
- line-height: 1.5;
2324
- border-radius: 3px;
2325
-}
2326
-.btn-xs {
2327
- padding: 1px 5px;
2328
- font-size: 12px;
2329
- line-height: 1.5;
2330
- border-radius: 3px;
2331
-}
2332
-.btn-block {
2333
- display: block;
2334
- width: 100%;
2335
- padding-right: 0;
2336
- padding-left: 0;
2337
-}
2338
-.btn-block + .btn-block {
2339
- margin-top: 5px;
2340
-}
2341
-input[type="submit"].btn-block,
2342
-input[type="reset"].btn-block,
2343
-input[type="button"].btn-block {
2344
- width: 100%;
2345
-}
2346
-.fade {
2347
- opacity: 0;
2348
- -webkit-transition: opacity .15s linear;
2349
- transition: opacity .15s linear;
2350
-}
2351
-.fade.in {
2352
- opacity: 1;
2353
-}
2354
-.collapse {
2355
- display: none;
2356
-}
2357
-.collapse.in {
2358
- display: block;
2359
-}
2360
-.collapsing {
2361
- position: relative;
2362
- height: 0;
2363
- overflow: hidden;
2364
- -webkit-transition: height .35s ease;
2365
- transition: height .35s ease;
2366262 }
2367263 @font-face {
2368264 font-family: 'Glyphicons Halflings';
....@@ -2982,6 +878,2237 @@
2982878 .glyphicon-tree-deciduous:before {
2983879 content: "\e200";
2984880 }
881
+* {
882
+ -webkit-box-sizing: border-box;
883
+ -moz-box-sizing: border-box;
884
+ box-sizing: border-box;
885
+}
886
+*:before,
887
+*:after {
888
+ -webkit-box-sizing: border-box;
889
+ -moz-box-sizing: border-box;
890
+ box-sizing: border-box;
891
+}
892
+html {
893
+ font-size: 10px;
894
+
895
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
896
+}
897
+body {
898
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
899
+ font-size: 14px;
900
+ line-height: 1.42857143;
901
+ color: #333;
902
+ background-color: #fff;
903
+}
904
+input,
905
+button,
906
+select,
907
+textarea {
908
+ font-family: inherit;
909
+ font-size: inherit;
910
+ line-height: inherit;
911
+}
912
+a {
913
+ color: #428bca;
914
+ text-decoration: none;
915
+}
916
+a:hover,
917
+a:focus {
918
+ color: #2a6496;
919
+ text-decoration: underline;
920
+}
921
+a:focus {
922
+ outline: thin dotted;
923
+ outline: 5px auto -webkit-focus-ring-color;
924
+ outline-offset: -2px;
925
+}
926
+figure {
927
+ margin: 0;
928
+}
929
+img {
930
+ vertical-align: middle;
931
+}
932
+.img-responsive,
933
+.thumbnail > img,
934
+.thumbnail a > img,
935
+.carousel-inner > .item > img,
936
+.carousel-inner > .item > a > img {
937
+ display: block;
938
+ width: 100% \9;
939
+ max-width: 100%;
940
+ height: auto;
941
+}
942
+.img-rounded {
943
+ border-radius: 6px;
944
+}
945
+.img-thumbnail {
946
+ display: inline-block;
947
+ width: 100% \9;
948
+ max-width: 100%;
949
+ height: auto;
950
+ padding: 4px;
951
+ line-height: 1.42857143;
952
+ background-color: #fff;
953
+ border: 1px solid #ddd;
954
+ border-radius: 4px;
955
+ -webkit-transition: all .2s ease-in-out;
956
+ -o-transition: all .2s ease-in-out;
957
+ transition: all .2s ease-in-out;
958
+}
959
+.img-circle {
960
+ border-radius: 50%;
961
+}
962
+hr {
963
+ margin-top: 20px;
964
+ margin-bottom: 20px;
965
+ border: 0;
966
+ border-top: 1px solid #eee;
967
+}
968
+.sr-only {
969
+ position: absolute;
970
+ width: 1px;
971
+ height: 1px;
972
+ padding: 0;
973
+ margin: -1px;
974
+ overflow: hidden;
975
+ clip: rect(0, 0, 0, 0);
976
+ border: 0;
977
+}
978
+.sr-only-focusable:active,
979
+.sr-only-focusable:focus {
980
+ position: static;
981
+ width: auto;
982
+ height: auto;
983
+ margin: 0;
984
+ overflow: visible;
985
+ clip: auto;
986
+}
987
+h1,
988
+h2,
989
+h3,
990
+h4,
991
+h5,
992
+h6,
993
+.h1,
994
+.h2,
995
+.h3,
996
+.h4,
997
+.h5,
998
+.h6 {
999
+ font-family: inherit;
1000
+ font-weight: 500;
1001
+ line-height: 1.1;
1002
+ color: inherit;
1003
+}
1004
+h1 small,
1005
+h2 small,
1006
+h3 small,
1007
+h4 small,
1008
+h5 small,
1009
+h6 small,
1010
+.h1 small,
1011
+.h2 small,
1012
+.h3 small,
1013
+.h4 small,
1014
+.h5 small,
1015
+.h6 small,
1016
+h1 .small,
1017
+h2 .small,
1018
+h3 .small,
1019
+h4 .small,
1020
+h5 .small,
1021
+h6 .small,
1022
+.h1 .small,
1023
+.h2 .small,
1024
+.h3 .small,
1025
+.h4 .small,
1026
+.h5 .small,
1027
+.h6 .small {
1028
+ font-weight: normal;
1029
+ line-height: 1;
1030
+ color: #777;
1031
+}
1032
+h1,
1033
+.h1,
1034
+h2,
1035
+.h2,
1036
+h3,
1037
+.h3 {
1038
+ margin-top: 20px;
1039
+ margin-bottom: 10px;
1040
+}
1041
+h1 small,
1042
+.h1 small,
1043
+h2 small,
1044
+.h2 small,
1045
+h3 small,
1046
+.h3 small,
1047
+h1 .small,
1048
+.h1 .small,
1049
+h2 .small,
1050
+.h2 .small,
1051
+h3 .small,
1052
+.h3 .small {
1053
+ font-size: 65%;
1054
+}
1055
+h4,
1056
+.h4,
1057
+h5,
1058
+.h5,
1059
+h6,
1060
+.h6 {
1061
+ margin-top: 10px;
1062
+ margin-bottom: 10px;
1063
+}
1064
+h4 small,
1065
+.h4 small,
1066
+h5 small,
1067
+.h5 small,
1068
+h6 small,
1069
+.h6 small,
1070
+h4 .small,
1071
+.h4 .small,
1072
+h5 .small,
1073
+.h5 .small,
1074
+h6 .small,
1075
+.h6 .small {
1076
+ font-size: 75%;
1077
+}
1078
+h1,
1079
+.h1 {
1080
+ font-size: 36px;
1081
+}
1082
+h2,
1083
+.h2 {
1084
+ font-size: 30px;
1085
+}
1086
+h3,
1087
+.h3 {
1088
+ font-size: 24px;
1089
+}
1090
+h4,
1091
+.h4 {
1092
+ font-size: 18px;
1093
+}
1094
+h5,
1095
+.h5 {
1096
+ font-size: 14px;
1097
+}
1098
+h6,
1099
+.h6 {
1100
+ font-size: 12px;
1101
+}
1102
+p {
1103
+ margin: 0 0 10px;
1104
+}
1105
+.lead {
1106
+ margin-bottom: 20px;
1107
+ font-size: 16px;
1108
+ font-weight: 300;
1109
+ line-height: 1.4;
1110
+}
1111
+@media (min-width: 768px) {
1112
+ .lead {
1113
+ font-size: 21px;
1114
+ }
1115
+}
1116
+small,
1117
+.small {
1118
+ font-size: 85%;
1119
+}
1120
+cite {
1121
+ font-style: normal;
1122
+}
1123
+mark,
1124
+.mark {
1125
+ padding: .2em;
1126
+ background-color: #fcf8e3;
1127
+}
1128
+.text-left {
1129
+ text-align: left;
1130
+}
1131
+.text-right {
1132
+ text-align: right;
1133
+}
1134
+.text-center {
1135
+ text-align: center;
1136
+}
1137
+.text-justify {
1138
+ text-align: justify;
1139
+}
1140
+.text-nowrap {
1141
+ white-space: nowrap;
1142
+}
1143
+.text-lowercase {
1144
+ text-transform: lowercase;
1145
+}
1146
+.text-uppercase {
1147
+ text-transform: uppercase;
1148
+}
1149
+.text-capitalize {
1150
+ text-transform: capitalize;
1151
+}
1152
+.text-muted {
1153
+ color: #777;
1154
+}
1155
+.text-primary {
1156
+ color: #428bca;
1157
+}
1158
+a.text-primary:hover {
1159
+ color: #3071a9;
1160
+}
1161
+.text-success {
1162
+ color: #3c763d;
1163
+}
1164
+a.text-success:hover {
1165
+ color: #2b542c;
1166
+}
1167
+.text-info {
1168
+ color: #31708f;
1169
+}
1170
+a.text-info:hover {
1171
+ color: #245269;
1172
+}
1173
+.text-warning {
1174
+ color: #8a6d3b;
1175
+}
1176
+a.text-warning:hover {
1177
+ color: #66512c;
1178
+}
1179
+.text-danger {
1180
+ color: #a94442;
1181
+}
1182
+a.text-danger:hover {
1183
+ color: #843534;
1184
+}
1185
+.bg-primary {
1186
+ color: #fff;
1187
+ background-color: #428bca;
1188
+}
1189
+a.bg-primary:hover {
1190
+ background-color: #3071a9;
1191
+}
1192
+.bg-success {
1193
+ background-color: #dff0d8;
1194
+}
1195
+a.bg-success:hover {
1196
+ background-color: #c1e2b3;
1197
+}
1198
+.bg-info {
1199
+ background-color: #d9edf7;
1200
+}
1201
+a.bg-info:hover {
1202
+ background-color: #afd9ee;
1203
+}
1204
+.bg-warning {
1205
+ background-color: #fcf8e3;
1206
+}
1207
+a.bg-warning:hover {
1208
+ background-color: #f7ecb5;
1209
+}
1210
+.bg-danger {
1211
+ background-color: #f2dede;
1212
+}
1213
+a.bg-danger:hover {
1214
+ background-color: #e4b9b9;
1215
+}
1216
+.page-header {
1217
+ padding-bottom: 9px;
1218
+ margin: 40px 0 20px;
1219
+ border-bottom: 1px solid #eee;
1220
+}
1221
+ul,
1222
+ol {
1223
+ margin-top: 0;
1224
+ margin-bottom: 10px;
1225
+}
1226
+ul ul,
1227
+ol ul,
1228
+ul ol,
1229
+ol ol {
1230
+ margin-bottom: 0;
1231
+}
1232
+.list-unstyled {
1233
+ padding-left: 0;
1234
+ list-style: none;
1235
+}
1236
+.list-inline {
1237
+ padding-left: 0;
1238
+ margin-left: -5px;
1239
+ list-style: none;
1240
+}
1241
+.list-inline > li {
1242
+ display: inline-block;
1243
+ padding-right: 5px;
1244
+ padding-left: 5px;
1245
+}
1246
+dl {
1247
+ margin-top: 0;
1248
+ margin-bottom: 20px;
1249
+}
1250
+dt,
1251
+dd {
1252
+ line-height: 1.42857143;
1253
+}
1254
+dt {
1255
+ font-weight: bold;
1256
+}
1257
+dd {
1258
+ margin-left: 0;
1259
+}
1260
+@media (min-width: 768px) {
1261
+ .dl-horizontal dt {
1262
+ float: left;
1263
+ width: 160px;
1264
+ overflow: hidden;
1265
+ clear: left;
1266
+ text-align: right;
1267
+ text-overflow: ellipsis;
1268
+ white-space: nowrap;
1269
+ }
1270
+ .dl-horizontal dd {
1271
+ margin-left: 180px;
1272
+ }
1273
+}
1274
+abbr[title],
1275
+abbr[data-original-title] {
1276
+ cursor: help;
1277
+ border-bottom: 1px dotted #777;
1278
+}
1279
+.initialism {
1280
+ font-size: 90%;
1281
+ text-transform: uppercase;
1282
+}
1283
+blockquote {
1284
+ padding: 10px 20px;
1285
+ margin: 0 0 20px;
1286
+ font-size: 17.5px;
1287
+ border-left: 5px solid #eee;
1288
+}
1289
+blockquote p:last-child,
1290
+blockquote ul:last-child,
1291
+blockquote ol:last-child {
1292
+ margin-bottom: 0;
1293
+}
1294
+blockquote footer,
1295
+blockquote small,
1296
+blockquote .small {
1297
+ display: block;
1298
+ font-size: 80%;
1299
+ line-height: 1.42857143;
1300
+ color: #777;
1301
+}
1302
+blockquote footer:before,
1303
+blockquote small:before,
1304
+blockquote .small:before {
1305
+ content: '\2014 \00A0';
1306
+}
1307
+.blockquote-reverse,
1308
+blockquote.pull-right {
1309
+ padding-right: 15px;
1310
+ padding-left: 0;
1311
+ text-align: right;
1312
+ border-right: 5px solid #eee;
1313
+ border-left: 0;
1314
+}
1315
+.blockquote-reverse footer:before,
1316
+blockquote.pull-right footer:before,
1317
+.blockquote-reverse small:before,
1318
+blockquote.pull-right small:before,
1319
+.blockquote-reverse .small:before,
1320
+blockquote.pull-right .small:before {
1321
+ content: '';
1322
+}
1323
+.blockquote-reverse footer:after,
1324
+blockquote.pull-right footer:after,
1325
+.blockquote-reverse small:after,
1326
+blockquote.pull-right small:after,
1327
+.blockquote-reverse .small:after,
1328
+blockquote.pull-right .small:after {
1329
+ content: '\00A0 \2014';
1330
+}
1331
+blockquote:before,
1332
+blockquote:after {
1333
+ content: "";
1334
+}
1335
+address {
1336
+ margin-bottom: 20px;
1337
+ font-style: normal;
1338
+ line-height: 1.42857143;
1339
+}
1340
+code,
1341
+kbd,
1342
+pre,
1343
+samp {
1344
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1345
+}
1346
+code {
1347
+ padding: 2px 4px;
1348
+ font-size: 90%;
1349
+ color: #c7254e;
1350
+ background-color: #f9f2f4;
1351
+ border-radius: 4px;
1352
+}
1353
+kbd {
1354
+ padding: 2px 4px;
1355
+ font-size: 90%;
1356
+ color: #fff;
1357
+ background-color: #333;
1358
+ border-radius: 3px;
1359
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1360
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1361
+}
1362
+kbd kbd {
1363
+ padding: 0;
1364
+ font-size: 100%;
1365
+ -webkit-box-shadow: none;
1366
+ box-shadow: none;
1367
+}
1368
+pre {
1369
+ display: block;
1370
+ padding: 9.5px;
1371
+ margin: 0 0 10px;
1372
+ font-size: 13px;
1373
+ line-height: 1.42857143;
1374
+ color: #333;
1375
+ word-break: break-all;
1376
+ word-wrap: break-word;
1377
+ background-color: #f5f5f5;
1378
+ border: 1px solid #ccc;
1379
+ border-radius: 4px;
1380
+}
1381
+pre code {
1382
+ padding: 0;
1383
+ font-size: inherit;
1384
+ color: inherit;
1385
+ white-space: pre-wrap;
1386
+ background-color: transparent;
1387
+ border-radius: 0;
1388
+}
1389
+.pre-scrollable {
1390
+ max-height: 340px;
1391
+ overflow-y: scroll;
1392
+}
1393
+.container {
1394
+ padding-right: 15px;
1395
+ padding-left: 15px;
1396
+ margin-right: auto;
1397
+ margin-left: auto;
1398
+}
1399
+@media (min-width: 768px) {
1400
+ .container {
1401
+ width: 750px;
1402
+ }
1403
+}
1404
+@media (min-width: 992px) {
1405
+ .container {
1406
+ width: 970px;
1407
+ }
1408
+}
1409
+@media (min-width: 1200px) {
1410
+ .container {
1411
+ width: 1170px;
1412
+ }
1413
+}
1414
+.container-fluid {
1415
+ padding-right: 15px;
1416
+ padding-left: 15px;
1417
+ margin-right: auto;
1418
+ margin-left: auto;
1419
+}
1420
+.row {
1421
+ margin-right: -15px;
1422
+ margin-left: -15px;
1423
+}
1424
+.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 {
1425
+ position: relative;
1426
+ min-height: 1px;
1427
+ padding-right: 15px;
1428
+ padding-left: 15px;
1429
+}
1430
+.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 {
1431
+ float: left;
1432
+}
1433
+.col-xs-12 {
1434
+ width: 100%;
1435
+}
1436
+.col-xs-11 {
1437
+ width: 91.66666667%;
1438
+}
1439
+.col-xs-10 {
1440
+ width: 83.33333333%;
1441
+}
1442
+.col-xs-9 {
1443
+ width: 75%;
1444
+}
1445
+.col-xs-8 {
1446
+ width: 66.66666667%;
1447
+}
1448
+.col-xs-7 {
1449
+ width: 58.33333333%;
1450
+}
1451
+.col-xs-6 {
1452
+ width: 50%;
1453
+}
1454
+.col-xs-5 {
1455
+ width: 41.66666667%;
1456
+}
1457
+.col-xs-4 {
1458
+ width: 33.33333333%;
1459
+}
1460
+.col-xs-3 {
1461
+ width: 25%;
1462
+}
1463
+.col-xs-2 {
1464
+ width: 16.66666667%;
1465
+}
1466
+.col-xs-1 {
1467
+ width: 8.33333333%;
1468
+}
1469
+.col-xs-pull-12 {
1470
+ right: 100%;
1471
+}
1472
+.col-xs-pull-11 {
1473
+ right: 91.66666667%;
1474
+}
1475
+.col-xs-pull-10 {
1476
+ right: 83.33333333%;
1477
+}
1478
+.col-xs-pull-9 {
1479
+ right: 75%;
1480
+}
1481
+.col-xs-pull-8 {
1482
+ right: 66.66666667%;
1483
+}
1484
+.col-xs-pull-7 {
1485
+ right: 58.33333333%;
1486
+}
1487
+.col-xs-pull-6 {
1488
+ right: 50%;
1489
+}
1490
+.col-xs-pull-5 {
1491
+ right: 41.66666667%;
1492
+}
1493
+.col-xs-pull-4 {
1494
+ right: 33.33333333%;
1495
+}
1496
+.col-xs-pull-3 {
1497
+ right: 25%;
1498
+}
1499
+.col-xs-pull-2 {
1500
+ right: 16.66666667%;
1501
+}
1502
+.col-xs-pull-1 {
1503
+ right: 8.33333333%;
1504
+}
1505
+.col-xs-pull-0 {
1506
+ right: auto;
1507
+}
1508
+.col-xs-push-12 {
1509
+ left: 100%;
1510
+}
1511
+.col-xs-push-11 {
1512
+ left: 91.66666667%;
1513
+}
1514
+.col-xs-push-10 {
1515
+ left: 83.33333333%;
1516
+}
1517
+.col-xs-push-9 {
1518
+ left: 75%;
1519
+}
1520
+.col-xs-push-8 {
1521
+ left: 66.66666667%;
1522
+}
1523
+.col-xs-push-7 {
1524
+ left: 58.33333333%;
1525
+}
1526
+.col-xs-push-6 {
1527
+ left: 50%;
1528
+}
1529
+.col-xs-push-5 {
1530
+ left: 41.66666667%;
1531
+}
1532
+.col-xs-push-4 {
1533
+ left: 33.33333333%;
1534
+}
1535
+.col-xs-push-3 {
1536
+ left: 25%;
1537
+}
1538
+.col-xs-push-2 {
1539
+ left: 16.66666667%;
1540
+}
1541
+.col-xs-push-1 {
1542
+ left: 8.33333333%;
1543
+}
1544
+.col-xs-push-0 {
1545
+ left: auto;
1546
+}
1547
+.col-xs-offset-12 {
1548
+ margin-left: 100%;
1549
+}
1550
+.col-xs-offset-11 {
1551
+ margin-left: 91.66666667%;
1552
+}
1553
+.col-xs-offset-10 {
1554
+ margin-left: 83.33333333%;
1555
+}
1556
+.col-xs-offset-9 {
1557
+ margin-left: 75%;
1558
+}
1559
+.col-xs-offset-8 {
1560
+ margin-left: 66.66666667%;
1561
+}
1562
+.col-xs-offset-7 {
1563
+ margin-left: 58.33333333%;
1564
+}
1565
+.col-xs-offset-6 {
1566
+ margin-left: 50%;
1567
+}
1568
+.col-xs-offset-5 {
1569
+ margin-left: 41.66666667%;
1570
+}
1571
+.col-xs-offset-4 {
1572
+ margin-left: 33.33333333%;
1573
+}
1574
+.col-xs-offset-3 {
1575
+ margin-left: 25%;
1576
+}
1577
+.col-xs-offset-2 {
1578
+ margin-left: 16.66666667%;
1579
+}
1580
+.col-xs-offset-1 {
1581
+ margin-left: 8.33333333%;
1582
+}
1583
+.col-xs-offset-0 {
1584
+ margin-left: 0;
1585
+}
1586
+@media (min-width: 768px) {
1587
+ .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 {
1588
+ float: left;
1589
+ }
1590
+ .col-sm-12 {
1591
+ width: 100%;
1592
+ }
1593
+ .col-sm-11 {
1594
+ width: 91.66666667%;
1595
+ }
1596
+ .col-sm-10 {
1597
+ width: 83.33333333%;
1598
+ }
1599
+ .col-sm-9 {
1600
+ width: 75%;
1601
+ }
1602
+ .col-sm-8 {
1603
+ width: 66.66666667%;
1604
+ }
1605
+ .col-sm-7 {
1606
+ width: 58.33333333%;
1607
+ }
1608
+ .col-sm-6 {
1609
+ width: 50%;
1610
+ }
1611
+ .col-sm-5 {
1612
+ width: 41.66666667%;
1613
+ }
1614
+ .col-sm-4 {
1615
+ width: 33.33333333%;
1616
+ }
1617
+ .col-sm-3 {
1618
+ width: 25%;
1619
+ }
1620
+ .col-sm-2 {
1621
+ width: 16.66666667%;
1622
+ }
1623
+ .col-sm-1 {
1624
+ width: 8.33333333%;
1625
+ }
1626
+ .col-sm-pull-12 {
1627
+ right: 100%;
1628
+ }
1629
+ .col-sm-pull-11 {
1630
+ right: 91.66666667%;
1631
+ }
1632
+ .col-sm-pull-10 {
1633
+ right: 83.33333333%;
1634
+ }
1635
+ .col-sm-pull-9 {
1636
+ right: 75%;
1637
+ }
1638
+ .col-sm-pull-8 {
1639
+ right: 66.66666667%;
1640
+ }
1641
+ .col-sm-pull-7 {
1642
+ right: 58.33333333%;
1643
+ }
1644
+ .col-sm-pull-6 {
1645
+ right: 50%;
1646
+ }
1647
+ .col-sm-pull-5 {
1648
+ right: 41.66666667%;
1649
+ }
1650
+ .col-sm-pull-4 {
1651
+ right: 33.33333333%;
1652
+ }
1653
+ .col-sm-pull-3 {
1654
+ right: 25%;
1655
+ }
1656
+ .col-sm-pull-2 {
1657
+ right: 16.66666667%;
1658
+ }
1659
+ .col-sm-pull-1 {
1660
+ right: 8.33333333%;
1661
+ }
1662
+ .col-sm-pull-0 {
1663
+ right: auto;
1664
+ }
1665
+ .col-sm-push-12 {
1666
+ left: 100%;
1667
+ }
1668
+ .col-sm-push-11 {
1669
+ left: 91.66666667%;
1670
+ }
1671
+ .col-sm-push-10 {
1672
+ left: 83.33333333%;
1673
+ }
1674
+ .col-sm-push-9 {
1675
+ left: 75%;
1676
+ }
1677
+ .col-sm-push-8 {
1678
+ left: 66.66666667%;
1679
+ }
1680
+ .col-sm-push-7 {
1681
+ left: 58.33333333%;
1682
+ }
1683
+ .col-sm-push-6 {
1684
+ left: 50%;
1685
+ }
1686
+ .col-sm-push-5 {
1687
+ left: 41.66666667%;
1688
+ }
1689
+ .col-sm-push-4 {
1690
+ left: 33.33333333%;
1691
+ }
1692
+ .col-sm-push-3 {
1693
+ left: 25%;
1694
+ }
1695
+ .col-sm-push-2 {
1696
+ left: 16.66666667%;
1697
+ }
1698
+ .col-sm-push-1 {
1699
+ left: 8.33333333%;
1700
+ }
1701
+ .col-sm-push-0 {
1702
+ left: auto;
1703
+ }
1704
+ .col-sm-offset-12 {
1705
+ margin-left: 100%;
1706
+ }
1707
+ .col-sm-offset-11 {
1708
+ margin-left: 91.66666667%;
1709
+ }
1710
+ .col-sm-offset-10 {
1711
+ margin-left: 83.33333333%;
1712
+ }
1713
+ .col-sm-offset-9 {
1714
+ margin-left: 75%;
1715
+ }
1716
+ .col-sm-offset-8 {
1717
+ margin-left: 66.66666667%;
1718
+ }
1719
+ .col-sm-offset-7 {
1720
+ margin-left: 58.33333333%;
1721
+ }
1722
+ .col-sm-offset-6 {
1723
+ margin-left: 50%;
1724
+ }
1725
+ .col-sm-offset-5 {
1726
+ margin-left: 41.66666667%;
1727
+ }
1728
+ .col-sm-offset-4 {
1729
+ margin-left: 33.33333333%;
1730
+ }
1731
+ .col-sm-offset-3 {
1732
+ margin-left: 25%;
1733
+ }
1734
+ .col-sm-offset-2 {
1735
+ margin-left: 16.66666667%;
1736
+ }
1737
+ .col-sm-offset-1 {
1738
+ margin-left: 8.33333333%;
1739
+ }
1740
+ .col-sm-offset-0 {
1741
+ margin-left: 0;
1742
+ }
1743
+}
1744
+@media (min-width: 992px) {
1745
+ .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 {
1746
+ float: left;
1747
+ }
1748
+ .col-md-12 {
1749
+ width: 100%;
1750
+ }
1751
+ .col-md-11 {
1752
+ width: 91.66666667%;
1753
+ }
1754
+ .col-md-10 {
1755
+ width: 83.33333333%;
1756
+ }
1757
+ .col-md-9 {
1758
+ width: 75%;
1759
+ }
1760
+ .col-md-8 {
1761
+ width: 66.66666667%;
1762
+ }
1763
+ .col-md-7 {
1764
+ width: 58.33333333%;
1765
+ }
1766
+ .col-md-6 {
1767
+ width: 50%;
1768
+ }
1769
+ .col-md-5 {
1770
+ width: 41.66666667%;
1771
+ }
1772
+ .col-md-4 {
1773
+ width: 33.33333333%;
1774
+ }
1775
+ .col-md-3 {
1776
+ width: 25%;
1777
+ }
1778
+ .col-md-2 {
1779
+ width: 16.66666667%;
1780
+ }
1781
+ .col-md-1 {
1782
+ width: 8.33333333%;
1783
+ }
1784
+ .col-md-pull-12 {
1785
+ right: 100%;
1786
+ }
1787
+ .col-md-pull-11 {
1788
+ right: 91.66666667%;
1789
+ }
1790
+ .col-md-pull-10 {
1791
+ right: 83.33333333%;
1792
+ }
1793
+ .col-md-pull-9 {
1794
+ right: 75%;
1795
+ }
1796
+ .col-md-pull-8 {
1797
+ right: 66.66666667%;
1798
+ }
1799
+ .col-md-pull-7 {
1800
+ right: 58.33333333%;
1801
+ }
1802
+ .col-md-pull-6 {
1803
+ right: 50%;
1804
+ }
1805
+ .col-md-pull-5 {
1806
+ right: 41.66666667%;
1807
+ }
1808
+ .col-md-pull-4 {
1809
+ right: 33.33333333%;
1810
+ }
1811
+ .col-md-pull-3 {
1812
+ right: 25%;
1813
+ }
1814
+ .col-md-pull-2 {
1815
+ right: 16.66666667%;
1816
+ }
1817
+ .col-md-pull-1 {
1818
+ right: 8.33333333%;
1819
+ }
1820
+ .col-md-pull-0 {
1821
+ right: auto;
1822
+ }
1823
+ .col-md-push-12 {
1824
+ left: 100%;
1825
+ }
1826
+ .col-md-push-11 {
1827
+ left: 91.66666667%;
1828
+ }
1829
+ .col-md-push-10 {
1830
+ left: 83.33333333%;
1831
+ }
1832
+ .col-md-push-9 {
1833
+ left: 75%;
1834
+ }
1835
+ .col-md-push-8 {
1836
+ left: 66.66666667%;
1837
+ }
1838
+ .col-md-push-7 {
1839
+ left: 58.33333333%;
1840
+ }
1841
+ .col-md-push-6 {
1842
+ left: 50%;
1843
+ }
1844
+ .col-md-push-5 {
1845
+ left: 41.66666667%;
1846
+ }
1847
+ .col-md-push-4 {
1848
+ left: 33.33333333%;
1849
+ }
1850
+ .col-md-push-3 {
1851
+ left: 25%;
1852
+ }
1853
+ .col-md-push-2 {
1854
+ left: 16.66666667%;
1855
+ }
1856
+ .col-md-push-1 {
1857
+ left: 8.33333333%;
1858
+ }
1859
+ .col-md-push-0 {
1860
+ left: auto;
1861
+ }
1862
+ .col-md-offset-12 {
1863
+ margin-left: 100%;
1864
+ }
1865
+ .col-md-offset-11 {
1866
+ margin-left: 91.66666667%;
1867
+ }
1868
+ .col-md-offset-10 {
1869
+ margin-left: 83.33333333%;
1870
+ }
1871
+ .col-md-offset-9 {
1872
+ margin-left: 75%;
1873
+ }
1874
+ .col-md-offset-8 {
1875
+ margin-left: 66.66666667%;
1876
+ }
1877
+ .col-md-offset-7 {
1878
+ margin-left: 58.33333333%;
1879
+ }
1880
+ .col-md-offset-6 {
1881
+ margin-left: 50%;
1882
+ }
1883
+ .col-md-offset-5 {
1884
+ margin-left: 41.66666667%;
1885
+ }
1886
+ .col-md-offset-4 {
1887
+ margin-left: 33.33333333%;
1888
+ }
1889
+ .col-md-offset-3 {
1890
+ margin-left: 25%;
1891
+ }
1892
+ .col-md-offset-2 {
1893
+ margin-left: 16.66666667%;
1894
+ }
1895
+ .col-md-offset-1 {
1896
+ margin-left: 8.33333333%;
1897
+ }
1898
+ .col-md-offset-0 {
1899
+ margin-left: 0;
1900
+ }
1901
+}
1902
+@media (min-width: 1200px) {
1903
+ .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 {
1904
+ float: left;
1905
+ }
1906
+ .col-lg-12 {
1907
+ width: 100%;
1908
+ }
1909
+ .col-lg-11 {
1910
+ width: 91.66666667%;
1911
+ }
1912
+ .col-lg-10 {
1913
+ width: 83.33333333%;
1914
+ }
1915
+ .col-lg-9 {
1916
+ width: 75%;
1917
+ }
1918
+ .col-lg-8 {
1919
+ width: 66.66666667%;
1920
+ }
1921
+ .col-lg-7 {
1922
+ width: 58.33333333%;
1923
+ }
1924
+ .col-lg-6 {
1925
+ width: 50%;
1926
+ }
1927
+ .col-lg-5 {
1928
+ width: 41.66666667%;
1929
+ }
1930
+ .col-lg-4 {
1931
+ width: 33.33333333%;
1932
+ }
1933
+ .col-lg-3 {
1934
+ width: 25%;
1935
+ }
1936
+ .col-lg-2 {
1937
+ width: 16.66666667%;
1938
+ }
1939
+ .col-lg-1 {
1940
+ width: 8.33333333%;
1941
+ }
1942
+ .col-lg-pull-12 {
1943
+ right: 100%;
1944
+ }
1945
+ .col-lg-pull-11 {
1946
+ right: 91.66666667%;
1947
+ }
1948
+ .col-lg-pull-10 {
1949
+ right: 83.33333333%;
1950
+ }
1951
+ .col-lg-pull-9 {
1952
+ right: 75%;
1953
+ }
1954
+ .col-lg-pull-8 {
1955
+ right: 66.66666667%;
1956
+ }
1957
+ .col-lg-pull-7 {
1958
+ right: 58.33333333%;
1959
+ }
1960
+ .col-lg-pull-6 {
1961
+ right: 50%;
1962
+ }
1963
+ .col-lg-pull-5 {
1964
+ right: 41.66666667%;
1965
+ }
1966
+ .col-lg-pull-4 {
1967
+ right: 33.33333333%;
1968
+ }
1969
+ .col-lg-pull-3 {
1970
+ right: 25%;
1971
+ }
1972
+ .col-lg-pull-2 {
1973
+ right: 16.66666667%;
1974
+ }
1975
+ .col-lg-pull-1 {
1976
+ right: 8.33333333%;
1977
+ }
1978
+ .col-lg-pull-0 {
1979
+ right: auto;
1980
+ }
1981
+ .col-lg-push-12 {
1982
+ left: 100%;
1983
+ }
1984
+ .col-lg-push-11 {
1985
+ left: 91.66666667%;
1986
+ }
1987
+ .col-lg-push-10 {
1988
+ left: 83.33333333%;
1989
+ }
1990
+ .col-lg-push-9 {
1991
+ left: 75%;
1992
+ }
1993
+ .col-lg-push-8 {
1994
+ left: 66.66666667%;
1995
+ }
1996
+ .col-lg-push-7 {
1997
+ left: 58.33333333%;
1998
+ }
1999
+ .col-lg-push-6 {
2000
+ left: 50%;
2001
+ }
2002
+ .col-lg-push-5 {
2003
+ left: 41.66666667%;
2004
+ }
2005
+ .col-lg-push-4 {
2006
+ left: 33.33333333%;
2007
+ }
2008
+ .col-lg-push-3 {
2009
+ left: 25%;
2010
+ }
2011
+ .col-lg-push-2 {
2012
+ left: 16.66666667%;
2013
+ }
2014
+ .col-lg-push-1 {
2015
+ left: 8.33333333%;
2016
+ }
2017
+ .col-lg-push-0 {
2018
+ left: auto;
2019
+ }
2020
+ .col-lg-offset-12 {
2021
+ margin-left: 100%;
2022
+ }
2023
+ .col-lg-offset-11 {
2024
+ margin-left: 91.66666667%;
2025
+ }
2026
+ .col-lg-offset-10 {
2027
+ margin-left: 83.33333333%;
2028
+ }
2029
+ .col-lg-offset-9 {
2030
+ margin-left: 75%;
2031
+ }
2032
+ .col-lg-offset-8 {
2033
+ margin-left: 66.66666667%;
2034
+ }
2035
+ .col-lg-offset-7 {
2036
+ margin-left: 58.33333333%;
2037
+ }
2038
+ .col-lg-offset-6 {
2039
+ margin-left: 50%;
2040
+ }
2041
+ .col-lg-offset-5 {
2042
+ margin-left: 41.66666667%;
2043
+ }
2044
+ .col-lg-offset-4 {
2045
+ margin-left: 33.33333333%;
2046
+ }
2047
+ .col-lg-offset-3 {
2048
+ margin-left: 25%;
2049
+ }
2050
+ .col-lg-offset-2 {
2051
+ margin-left: 16.66666667%;
2052
+ }
2053
+ .col-lg-offset-1 {
2054
+ margin-left: 8.33333333%;
2055
+ }
2056
+ .col-lg-offset-0 {
2057
+ margin-left: 0;
2058
+ }
2059
+}
2060
+table {
2061
+ background-color: transparent;
2062
+}
2063
+th {
2064
+ text-align: left;
2065
+}
2066
+.table {
2067
+ width: 100%;
2068
+ max-width: 100%;
2069
+ margin-bottom: 20px;
2070
+}
2071
+.table > thead > tr > th,
2072
+.table > tbody > tr > th,
2073
+.table > tfoot > tr > th,
2074
+.table > thead > tr > td,
2075
+.table > tbody > tr > td,
2076
+.table > tfoot > tr > td {
2077
+ padding: 8px;
2078
+ line-height: 1.42857143;
2079
+ vertical-align: top;
2080
+ border-top: 1px solid #ddd;
2081
+}
2082
+.table > thead > tr > th {
2083
+ vertical-align: bottom;
2084
+ border-bottom: 2px solid #ddd;
2085
+}
2086
+.table > caption + thead > tr:first-child > th,
2087
+.table > colgroup + thead > tr:first-child > th,
2088
+.table > thead:first-child > tr:first-child > th,
2089
+.table > caption + thead > tr:first-child > td,
2090
+.table > colgroup + thead > tr:first-child > td,
2091
+.table > thead:first-child > tr:first-child > td {
2092
+ border-top: 0;
2093
+}
2094
+.table > tbody + tbody {
2095
+ border-top: 2px solid #ddd;
2096
+}
2097
+.table .table {
2098
+ background-color: #fff;
2099
+}
2100
+.table-condensed > thead > tr > th,
2101
+.table-condensed > tbody > tr > th,
2102
+.table-condensed > tfoot > tr > th,
2103
+.table-condensed > thead > tr > td,
2104
+.table-condensed > tbody > tr > td,
2105
+.table-condensed > tfoot > tr > td {
2106
+ padding: 5px;
2107
+}
2108
+.table-bordered {
2109
+ border: 1px solid #ddd;
2110
+}
2111
+.table-bordered > thead > tr > th,
2112
+.table-bordered > tbody > tr > th,
2113
+.table-bordered > tfoot > tr > th,
2114
+.table-bordered > thead > tr > td,
2115
+.table-bordered > tbody > tr > td,
2116
+.table-bordered > tfoot > tr > td {
2117
+ border: 1px solid #ddd;
2118
+}
2119
+.table-bordered > thead > tr > th,
2120
+.table-bordered > thead > tr > td {
2121
+ border-bottom-width: 2px;
2122
+}
2123
+.table-striped > tbody > tr:nth-child(odd) > td,
2124
+.table-striped > tbody > tr:nth-child(odd) > th {
2125
+ background-color: #f9f9f9;
2126
+}
2127
+.table-hover > tbody > tr:hover > td,
2128
+.table-hover > tbody > tr:hover > th {
2129
+ background-color: #f5f5f5;
2130
+}
2131
+table col[class*="col-"] {
2132
+ position: static;
2133
+ display: table-column;
2134
+ float: none;
2135
+}
2136
+table td[class*="col-"],
2137
+table th[class*="col-"] {
2138
+ position: static;
2139
+ display: table-cell;
2140
+ float: none;
2141
+}
2142
+.table > thead > tr > td.active,
2143
+.table > tbody > tr > td.active,
2144
+.table > tfoot > tr > td.active,
2145
+.table > thead > tr > th.active,
2146
+.table > tbody > tr > th.active,
2147
+.table > tfoot > tr > th.active,
2148
+.table > thead > tr.active > td,
2149
+.table > tbody > tr.active > td,
2150
+.table > tfoot > tr.active > td,
2151
+.table > thead > tr.active > th,
2152
+.table > tbody > tr.active > th,
2153
+.table > tfoot > tr.active > th {
2154
+ background-color: #f5f5f5;
2155
+}
2156
+.table-hover > tbody > tr > td.active:hover,
2157
+.table-hover > tbody > tr > th.active:hover,
2158
+.table-hover > tbody > tr.active:hover > td,
2159
+.table-hover > tbody > tr:hover > .active,
2160
+.table-hover > tbody > tr.active:hover > th {
2161
+ background-color: #e8e8e8;
2162
+}
2163
+.table > thead > tr > td.success,
2164
+.table > tbody > tr > td.success,
2165
+.table > tfoot > tr > td.success,
2166
+.table > thead > tr > th.success,
2167
+.table > tbody > tr > th.success,
2168
+.table > tfoot > tr > th.success,
2169
+.table > thead > tr.success > td,
2170
+.table > tbody > tr.success > td,
2171
+.table > tfoot > tr.success > td,
2172
+.table > thead > tr.success > th,
2173
+.table > tbody > tr.success > th,
2174
+.table > tfoot > tr.success > th {
2175
+ background-color: #dff0d8;
2176
+}
2177
+.table-hover > tbody > tr > td.success:hover,
2178
+.table-hover > tbody > tr > th.success:hover,
2179
+.table-hover > tbody > tr.success:hover > td,
2180
+.table-hover > tbody > tr:hover > .success,
2181
+.table-hover > tbody > tr.success:hover > th {
2182
+ background-color: #d0e9c6;
2183
+}
2184
+.table > thead > tr > td.info,
2185
+.table > tbody > tr > td.info,
2186
+.table > tfoot > tr > td.info,
2187
+.table > thead > tr > th.info,
2188
+.table > tbody > tr > th.info,
2189
+.table > tfoot > tr > th.info,
2190
+.table > thead > tr.info > td,
2191
+.table > tbody > tr.info > td,
2192
+.table > tfoot > tr.info > td,
2193
+.table > thead > tr.info > th,
2194
+.table > tbody > tr.info > th,
2195
+.table > tfoot > tr.info > th {
2196
+ background-color: #d9edf7;
2197
+}
2198
+.table-hover > tbody > tr > td.info:hover,
2199
+.table-hover > tbody > tr > th.info:hover,
2200
+.table-hover > tbody > tr.info:hover > td,
2201
+.table-hover > tbody > tr:hover > .info,
2202
+.table-hover > tbody > tr.info:hover > th {
2203
+ background-color: #c4e3f3;
2204
+}
2205
+.table > thead > tr > td.warning,
2206
+.table > tbody > tr > td.warning,
2207
+.table > tfoot > tr > td.warning,
2208
+.table > thead > tr > th.warning,
2209
+.table > tbody > tr > th.warning,
2210
+.table > tfoot > tr > th.warning,
2211
+.table > thead > tr.warning > td,
2212
+.table > tbody > tr.warning > td,
2213
+.table > tfoot > tr.warning > td,
2214
+.table > thead > tr.warning > th,
2215
+.table > tbody > tr.warning > th,
2216
+.table > tfoot > tr.warning > th {
2217
+ background-color: #fcf8e3;
2218
+}
2219
+.table-hover > tbody > tr > td.warning:hover,
2220
+.table-hover > tbody > tr > th.warning:hover,
2221
+.table-hover > tbody > tr.warning:hover > td,
2222
+.table-hover > tbody > tr:hover > .warning,
2223
+.table-hover > tbody > tr.warning:hover > th {
2224
+ background-color: #faf2cc;
2225
+}
2226
+.table > thead > tr > td.danger,
2227
+.table > tbody > tr > td.danger,
2228
+.table > tfoot > tr > td.danger,
2229
+.table > thead > tr > th.danger,
2230
+.table > tbody > tr > th.danger,
2231
+.table > tfoot > tr > th.danger,
2232
+.table > thead > tr.danger > td,
2233
+.table > tbody > tr.danger > td,
2234
+.table > tfoot > tr.danger > td,
2235
+.table > thead > tr.danger > th,
2236
+.table > tbody > tr.danger > th,
2237
+.table > tfoot > tr.danger > th {
2238
+ background-color: #f2dede;
2239
+}
2240
+.table-hover > tbody > tr > td.danger:hover,
2241
+.table-hover > tbody > tr > th.danger:hover,
2242
+.table-hover > tbody > tr.danger:hover > td,
2243
+.table-hover > tbody > tr:hover > .danger,
2244
+.table-hover > tbody > tr.danger:hover > th {
2245
+ background-color: #ebcccc;
2246
+}
2247
+@media screen and (max-width: 767px) {
2248
+ .table-responsive {
2249
+ width: 100%;
2250
+ margin-bottom: 15px;
2251
+ overflow-x: auto;
2252
+ overflow-y: hidden;
2253
+ -webkit-overflow-scrolling: touch;
2254
+ -ms-overflow-style: -ms-autohiding-scrollbar;
2255
+ border: 1px solid #ddd;
2256
+ }
2257
+ .table-responsive > .table {
2258
+ margin-bottom: 0;
2259
+ }
2260
+ .table-responsive > .table > thead > tr > th,
2261
+ .table-responsive > .table > tbody > tr > th,
2262
+ .table-responsive > .table > tfoot > tr > th,
2263
+ .table-responsive > .table > thead > tr > td,
2264
+ .table-responsive > .table > tbody > tr > td,
2265
+ .table-responsive > .table > tfoot > tr > td {
2266
+ white-space: nowrap;
2267
+ }
2268
+ .table-responsive > .table-bordered {
2269
+ border: 0;
2270
+ }
2271
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
2272
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
2273
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2274
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
2275
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
2276
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2277
+ border-left: 0;
2278
+ }
2279
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
2280
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
2281
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2282
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
2283
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
2284
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2285
+ border-right: 0;
2286
+ }
2287
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
2288
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2289
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
2290
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2291
+ border-bottom: 0;
2292
+ }
2293
+}
2294
+fieldset {
2295
+ min-width: 0;
2296
+ padding: 0;
2297
+ margin: 0;
2298
+ border: 0;
2299
+}
2300
+legend {
2301
+ display: block;
2302
+ width: 100%;
2303
+ padding: 0;
2304
+ margin-bottom: 20px;
2305
+ font-size: 21px;
2306
+ line-height: inherit;
2307
+ color: #333;
2308
+ border: 0;
2309
+ border-bottom: 1px solid #e5e5e5;
2310
+}
2311
+label {
2312
+ display: inline-block;
2313
+ max-width: 100%;
2314
+ margin-bottom: 5px;
2315
+ font-weight: bold;
2316
+}
2317
+input[type="search"] {
2318
+ -webkit-box-sizing: border-box;
2319
+ -moz-box-sizing: border-box;
2320
+ box-sizing: border-box;
2321
+}
2322
+input[type="radio"],
2323
+input[type="checkbox"] {
2324
+ margin: 4px 0 0;
2325
+ margin-top: 1px \9;
2326
+ line-height: normal;
2327
+}
2328
+input[type="file"] {
2329
+ display: block;
2330
+}
2331
+input[type="range"] {
2332
+ display: block;
2333
+ width: 100%;
2334
+}
2335
+select[multiple],
2336
+select[size] {
2337
+ height: auto;
2338
+}
2339
+input[type="file"]:focus,
2340
+input[type="radio"]:focus,
2341
+input[type="checkbox"]:focus {
2342
+ outline: thin dotted;
2343
+ outline: 5px auto -webkit-focus-ring-color;
2344
+ outline-offset: -2px;
2345
+}
2346
+output {
2347
+ display: block;
2348
+ padding-top: 7px;
2349
+ font-size: 14px;
2350
+ line-height: 1.42857143;
2351
+ color: #555;
2352
+}
2353
+.form-control {
2354
+ display: block;
2355
+ width: 100%;
2356
+ height: 34px;
2357
+ padding: 6px 12px;
2358
+ font-size: 14px;
2359
+ line-height: 1.42857143;
2360
+ color: #555;
2361
+ background-color: #fff;
2362
+ background-image: none;
2363
+ border: 1px solid #ccc;
2364
+ border-radius: 4px;
2365
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2366
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2367
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2368
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2369
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2370
+}
2371
+.form-control:focus {
2372
+ border-color: #66afe9;
2373
+ outline: 0;
2374
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2375
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2376
+}
2377
+.form-control::-moz-placeholder {
2378
+ color: #777;
2379
+ opacity: 1;
2380
+}
2381
+.form-control:-ms-input-placeholder {
2382
+ color: #777;
2383
+}
2384
+.form-control::-webkit-input-placeholder {
2385
+ color: #777;
2386
+}
2387
+.form-control[disabled],
2388
+.form-control[readonly],
2389
+fieldset[disabled] .form-control {
2390
+ cursor: not-allowed;
2391
+ background-color: #eee;
2392
+ opacity: 1;
2393
+}
2394
+textarea.form-control {
2395
+ height: auto;
2396
+}
2397
+input[type="search"] {
2398
+ -webkit-appearance: none;
2399
+}
2400
+input[type="date"],
2401
+input[type="time"],
2402
+input[type="datetime-local"],
2403
+input[type="month"] {
2404
+ line-height: 34px;
2405
+ line-height: 1.42857143 \0;
2406
+}
2407
+input[type="date"].input-sm,
2408
+input[type="time"].input-sm,
2409
+input[type="datetime-local"].input-sm,
2410
+input[type="month"].input-sm {
2411
+ line-height: 30px;
2412
+}
2413
+input[type="date"].input-lg,
2414
+input[type="time"].input-lg,
2415
+input[type="datetime-local"].input-lg,
2416
+input[type="month"].input-lg {
2417
+ line-height: 46px;
2418
+}
2419
+.form-group {
2420
+ margin-bottom: 15px;
2421
+}
2422
+.radio,
2423
+.checkbox {
2424
+ position: relative;
2425
+ display: block;
2426
+ min-height: 20px;
2427
+ margin-top: 10px;
2428
+ margin-bottom: 10px;
2429
+}
2430
+.radio label,
2431
+.checkbox label {
2432
+ padding-left: 20px;
2433
+ margin-bottom: 0;
2434
+ font-weight: normal;
2435
+ cursor: pointer;
2436
+}
2437
+.radio input[type="radio"],
2438
+.radio-inline input[type="radio"],
2439
+.checkbox input[type="checkbox"],
2440
+.checkbox-inline input[type="checkbox"] {
2441
+ position: absolute;
2442
+ margin-top: 4px \9;
2443
+ margin-left: -20px;
2444
+}
2445
+.radio + .radio,
2446
+.checkbox + .checkbox {
2447
+ margin-top: -5px;
2448
+}
2449
+.radio-inline,
2450
+.checkbox-inline {
2451
+ display: inline-block;
2452
+ padding-left: 20px;
2453
+ margin-bottom: 0;
2454
+ font-weight: normal;
2455
+ vertical-align: middle;
2456
+ cursor: pointer;
2457
+}
2458
+.radio-inline + .radio-inline,
2459
+.checkbox-inline + .checkbox-inline {
2460
+ margin-top: 0;
2461
+ margin-left: 10px;
2462
+}
2463
+input[type="radio"][disabled],
2464
+input[type="checkbox"][disabled],
2465
+input[type="radio"].disabled,
2466
+input[type="checkbox"].disabled,
2467
+fieldset[disabled] input[type="radio"],
2468
+fieldset[disabled] input[type="checkbox"] {
2469
+ cursor: not-allowed;
2470
+}
2471
+.radio-inline.disabled,
2472
+.checkbox-inline.disabled,
2473
+fieldset[disabled] .radio-inline,
2474
+fieldset[disabled] .checkbox-inline {
2475
+ cursor: not-allowed;
2476
+}
2477
+.radio.disabled label,
2478
+.checkbox.disabled label,
2479
+fieldset[disabled] .radio label,
2480
+fieldset[disabled] .checkbox label {
2481
+ cursor: not-allowed;
2482
+}
2483
+.form-control-static {
2484
+ padding-top: 7px;
2485
+ padding-bottom: 7px;
2486
+ margin-bottom: 0;
2487
+}
2488
+.form-control-static.input-lg,
2489
+.form-control-static.input-sm {
2490
+ padding-right: 0;
2491
+ padding-left: 0;
2492
+}
2493
+.input-sm,
2494
+.form-horizontal .form-group-sm .form-control {
2495
+ height: 30px;
2496
+ padding: 5px 10px;
2497
+ font-size: 12px;
2498
+ line-height: 1.5;
2499
+ border-radius: 3px;
2500
+}
2501
+select.input-sm {
2502
+ height: 30px;
2503
+ line-height: 30px;
2504
+}
2505
+textarea.input-sm,
2506
+select[multiple].input-sm {
2507
+ height: auto;
2508
+}
2509
+.input-lg,
2510
+.form-horizontal .form-group-lg .form-control {
2511
+ height: 46px;
2512
+ padding: 10px 16px;
2513
+ font-size: 18px;
2514
+ line-height: 1.33;
2515
+ border-radius: 6px;
2516
+}
2517
+select.input-lg {
2518
+ height: 46px;
2519
+ line-height: 46px;
2520
+}
2521
+textarea.input-lg,
2522
+select[multiple].input-lg {
2523
+ height: auto;
2524
+}
2525
+.has-feedback {
2526
+ position: relative;
2527
+}
2528
+.has-feedback .form-control {
2529
+ padding-right: 42.5px;
2530
+}
2531
+.form-control-feedback {
2532
+ position: absolute;
2533
+ top: 25px;
2534
+ right: 0;
2535
+ z-index: 2;
2536
+ display: block;
2537
+ width: 34px;
2538
+ height: 34px;
2539
+ line-height: 34px;
2540
+ text-align: center;
2541
+}
2542
+.input-lg + .form-control-feedback {
2543
+ width: 46px;
2544
+ height: 46px;
2545
+ line-height: 46px;
2546
+}
2547
+.input-sm + .form-control-feedback {
2548
+ width: 30px;
2549
+ height: 30px;
2550
+ line-height: 30px;
2551
+}
2552
+.has-success .help-block,
2553
+.has-success .control-label,
2554
+.has-success .radio,
2555
+.has-success .checkbox,
2556
+.has-success .radio-inline,
2557
+.has-success .checkbox-inline {
2558
+ color: #3c763d;
2559
+}
2560
+.has-success .form-control {
2561
+ border-color: #3c763d;
2562
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2563
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2564
+}
2565
+.has-success .form-control:focus {
2566
+ border-color: #2b542c;
2567
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2568
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2569
+}
2570
+.has-success .input-group-addon {
2571
+ color: #3c763d;
2572
+ background-color: #dff0d8;
2573
+ border-color: #3c763d;
2574
+}
2575
+.has-success .form-control-feedback {
2576
+ color: #3c763d;
2577
+}
2578
+.has-warning .help-block,
2579
+.has-warning .control-label,
2580
+.has-warning .radio,
2581
+.has-warning .checkbox,
2582
+.has-warning .radio-inline,
2583
+.has-warning .checkbox-inline {
2584
+ color: #8a6d3b;
2585
+}
2586
+.has-warning .form-control {
2587
+ border-color: #8a6d3b;
2588
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2589
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2590
+}
2591
+.has-warning .form-control:focus {
2592
+ border-color: #66512c;
2593
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2594
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2595
+}
2596
+.has-warning .input-group-addon {
2597
+ color: #8a6d3b;
2598
+ background-color: #fcf8e3;
2599
+ border-color: #8a6d3b;
2600
+}
2601
+.has-warning .form-control-feedback {
2602
+ color: #8a6d3b;
2603
+}
2604
+.has-error .help-block,
2605
+.has-error .control-label,
2606
+.has-error .radio,
2607
+.has-error .checkbox,
2608
+.has-error .radio-inline,
2609
+.has-error .checkbox-inline {
2610
+ color: #a94442;
2611
+}
2612
+.has-error .form-control {
2613
+ border-color: #a94442;
2614
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2615
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2616
+}
2617
+.has-error .form-control:focus {
2618
+ border-color: #843534;
2619
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2620
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2621
+}
2622
+.has-error .input-group-addon {
2623
+ color: #a94442;
2624
+ background-color: #f2dede;
2625
+ border-color: #a94442;
2626
+}
2627
+.has-error .form-control-feedback {
2628
+ color: #a94442;
2629
+}
2630
+.has-feedback label.sr-only ~ .form-control-feedback {
2631
+ top: 0;
2632
+}
2633
+.help-block {
2634
+ display: block;
2635
+ margin-top: 5px;
2636
+ margin-bottom: 10px;
2637
+ color: #737373;
2638
+}
2639
+@media (min-width: 768px) {
2640
+ .form-inline .form-group {
2641
+ display: inline-block;
2642
+ margin-bottom: 0;
2643
+ vertical-align: middle;
2644
+ }
2645
+ .form-inline .form-control {
2646
+ display: inline-block;
2647
+ width: auto;
2648
+ vertical-align: middle;
2649
+ }
2650
+ .form-inline .input-group {
2651
+ display: inline-table;
2652
+ vertical-align: middle;
2653
+ }
2654
+ .form-inline .input-group .input-group-addon,
2655
+ .form-inline .input-group .input-group-btn,
2656
+ .form-inline .input-group .form-control {
2657
+ width: auto;
2658
+ }
2659
+ .form-inline .input-group > .form-control {
2660
+ width: 100%;
2661
+ }
2662
+ .form-inline .control-label {
2663
+ margin-bottom: 0;
2664
+ vertical-align: middle;
2665
+ }
2666
+ .form-inline .radio,
2667
+ .form-inline .checkbox {
2668
+ display: inline-block;
2669
+ margin-top: 0;
2670
+ margin-bottom: 0;
2671
+ vertical-align: middle;
2672
+ }
2673
+ .form-inline .radio label,
2674
+ .form-inline .checkbox label {
2675
+ padding-left: 0;
2676
+ }
2677
+ .form-inline .radio input[type="radio"],
2678
+ .form-inline .checkbox input[type="checkbox"] {
2679
+ position: relative;
2680
+ margin-left: 0;
2681
+ }
2682
+ .form-inline .has-feedback .form-control-feedback {
2683
+ top: 0;
2684
+ }
2685
+}
2686
+.form-horizontal .radio,
2687
+.form-horizontal .checkbox,
2688
+.form-horizontal .radio-inline,
2689
+.form-horizontal .checkbox-inline {
2690
+ padding-top: 7px;
2691
+ margin-top: 0;
2692
+ margin-bottom: 0;
2693
+}
2694
+.form-horizontal .radio,
2695
+.form-horizontal .checkbox {
2696
+ min-height: 27px;
2697
+}
2698
+.form-horizontal .form-group {
2699
+ margin-right: -15px;
2700
+ margin-left: -15px;
2701
+}
2702
+@media (min-width: 768px) {
2703
+ .form-horizontal .control-label {
2704
+ padding-top: 7px;
2705
+ margin-bottom: 0;
2706
+ text-align: right;
2707
+ }
2708
+}
2709
+.form-horizontal .has-feedback .form-control-feedback {
2710
+ top: 0;
2711
+ right: 15px;
2712
+}
2713
+@media (min-width: 768px) {
2714
+ .form-horizontal .form-group-lg .control-label {
2715
+ padding-top: 14.3px;
2716
+ }
2717
+}
2718
+@media (min-width: 768px) {
2719
+ .form-horizontal .form-group-sm .control-label {
2720
+ padding-top: 6px;
2721
+ }
2722
+}
2723
+.btn {
2724
+ display: inline-block;
2725
+ padding: 6px 12px;
2726
+ margin-bottom: 0;
2727
+ font-size: 14px;
2728
+ font-weight: normal;
2729
+ line-height: 1.42857143;
2730
+ text-align: center;
2731
+ white-space: nowrap;
2732
+ vertical-align: middle;
2733
+ cursor: pointer;
2734
+ -webkit-user-select: none;
2735
+ -moz-user-select: none;
2736
+ -ms-user-select: none;
2737
+ user-select: none;
2738
+ background-image: none;
2739
+ border: 1px solid transparent;
2740
+ border-radius: 4px;
2741
+}
2742
+.btn:focus,
2743
+.btn:active:focus,
2744
+.btn.active:focus {
2745
+ outline: thin dotted;
2746
+ outline: 5px auto -webkit-focus-ring-color;
2747
+ outline-offset: -2px;
2748
+}
2749
+.btn:hover,
2750
+.btn:focus {
2751
+ color: #333;
2752
+ text-decoration: none;
2753
+}
2754
+.btn:active,
2755
+.btn.active {
2756
+ background-image: none;
2757
+ outline: 0;
2758
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2759
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
2760
+}
2761
+.btn.disabled,
2762
+.btn[disabled],
2763
+fieldset[disabled] .btn {
2764
+ pointer-events: none;
2765
+ cursor: not-allowed;
2766
+ filter: alpha(opacity=65);
2767
+ -webkit-box-shadow: none;
2768
+ box-shadow: none;
2769
+ opacity: .65;
2770
+}
2771
+.btn-default {
2772
+ color: #333;
2773
+ background-color: #fff;
2774
+ border-color: #ccc;
2775
+}
2776
+.btn-default:hover,
2777
+.btn-default:focus,
2778
+.btn-default:active,
2779
+.btn-default.active,
2780
+.open > .dropdown-toggle.btn-default {
2781
+ color: #333;
2782
+ background-color: #e6e6e6;
2783
+ border-color: #adadad;
2784
+}
2785
+.btn-default:active,
2786
+.btn-default.active,
2787
+.open > .dropdown-toggle.btn-default {
2788
+ background-image: none;
2789
+}
2790
+.btn-default.disabled,
2791
+.btn-default[disabled],
2792
+fieldset[disabled] .btn-default,
2793
+.btn-default.disabled:hover,
2794
+.btn-default[disabled]:hover,
2795
+fieldset[disabled] .btn-default:hover,
2796
+.btn-default.disabled:focus,
2797
+.btn-default[disabled]:focus,
2798
+fieldset[disabled] .btn-default:focus,
2799
+.btn-default.disabled:active,
2800
+.btn-default[disabled]:active,
2801
+fieldset[disabled] .btn-default:active,
2802
+.btn-default.disabled.active,
2803
+.btn-default[disabled].active,
2804
+fieldset[disabled] .btn-default.active {
2805
+ background-color: #fff;
2806
+ border-color: #ccc;
2807
+}
2808
+.btn-default .badge {
2809
+ color: #fff;
2810
+ background-color: #333;
2811
+}
2812
+.btn-primary {
2813
+ color: #fff;
2814
+ background-color: #428bca;
2815
+ border-color: #357ebd;
2816
+}
2817
+.btn-primary:hover,
2818
+.btn-primary:focus,
2819
+.btn-primary:active,
2820
+.btn-primary.active,
2821
+.open > .dropdown-toggle.btn-primary {
2822
+ color: #fff;
2823
+ background-color: #3071a9;
2824
+ border-color: #285e8e;
2825
+}
2826
+.btn-primary:active,
2827
+.btn-primary.active,
2828
+.open > .dropdown-toggle.btn-primary {
2829
+ background-image: none;
2830
+}
2831
+.btn-primary.disabled,
2832
+.btn-primary[disabled],
2833
+fieldset[disabled] .btn-primary,
2834
+.btn-primary.disabled:hover,
2835
+.btn-primary[disabled]:hover,
2836
+fieldset[disabled] .btn-primary:hover,
2837
+.btn-primary.disabled:focus,
2838
+.btn-primary[disabled]:focus,
2839
+fieldset[disabled] .btn-primary:focus,
2840
+.btn-primary.disabled:active,
2841
+.btn-primary[disabled]:active,
2842
+fieldset[disabled] .btn-primary:active,
2843
+.btn-primary.disabled.active,
2844
+.btn-primary[disabled].active,
2845
+fieldset[disabled] .btn-primary.active {
2846
+ background-color: #428bca;
2847
+ border-color: #357ebd;
2848
+}
2849
+.btn-primary .badge {
2850
+ color: #428bca;
2851
+ background-color: #fff;
2852
+}
2853
+.btn-success {
2854
+ color: #fff;
2855
+ background-color: #5cb85c;
2856
+ border-color: #4cae4c;
2857
+}
2858
+.btn-success:hover,
2859
+.btn-success:focus,
2860
+.btn-success:active,
2861
+.btn-success.active,
2862
+.open > .dropdown-toggle.btn-success {
2863
+ color: #fff;
2864
+ background-color: #449d44;
2865
+ border-color: #398439;
2866
+}
2867
+.btn-success:active,
2868
+.btn-success.active,
2869
+.open > .dropdown-toggle.btn-success {
2870
+ background-image: none;
2871
+}
2872
+.btn-success.disabled,
2873
+.btn-success[disabled],
2874
+fieldset[disabled] .btn-success,
2875
+.btn-success.disabled:hover,
2876
+.btn-success[disabled]:hover,
2877
+fieldset[disabled] .btn-success:hover,
2878
+.btn-success.disabled:focus,
2879
+.btn-success[disabled]:focus,
2880
+fieldset[disabled] .btn-success:focus,
2881
+.btn-success.disabled:active,
2882
+.btn-success[disabled]:active,
2883
+fieldset[disabled] .btn-success:active,
2884
+.btn-success.disabled.active,
2885
+.btn-success[disabled].active,
2886
+fieldset[disabled] .btn-success.active {
2887
+ background-color: #5cb85c;
2888
+ border-color: #4cae4c;
2889
+}
2890
+.btn-success .badge {
2891
+ color: #5cb85c;
2892
+ background-color: #fff;
2893
+}
2894
+.btn-info {
2895
+ color: #fff;
2896
+ background-color: #5bc0de;
2897
+ border-color: #46b8da;
2898
+}
2899
+.btn-info:hover,
2900
+.btn-info:focus,
2901
+.btn-info:active,
2902
+.btn-info.active,
2903
+.open > .dropdown-toggle.btn-info {
2904
+ color: #fff;
2905
+ background-color: #31b0d5;
2906
+ border-color: #269abc;
2907
+}
2908
+.btn-info:active,
2909
+.btn-info.active,
2910
+.open > .dropdown-toggle.btn-info {
2911
+ background-image: none;
2912
+}
2913
+.btn-info.disabled,
2914
+.btn-info[disabled],
2915
+fieldset[disabled] .btn-info,
2916
+.btn-info.disabled:hover,
2917
+.btn-info[disabled]:hover,
2918
+fieldset[disabled] .btn-info:hover,
2919
+.btn-info.disabled:focus,
2920
+.btn-info[disabled]:focus,
2921
+fieldset[disabled] .btn-info:focus,
2922
+.btn-info.disabled:active,
2923
+.btn-info[disabled]:active,
2924
+fieldset[disabled] .btn-info:active,
2925
+.btn-info.disabled.active,
2926
+.btn-info[disabled].active,
2927
+fieldset[disabled] .btn-info.active {
2928
+ background-color: #5bc0de;
2929
+ border-color: #46b8da;
2930
+}
2931
+.btn-info .badge {
2932
+ color: #5bc0de;
2933
+ background-color: #fff;
2934
+}
2935
+.btn-warning {
2936
+ color: #fff;
2937
+ background-color: #f0ad4e;
2938
+ border-color: #eea236;
2939
+}
2940
+.btn-warning:hover,
2941
+.btn-warning:focus,
2942
+.btn-warning:active,
2943
+.btn-warning.active,
2944
+.open > .dropdown-toggle.btn-warning {
2945
+ color: #fff;
2946
+ background-color: #ec971f;
2947
+ border-color: #d58512;
2948
+}
2949
+.btn-warning:active,
2950
+.btn-warning.active,
2951
+.open > .dropdown-toggle.btn-warning {
2952
+ background-image: none;
2953
+}
2954
+.btn-warning.disabled,
2955
+.btn-warning[disabled],
2956
+fieldset[disabled] .btn-warning,
2957
+.btn-warning.disabled:hover,
2958
+.btn-warning[disabled]:hover,
2959
+fieldset[disabled] .btn-warning:hover,
2960
+.btn-warning.disabled:focus,
2961
+.btn-warning[disabled]:focus,
2962
+fieldset[disabled] .btn-warning:focus,
2963
+.btn-warning.disabled:active,
2964
+.btn-warning[disabled]:active,
2965
+fieldset[disabled] .btn-warning:active,
2966
+.btn-warning.disabled.active,
2967
+.btn-warning[disabled].active,
2968
+fieldset[disabled] .btn-warning.active {
2969
+ background-color: #f0ad4e;
2970
+ border-color: #eea236;
2971
+}
2972
+.btn-warning .badge {
2973
+ color: #f0ad4e;
2974
+ background-color: #fff;
2975
+}
2976
+.btn-danger {
2977
+ color: #fff;
2978
+ background-color: #d9534f;
2979
+ border-color: #d43f3a;
2980
+}
2981
+.btn-danger:hover,
2982
+.btn-danger:focus,
2983
+.btn-danger:active,
2984
+.btn-danger.active,
2985
+.open > .dropdown-toggle.btn-danger {
2986
+ color: #fff;
2987
+ background-color: #c9302c;
2988
+ border-color: #ac2925;
2989
+}
2990
+.btn-danger:active,
2991
+.btn-danger.active,
2992
+.open > .dropdown-toggle.btn-danger {
2993
+ background-image: none;
2994
+}
2995
+.btn-danger.disabled,
2996
+.btn-danger[disabled],
2997
+fieldset[disabled] .btn-danger,
2998
+.btn-danger.disabled:hover,
2999
+.btn-danger[disabled]:hover,
3000
+fieldset[disabled] .btn-danger:hover,
3001
+.btn-danger.disabled:focus,
3002
+.btn-danger[disabled]:focus,
3003
+fieldset[disabled] .btn-danger:focus,
3004
+.btn-danger.disabled:active,
3005
+.btn-danger[disabled]:active,
3006
+fieldset[disabled] .btn-danger:active,
3007
+.btn-danger.disabled.active,
3008
+.btn-danger[disabled].active,
3009
+fieldset[disabled] .btn-danger.active {
3010
+ background-color: #d9534f;
3011
+ border-color: #d43f3a;
3012
+}
3013
+.btn-danger .badge {
3014
+ color: #d9534f;
3015
+ background-color: #fff;
3016
+}
3017
+.btn-link {
3018
+ font-weight: normal;
3019
+ color: #428bca;
3020
+ cursor: pointer;
3021
+ border-radius: 0;
3022
+}
3023
+.btn-link,
3024
+.btn-link:active,
3025
+.btn-link[disabled],
3026
+fieldset[disabled] .btn-link {
3027
+ background-color: transparent;
3028
+ -webkit-box-shadow: none;
3029
+ box-shadow: none;
3030
+}
3031
+.btn-link,
3032
+.btn-link:hover,
3033
+.btn-link:focus,
3034
+.btn-link:active {
3035
+ border-color: transparent;
3036
+}
3037
+.btn-link:hover,
3038
+.btn-link:focus {
3039
+ color: #2a6496;
3040
+ text-decoration: underline;
3041
+ background-color: transparent;
3042
+}
3043
+.btn-link[disabled]:hover,
3044
+fieldset[disabled] .btn-link:hover,
3045
+.btn-link[disabled]:focus,
3046
+fieldset[disabled] .btn-link:focus {
3047
+ color: #777;
3048
+ text-decoration: none;
3049
+}
3050
+.btn-lg,
3051
+.btn-group-lg > .btn {
3052
+ padding: 10px 16px;
3053
+ font-size: 18px;
3054
+ line-height: 1.33;
3055
+ border-radius: 6px;
3056
+}
3057
+.btn-sm,
3058
+.btn-group-sm > .btn {
3059
+ padding: 5px 10px;
3060
+ font-size: 12px;
3061
+ line-height: 1.5;
3062
+ border-radius: 3px;
3063
+}
3064
+.btn-xs,
3065
+.btn-group-xs > .btn {
3066
+ padding: 1px 5px;
3067
+ font-size: 12px;
3068
+ line-height: 1.5;
3069
+ border-radius: 3px;
3070
+}
3071
+.btn-block {
3072
+ display: block;
3073
+ width: 100%;
3074
+}
3075
+.btn-block + .btn-block {
3076
+ margin-top: 5px;
3077
+}
3078
+input[type="submit"].btn-block,
3079
+input[type="reset"].btn-block,
3080
+input[type="button"].btn-block {
3081
+ width: 100%;
3082
+}
3083
+.fade {
3084
+ opacity: 0;
3085
+ -webkit-transition: opacity .15s linear;
3086
+ -o-transition: opacity .15s linear;
3087
+ transition: opacity .15s linear;
3088
+}
3089
+.fade.in {
3090
+ opacity: 1;
3091
+}
3092
+.collapse {
3093
+ display: none;
3094
+}
3095
+.collapse.in {
3096
+ display: block;
3097
+}
3098
+tr.collapse.in {
3099
+ display: table-row;
3100
+}
3101
+tbody.collapse.in {
3102
+ display: table-row-group;
3103
+}
3104
+.collapsing {
3105
+ position: relative;
3106
+ height: 0;
3107
+ overflow: hidden;
3108
+ -webkit-transition: height .35s ease;
3109
+ -o-transition: height .35s ease;
3110
+ transition: height .35s ease;
3111
+}
29853112 .caret {
29863113 display: inline-block;
29873114 width: 0;
....@@ -3009,9 +3136,11 @@
30093136 padding: 5px 0;
30103137 margin: 2px 0 0;
30113138 font-size: 14px;
3139
+ text-align: left;
30123140 list-style: none;
30133141 background-color: #fff;
3014
- background-clip: padding-box;
3142
+ -webkit-background-clip: padding-box;
3143
+ background-clip: padding-box;
30153144 border: 1px solid #ccc;
30163145 border: 1px solid rgba(0, 0, 0, .15);
30173146 border-radius: 4px;
....@@ -3033,7 +3162,7 @@
30333162 padding: 3px 20px;
30343163 clear: both;
30353164 font-weight: normal;
3036
- line-height: 1.428571429;
3165
+ line-height: 1.42857143;
30373166 color: #333;
30383167 white-space: nowrap;
30393168 }
....@@ -3054,7 +3183,7 @@
30543183 .dropdown-menu > .disabled > a,
30553184 .dropdown-menu > .disabled > a:hover,
30563185 .dropdown-menu > .disabled > a:focus {
3057
- color: #999;
3186
+ color: #777;
30583187 }
30593188 .dropdown-menu > .disabled > a:hover,
30603189 .dropdown-menu > .disabled > a:focus {
....@@ -3082,8 +3211,9 @@
30823211 display: block;
30833212 padding: 3px 20px;
30843213 font-size: 12px;
3085
- line-height: 1.428571429;
3086
- color: #999;
3214
+ line-height: 1.42857143;
3215
+ color: #777;
3216
+ white-space: nowrap;
30873217 }
30883218 .dropdown-backdrop {
30893219 position: fixed;
....@@ -3142,7 +3272,7 @@
31423272 }
31433273 .btn-group > .btn:focus,
31443274 .btn-group-vertical > .btn:focus {
3145
- outline: none;
3275
+ outline: 0;
31463276 }
31473277 .btn-group .btn + .btn,
31483278 .btn-group .btn + .btn-group,
....@@ -3195,24 +3325,6 @@
31953325 .btn-group .dropdown-toggle:active,
31963326 .btn-group.open .dropdown-toggle {
31973327 outline: 0;
3198
-}
3199
-.btn-group-xs > .btn {
3200
- padding: 1px 5px;
3201
- font-size: 12px;
3202
- line-height: 1.5;
3203
- border-radius: 3px;
3204
-}
3205
-.btn-group-sm > .btn {
3206
- padding: 5px 10px;
3207
- font-size: 12px;
3208
- line-height: 1.5;
3209
- border-radius: 3px;
3210
-}
3211
-.btn-group-lg > .btn {
3212
- padding: 10px 16px;
3213
- font-size: 18px;
3214
- line-height: 1.33;
3215
- border-radius: 6px;
32163328 }
32173329 .btn-group > .btn + .dropdown-toggle {
32183330 padding-right: 8px;
....@@ -3298,9 +3410,15 @@
32983410 .btn-group-justified > .btn-group .btn {
32993411 width: 100%;
33003412 }
3413
+.btn-group-justified > .btn-group .dropdown-menu {
3414
+ left: auto;
3415
+}
33013416 [data-toggle="buttons"] > .btn > input[type="radio"],
33023417 [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3303
- display: none;
3418
+ position: absolute;
3419
+ z-index: -1;
3420
+ filter: alpha(opacity=0);
3421
+ opacity: 0;
33043422 }
33053423 .input-group {
33063424 position: relative;
....@@ -3313,6 +3431,8 @@
33133431 padding-left: 0;
33143432 }
33153433 .input-group .form-control {
3434
+ position: relative;
3435
+ z-index: 2;
33163436 float: left;
33173437 width: 100%;
33183438 margin-bottom: 0;
....@@ -3474,11 +3594,11 @@
34743594 background-color: #eee;
34753595 }
34763596 .nav > li.disabled > a {
3477
- color: #999;
3597
+ color: #777;
34783598 }
34793599 .nav > li.disabled > a:hover,
34803600 .nav > li.disabled > a:focus {
3481
- color: #999;
3601
+ color: #777;
34823602 text-decoration: none;
34833603 cursor: not-allowed;
34843604 background-color: transparent;
....@@ -3507,7 +3627,7 @@
35073627 }
35083628 .nav-tabs > li > a {
35093629 margin-right: 2px;
3510
- line-height: 1.428571429;
3630
+ line-height: 1.42857143;
35113631 border: 1px solid transparent;
35123632 border-radius: 4px 4px 0 0;
35133633 }
....@@ -3663,13 +3783,13 @@
36633783 }
36643784 }
36653785 .navbar-collapse {
3666
- max-height: 340px;
36673786 padding-right: 15px;
36683787 padding-left: 15px;
36693788 overflow-x: visible;
36703789 -webkit-overflow-scrolling: touch;
36713790 border-top: 1px solid transparent;
3672
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3791
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
3792
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
36733793 }
36743794 .navbar-collapse.in {
36753795 overflow-y: auto;
....@@ -3678,7 +3798,8 @@
36783798 .navbar-collapse {
36793799 width: auto;
36803800 border-top: 0;
3681
- box-shadow: none;
3801
+ -webkit-box-shadow: none;
3802
+ box-shadow: none;
36823803 }
36833804 .navbar-collapse.collapse {
36843805 display: block !important;
....@@ -3694,6 +3815,16 @@
36943815 .navbar-fixed-bottom .navbar-collapse {
36953816 padding-right: 0;
36963817 padding-left: 0;
3818
+ }
3819
+}
3820
+.navbar-fixed-top .navbar-collapse,
3821
+.navbar-fixed-bottom .navbar-collapse {
3822
+ max-height: 340px;
3823
+}
3824
+@media (max-width: 480px) and (orientation: landscape) {
3825
+ .navbar-fixed-top .navbar-collapse,
3826
+ .navbar-fixed-bottom .navbar-collapse {
3827
+ max-height: 200px;
36973828 }
36983829 }
36993830 .container > .navbar-header,
....@@ -3727,6 +3858,9 @@
37273858 right: 0;
37283859 left: 0;
37293860 z-index: 1030;
3861
+ -webkit-transform: translate3d(0, 0, 0);
3862
+ -o-transform: translate3d(0, 0, 0);
3863
+ transform: translate3d(0, 0, 0);
37303864 }
37313865 @media (min-width: 768px) {
37323866 .navbar-fixed-top,
....@@ -3745,7 +3879,7 @@
37453879 }
37463880 .navbar-brand {
37473881 float: left;
3748
- height: 20px;
3882
+ height: 50px;
37493883 padding: 15px 15px;
37503884 font-size: 18px;
37513885 line-height: 20px;
....@@ -3773,7 +3907,7 @@
37733907 border-radius: 4px;
37743908 }
37753909 .navbar-toggle:focus {
3776
- outline: none;
3910
+ outline: 0;
37773911 }
37783912 .navbar-toggle .icon-bar {
37793913 display: block;
....@@ -3805,7 +3939,8 @@
38053939 margin-top: 0;
38063940 background-color: transparent;
38073941 border: 0;
3808
- box-shadow: none;
3942
+ -webkit-box-shadow: none;
3943
+ box-shadow: none;
38093944 }
38103945 .navbar-nav .open .dropdown-menu > li > a,
38113946 .navbar-nav .open .dropdown-menu .dropdown-header {
....@@ -3865,6 +4000,18 @@
38654000 width: auto;
38664001 vertical-align: middle;
38674002 }
4003
+ .navbar-form .input-group {
4004
+ display: inline-table;
4005
+ vertical-align: middle;
4006
+ }
4007
+ .navbar-form .input-group .input-group-addon,
4008
+ .navbar-form .input-group .input-group-btn,
4009
+ .navbar-form .input-group .form-control {
4010
+ width: auto;
4011
+ }
4012
+ .navbar-form .input-group > .form-control {
4013
+ width: 100%;
4014
+ }
38684015 .navbar-form .control-label {
38694016 margin-bottom: 0;
38704017 vertical-align: middle;
....@@ -3872,14 +4019,17 @@
38724019 .navbar-form .radio,
38734020 .navbar-form .checkbox {
38744021 display: inline-block;
3875
- padding-left: 0;
38764022 margin-top: 0;
38774023 margin-bottom: 0;
38784024 vertical-align: middle;
38794025 }
4026
+ .navbar-form .radio label,
4027
+ .navbar-form .checkbox label {
4028
+ padding-left: 0;
4029
+ }
38804030 .navbar-form .radio input[type="radio"],
38814031 .navbar-form .checkbox input[type="checkbox"] {
3882
- float: none;
4032
+ position: relative;
38834033 margin-left: 0;
38844034 }
38854035 .navbar-form .has-feedback .form-control-feedback {
....@@ -4024,12 +4174,25 @@
40244174 .navbar-default .navbar-link:hover {
40254175 color: #333;
40264176 }
4177
+.navbar-default .btn-link {
4178
+ color: #777;
4179
+}
4180
+.navbar-default .btn-link:hover,
4181
+.navbar-default .btn-link:focus {
4182
+ color: #333;
4183
+}
4184
+.navbar-default .btn-link[disabled]:hover,
4185
+fieldset[disabled] .navbar-default .btn-link:hover,
4186
+.navbar-default .btn-link[disabled]:focus,
4187
+fieldset[disabled] .navbar-default .btn-link:focus {
4188
+ color: #ccc;
4189
+}
40274190 .navbar-inverse {
40284191 background-color: #222;
40294192 border-color: #080808;
40304193 }
40314194 .navbar-inverse .navbar-brand {
4032
- color: #999;
4195
+ color: #777;
40334196 }
40344197 .navbar-inverse .navbar-brand:hover,
40354198 .navbar-inverse .navbar-brand:focus {
....@@ -4037,10 +4200,10 @@
40374200 background-color: transparent;
40384201 }
40394202 .navbar-inverse .navbar-text {
4040
- color: #999;
4203
+ color: #777;
40414204 }
40424205 .navbar-inverse .navbar-nav > li > a {
4043
- color: #999;
4206
+ color: #777;
40444207 }
40454208 .navbar-inverse .navbar-nav > li > a:hover,
40464209 .navbar-inverse .navbar-nav > li > a:focus {
....@@ -4087,7 +4250,7 @@
40874250 background-color: #080808;
40884251 }
40894252 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4090
- color: #999;
4253
+ color: #777;
40914254 }
40924255 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
40934256 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
....@@ -4108,10 +4271,23 @@
41084271 }
41094272 }
41104273 .navbar-inverse .navbar-link {
4111
- color: #999;
4274
+ color: #777;
41124275 }
41134276 .navbar-inverse .navbar-link:hover {
41144277 color: #fff;
4278
+}
4279
+.navbar-inverse .btn-link {
4280
+ color: #777;
4281
+}
4282
+.navbar-inverse .btn-link:hover,
4283
+.navbar-inverse .btn-link:focus {
4284
+ color: #fff;
4285
+}
4286
+.navbar-inverse .btn-link[disabled]:hover,
4287
+fieldset[disabled] .navbar-inverse .btn-link:hover,
4288
+.navbar-inverse .btn-link[disabled]:focus,
4289
+fieldset[disabled] .navbar-inverse .btn-link:focus {
4290
+ color: #444;
41154291 }
41164292 .breadcrumb {
41174293 padding: 8px 15px;
....@@ -4129,7 +4305,7 @@
41294305 content: "/\00a0";
41304306 }
41314307 .breadcrumb > .active {
4132
- color: #999;
4308
+ color: #777;
41334309 }
41344310 .pagination {
41354311 display: inline-block;
....@@ -4146,7 +4322,7 @@
41464322 float: left;
41474323 padding: 6px 12px;
41484324 margin-left: -1px;
4149
- line-height: 1.428571429;
4325
+ line-height: 1.42857143;
41504326 color: #428bca;
41514327 text-decoration: none;
41524328 background-color: #fff;
....@@ -4189,7 +4365,7 @@
41894365 .pagination > .disabled > a,
41904366 .pagination > .disabled > a:hover,
41914367 .pagination > .disabled > a:focus {
4192
- color: #999;
4368
+ color: #777;
41934369 cursor: not-allowed;
41944370 background-color: #fff;
41954371 border-color: #ddd;
....@@ -4258,7 +4434,7 @@
42584434 .pager .disabled > a:hover,
42594435 .pager .disabled > a:focus,
42604436 .pager .disabled > span {
4261
- color: #999;
4437
+ color: #777;
42624438 cursor: not-allowed;
42634439 background-color: #fff;
42644440 }
....@@ -4274,8 +4450,8 @@
42744450 vertical-align: baseline;
42754451 border-radius: .25em;
42764452 }
4277
-.label[href]:hover,
4278
-.label[href]:focus {
4453
+a.label:hover,
4454
+a.label:focus {
42794455 color: #fff;
42804456 text-decoration: none;
42814457 cursor: pointer;
....@@ -4288,11 +4464,11 @@
42884464 top: -1px;
42894465 }
42904466 .label-default {
4291
- background-color: #999;
4467
+ background-color: #777;
42924468 }
42934469 .label-default[href]:hover,
42944470 .label-default[href]:focus {
4295
- background-color: #808080;
4471
+ background-color: #5e5e5e;
42964472 }
42974473 .label-primary {
42984474 background-color: #428bca;
....@@ -4340,7 +4516,7 @@
43404516 text-align: center;
43414517 white-space: nowrap;
43424518 vertical-align: baseline;
4343
- background-color: #999;
4519
+ background-color: #777;
43444520 border-radius: 10px;
43454521 }
43464522 .badge:empty {
....@@ -4383,6 +4559,9 @@
43834559 font-size: 21px;
43844560 font-weight: 200;
43854561 }
4562
+.jumbotron > hr {
4563
+ border-top-color: #d5d5d5;
4564
+}
43864565 .container .jumbotron {
43874566 border-radius: 6px;
43884567 }
....@@ -4407,18 +4586,16 @@
44074586 display: block;
44084587 padding: 4px;
44094588 margin-bottom: 20px;
4410
- line-height: 1.428571429;
4589
+ line-height: 1.42857143;
44114590 background-color: #fff;
44124591 border: 1px solid #ddd;
44134592 border-radius: 4px;
44144593 -webkit-transition: all .2s ease-in-out;
4594
+ -o-transition: all .2s ease-in-out;
44154595 transition: all .2s ease-in-out;
44164596 }
44174597 .thumbnail > img,
44184598 .thumbnail a > img {
4419
- display: block;
4420
- max-width: 100%;
4421
- height: auto;
44224599 margin-right: auto;
44234600 margin-left: auto;
44244601 }
....@@ -4451,10 +4628,12 @@
44514628 .alert > p + p {
44524629 margin-top: 5px;
44534630 }
4454
-.alert-dismissable {
4631
+.alert-dismissable,
4632
+.alert-dismissible {
44554633 padding-right: 35px;
44564634 }
4457
-.alert-dismissable .close {
4635
+.alert-dismissable .close,
4636
+.alert-dismissible .close {
44584637 position: relative;
44594638 top: -2px;
44604639 right: -21px;
....@@ -4512,6 +4691,14 @@
45124691 background-position: 0 0;
45134692 }
45144693 }
4694
+@-o-keyframes progress-bar-stripes {
4695
+ from {
4696
+ background-position: 40px 0;
4697
+ }
4698
+ to {
4699
+ background-position: 0 0;
4700
+ }
4701
+}
45154702 @keyframes progress-bar-stripes {
45164703 from {
45174704 background-position: 40px 0;
....@@ -4541,22 +4728,41 @@
45414728 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
45424729 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
45434730 -webkit-transition: width .6s ease;
4731
+ -o-transition: width .6s ease;
45444732 transition: width .6s ease;
45454733 }
4546
-.progress-striped .progress-bar {
4734
+.progress-striped .progress-bar,
4735
+.progress-bar-striped {
45474736 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4737
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45484738 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4549
- background-size: 40px 40px;
4739
+ -webkit-background-size: 40px 40px;
4740
+ background-size: 40px 40px;
45504741 }
4551
-.progress.active .progress-bar {
4742
+.progress.active .progress-bar,
4743
+.progress-bar.active {
45524744 -webkit-animation: progress-bar-stripes 2s linear infinite;
4745
+ -o-animation: progress-bar-stripes 2s linear infinite;
45534746 animation: progress-bar-stripes 2s linear infinite;
4747
+}
4748
+.progress-bar[aria-valuenow="1"],
4749
+.progress-bar[aria-valuenow="2"] {
4750
+ min-width: 30px;
4751
+}
4752
+.progress-bar[aria-valuenow="0"] {
4753
+ min-width: 30px;
4754
+ color: #777;
4755
+ background-color: transparent;
4756
+ background-image: none;
4757
+ -webkit-box-shadow: none;
4758
+ box-shadow: none;
45544759 }
45554760 .progress-bar-success {
45564761 background-color: #5cb85c;
45574762 }
45584763 .progress-striped .progress-bar-success {
45594764 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4765
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45604766 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45614767 }
45624768 .progress-bar-info {
....@@ -4564,6 +4770,7 @@
45644770 }
45654771 .progress-striped .progress-bar-info {
45664772 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4773
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45674774 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45684775 }
45694776 .progress-bar-warning {
....@@ -4571,6 +4778,7 @@
45714778 }
45724779 .progress-striped .progress-bar-warning {
45734780 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4781
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45744782 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45754783 }
45764784 .progress-bar-danger {
....@@ -4578,6 +4786,7 @@
45784786 }
45794787 .progress-striped .progress-bar-danger {
45804788 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
4789
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45814790 background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
45824791 }
45834792 .media,
....@@ -4643,25 +4852,48 @@
46434852 }
46444853 a.list-group-item:hover,
46454854 a.list-group-item:focus {
4855
+ color: #555;
46464856 text-decoration: none;
46474857 background-color: #f5f5f5;
46484858 }
4649
-a.list-group-item.active,
4650
-a.list-group-item.active:hover,
4651
-a.list-group-item.active:focus {
4859
+.list-group-item.disabled,
4860
+.list-group-item.disabled:hover,
4861
+.list-group-item.disabled:focus {
4862
+ color: #777;
4863
+ background-color: #eee;
4864
+}
4865
+.list-group-item.disabled .list-group-item-heading,
4866
+.list-group-item.disabled:hover .list-group-item-heading,
4867
+.list-group-item.disabled:focus .list-group-item-heading {
4868
+ color: inherit;
4869
+}
4870
+.list-group-item.disabled .list-group-item-text,
4871
+.list-group-item.disabled:hover .list-group-item-text,
4872
+.list-group-item.disabled:focus .list-group-item-text {
4873
+ color: #777;
4874
+}
4875
+.list-group-item.active,
4876
+.list-group-item.active:hover,
4877
+.list-group-item.active:focus {
46524878 z-index: 2;
46534879 color: #fff;
46544880 background-color: #428bca;
46554881 border-color: #428bca;
46564882 }
4657
-a.list-group-item.active .list-group-item-heading,
4658
-a.list-group-item.active:hover .list-group-item-heading,
4659
-a.list-group-item.active:focus .list-group-item-heading {
4883
+.list-group-item.active .list-group-item-heading,
4884
+.list-group-item.active:hover .list-group-item-heading,
4885
+.list-group-item.active:focus .list-group-item-heading,
4886
+.list-group-item.active .list-group-item-heading > small,
4887
+.list-group-item.active:hover .list-group-item-heading > small,
4888
+.list-group-item.active:focus .list-group-item-heading > small,
4889
+.list-group-item.active .list-group-item-heading > .small,
4890
+.list-group-item.active:hover .list-group-item-heading > .small,
4891
+.list-group-item.active:focus .list-group-item-heading > .small {
46604892 color: inherit;
46614893 }
4662
-a.list-group-item.active .list-group-item-text,
4663
-a.list-group-item.active:hover .list-group-item-text,
4664
-a.list-group-item.active:focus .list-group-item-text {
4894
+.list-group-item.active .list-group-item-text,
4895
+.list-group-item.active:hover .list-group-item-text,
4896
+.list-group-item.active:focus .list-group-item-text {
46654897 color: #e1edf7;
46664898 }
46674899 .list-group-item-success {
....@@ -4771,6 +5003,31 @@
47715003 .panel-body {
47725004 padding: 15px;
47735005 }
5006
+.panel-heading {
5007
+ padding: 10px 15px;
5008
+ border-bottom: 1px solid transparent;
5009
+ border-top-left-radius: 3px;
5010
+ border-top-right-radius: 3px;
5011
+}
5012
+.panel-heading > .dropdown .dropdown-toggle {
5013
+ color: inherit;
5014
+}
5015
+.panel-title {
5016
+ margin-top: 0;
5017
+ margin-bottom: 0;
5018
+ font-size: 16px;
5019
+ color: inherit;
5020
+}
5021
+.panel-title > a {
5022
+ color: inherit;
5023
+}
5024
+.panel-footer {
5025
+ padding: 10px 15px;
5026
+ background-color: #f5f5f5;
5027
+ border-top: 1px solid #ddd;
5028
+ border-bottom-right-radius: 3px;
5029
+ border-bottom-left-radius: 3px;
5030
+}
47745031 .panel > .list-group {
47755032 margin-bottom: 0;
47765033 }
....@@ -4778,26 +5035,31 @@
47785035 border-width: 1px 0;
47795036 border-radius: 0;
47805037 }
4781
-.panel > .list-group .list-group-item:first-child {
4782
- border-top: 0;
4783
-}
4784
-.panel > .list-group .list-group-item:last-child {
4785
- border-bottom: 0;
4786
-}
47875038 .panel > .list-group:first-child .list-group-item:first-child {
5039
+ border-top: 0;
47885040 border-top-left-radius: 3px;
47895041 border-top-right-radius: 3px;
47905042 }
47915043 .panel > .list-group:last-child .list-group-item:last-child {
5044
+ border-bottom: 0;
47925045 border-bottom-right-radius: 3px;
47935046 border-bottom-left-radius: 3px;
47945047 }
47955048 .panel-heading + .list-group .list-group-item:first-child {
47965049 border-top-width: 0;
47975050 }
5051
+.list-group + .panel-footer {
5052
+ border-top-width: 0;
5053
+}
47985054 .panel > .table,
4799
-.panel > .table-responsive > .table {
5055
+.panel > .table-responsive > .table,
5056
+.panel > .panel-collapse > .table {
48005057 margin-bottom: 0;
5058
+}
5059
+.panel > .table:first-child,
5060
+.panel > .table-responsive:first-child > .table:first-child {
5061
+ border-top-left-radius: 3px;
5062
+ border-top-right-radius: 3px;
48015063 }
48025064 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
48035065 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
....@@ -4818,6 +5080,11 @@
48185080 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
48195081 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
48205082 border-top-right-radius: 3px;
5083
+}
5084
+.panel > .table:last-child,
5085
+.panel > .table-responsive:last-child > .table:last-child {
5086
+ border-bottom-right-radius: 3px;
5087
+ border-bottom-left-radius: 3px;
48215088 }
48225089 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
48235090 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
....@@ -4879,69 +5146,35 @@
48795146 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
48805147 border-right: 0;
48815148 }
4882
-.panel > .table-bordered > thead > tr:first-child > th,
4883
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
4884
-.panel > .table-bordered > tbody > tr:first-child > th,
4885
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th,
4886
-.panel > .table-bordered > tfoot > tr:first-child > th,
4887
-.panel > .table-responsive > .table-bordered > tfoot > tr:first-child > th,
48885149 .panel > .table-bordered > thead > tr:first-child > td,
48895150 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
48905151 .panel > .table-bordered > tbody > tr:first-child > td,
48915152 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
4892
-.panel > .table-bordered > tfoot > tr:first-child > td,
4893
-.panel > .table-responsive > .table-bordered > tfoot > tr:first-child > td {
4894
- border-top: 0;
5153
+.panel > .table-bordered > thead > tr:first-child > th,
5154
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5155
+.panel > .table-bordered > tbody > tr:first-child > th,
5156
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5157
+ border-bottom: 0;
48955158 }
4896
-.panel > .table-bordered > thead > tr:last-child > th,
4897
-.panel > .table-responsive > .table-bordered > thead > tr:last-child > th,
4898
-.panel > .table-bordered > tbody > tr:last-child > th,
4899
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
4900
-.panel > .table-bordered > tfoot > tr:last-child > th,
4901
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th,
4902
-.panel > .table-bordered > thead > tr:last-child > td,
4903
-.panel > .table-responsive > .table-bordered > thead > tr:last-child > td,
49045159 .panel > .table-bordered > tbody > tr:last-child > td,
49055160 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
49065161 .panel > .table-bordered > tfoot > tr:last-child > td,
4907
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {
5162
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5163
+.panel > .table-bordered > tbody > tr:last-child > th,
5164
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5165
+.panel > .table-bordered > tfoot > tr:last-child > th,
5166
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
49085167 border-bottom: 0;
49095168 }
49105169 .panel > .table-responsive {
49115170 margin-bottom: 0;
49125171 border: 0;
49135172 }
4914
-.panel-heading {
4915
- padding: 10px 15px;
4916
- border-bottom: 1px solid transparent;
4917
- border-top-left-radius: 3px;
4918
- border-top-right-radius: 3px;
4919
-}
4920
-.panel-heading > .dropdown .dropdown-toggle {
4921
- color: inherit;
4922
-}
4923
-.panel-title {
4924
- margin-top: 0;
4925
- margin-bottom: 0;
4926
- font-size: 16px;
4927
- color: inherit;
4928
-}
4929
-.panel-title > a {
4930
- color: inherit;
4931
-}
4932
-.panel-footer {
4933
- padding: 10px 15px;
4934
- background-color: #f5f5f5;
4935
- border-top: 1px solid #ddd;
4936
- border-bottom-right-radius: 3px;
4937
- border-bottom-left-radius: 3px;
4938
-}
49395173 .panel-group {
49405174 margin-bottom: 20px;
49415175 }
49425176 .panel-group .panel {
49435177 margin-bottom: 0;
4944
- overflow: hidden;
49455178 border-radius: 4px;
49465179 }
49475180 .panel-group .panel + .panel {
....@@ -4950,7 +5183,7 @@
49505183 .panel-group .panel-heading {
49515184 border-bottom: 0;
49525185 }
4953
-.panel-group .panel-heading + .panel-collapse .panel-body {
5186
+.panel-group .panel-heading + .panel-collapse > .panel-body {
49545187 border-top: 1px solid #ddd;
49555188 }
49565189 .panel-group .panel-footer {
....@@ -4967,10 +5200,14 @@
49675200 background-color: #f5f5f5;
49685201 border-color: #ddd;
49695202 }
4970
-.panel-default > .panel-heading + .panel-collapse .panel-body {
5203
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
49715204 border-top-color: #ddd;
49725205 }
4973
-.panel-default > .panel-footer + .panel-collapse .panel-body {
5206
+.panel-default > .panel-heading .badge {
5207
+ color: #f5f5f5;
5208
+ background-color: #333;
5209
+}
5210
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
49745211 border-bottom-color: #ddd;
49755212 }
49765213 .panel-primary {
....@@ -4981,10 +5218,14 @@
49815218 background-color: #428bca;
49825219 border-color: #428bca;
49835220 }
4984
-.panel-primary > .panel-heading + .panel-collapse .panel-body {
5221
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
49855222 border-top-color: #428bca;
49865223 }
4987
-.panel-primary > .panel-footer + .panel-collapse .panel-body {
5224
+.panel-primary > .panel-heading .badge {
5225
+ color: #428bca;
5226
+ background-color: #fff;
5227
+}
5228
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
49885229 border-bottom-color: #428bca;
49895230 }
49905231 .panel-success {
....@@ -4995,10 +5236,14 @@
49955236 background-color: #dff0d8;
49965237 border-color: #d6e9c6;
49975238 }
4998
-.panel-success > .panel-heading + .panel-collapse .panel-body {
5239
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
49995240 border-top-color: #d6e9c6;
50005241 }
5001
-.panel-success > .panel-footer + .panel-collapse .panel-body {
5242
+.panel-success > .panel-heading .badge {
5243
+ color: #dff0d8;
5244
+ background-color: #3c763d;
5245
+}
5246
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
50025247 border-bottom-color: #d6e9c6;
50035248 }
50045249 .panel-info {
....@@ -5009,10 +5254,14 @@
50095254 background-color: #d9edf7;
50105255 border-color: #bce8f1;
50115256 }
5012
-.panel-info > .panel-heading + .panel-collapse .panel-body {
5257
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
50135258 border-top-color: #bce8f1;
50145259 }
5015
-.panel-info > .panel-footer + .panel-collapse .panel-body {
5260
+.panel-info > .panel-heading .badge {
5261
+ color: #d9edf7;
5262
+ background-color: #31708f;
5263
+}
5264
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
50165265 border-bottom-color: #bce8f1;
50175266 }
50185267 .panel-warning {
....@@ -5023,10 +5272,14 @@
50235272 background-color: #fcf8e3;
50245273 border-color: #faebcc;
50255274 }
5026
-.panel-warning > .panel-heading + .panel-collapse .panel-body {
5275
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
50275276 border-top-color: #faebcc;
50285277 }
5029
-.panel-warning > .panel-footer + .panel-collapse .panel-body {
5278
+.panel-warning > .panel-heading .badge {
5279
+ color: #fcf8e3;
5280
+ background-color: #8a6d3b;
5281
+}
5282
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
50305283 border-bottom-color: #faebcc;
50315284 }
50325285 .panel-danger {
....@@ -5037,11 +5290,40 @@
50375290 background-color: #f2dede;
50385291 border-color: #ebccd1;
50395292 }
5040
-.panel-danger > .panel-heading + .panel-collapse .panel-body {
5293
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
50415294 border-top-color: #ebccd1;
50425295 }
5043
-.panel-danger > .panel-footer + .panel-collapse .panel-body {
5296
+.panel-danger > .panel-heading .badge {
5297
+ color: #f2dede;
5298
+ background-color: #a94442;
5299
+}
5300
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
50445301 border-bottom-color: #ebccd1;
5302
+}
5303
+.embed-responsive {
5304
+ position: relative;
5305
+ display: block;
5306
+ height: 0;
5307
+ padding: 0;
5308
+ overflow: hidden;
5309
+}
5310
+.embed-responsive .embed-responsive-item,
5311
+.embed-responsive iframe,
5312
+.embed-responsive embed,
5313
+.embed-responsive object {
5314
+ position: absolute;
5315
+ top: 0;
5316
+ bottom: 0;
5317
+ left: 0;
5318
+ width: 100%;
5319
+ height: 100%;
5320
+ border: 0;
5321
+}
5322
+.embed-responsive.embed-responsive-16by9 {
5323
+ padding-bottom: 56.25%;
5324
+}
5325
+.embed-responsive.embed-responsive-4by3 {
5326
+ padding-bottom: 75%;
50455327 }
50465328 .well {
50475329 min-height: 20px;
....@@ -5101,24 +5383,26 @@
51015383 left: 0;
51025384 z-index: 1050;
51035385 display: none;
5104
- overflow: auto;
5105
- overflow-y: scroll;
5386
+ overflow: hidden;
51065387 -webkit-overflow-scrolling: touch;
51075388 outline: 0;
51085389 }
51095390 .modal.fade .modal-dialog {
51105391 -webkit-transition: -webkit-transform .3s ease-out;
5111
- -moz-transition: -moz-transform .3s ease-out;
51125392 -o-transition: -o-transform .3s ease-out;
51135393 transition: transform .3s ease-out;
5114
- -webkit-transform: translate(0, -25%);
5115
- -ms-transform: translate(0, -25%);
5116
- transform: translate(0, -25%);
5394
+ -webkit-transform: translate3d(0, -25%, 0);
5395
+ -o-transform: translate3d(0, -25%, 0);
5396
+ transform: translate3d(0, -25%, 0);
51175397 }
51185398 .modal.in .modal-dialog {
5119
- -webkit-transform: translate(0, 0);
5120
- -ms-transform: translate(0, 0);
5121
- transform: translate(0, 0);
5399
+ -webkit-transform: translate3d(0, 0, 0);
5400
+ -o-transform: translate3d(0, 0, 0);
5401
+ transform: translate3d(0, 0, 0);
5402
+}
5403
+.modal-open .modal {
5404
+ overflow-x: hidden;
5405
+ overflow-y: auto;
51225406 }
51235407 .modal-dialog {
51245408 position: relative;
....@@ -5128,11 +5412,12 @@
51285412 .modal-content {
51295413 position: relative;
51305414 background-color: #fff;
5131
- background-clip: padding-box;
5415
+ -webkit-background-clip: padding-box;
5416
+ background-clip: padding-box;
51325417 border: 1px solid #999;
51335418 border: 1px solid rgba(0, 0, 0, .2);
51345419 border-radius: 6px;
5135
- outline: none;
5420
+ outline: 0;
51365421 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
51375422 box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
51385423 }
....@@ -5154,7 +5439,7 @@
51545439 opacity: .5;
51555440 }
51565441 .modal-header {
5157
- min-height: 16.428571429px;
5442
+ min-height: 16.42857143px;
51585443 padding: 15px;
51595444 border-bottom: 1px solid #e5e5e5;
51605445 }
....@@ -5163,15 +5448,14 @@
51635448 }
51645449 .modal-title {
51655450 margin: 0;
5166
- line-height: 1.428571429;
5451
+ line-height: 1.42857143;
51675452 }
51685453 .modal-body {
51695454 position: relative;
5170
- padding: 20px;
5455
+ padding: 15px;
51715456 }
51725457 .modal-footer {
5173
- padding: 19px 20px 20px;
5174
- margin-top: 15px;
5458
+ padding: 15px;
51755459 text-align: right;
51765460 border-top: 1px solid #e5e5e5;
51775461 }
....@@ -5185,6 +5469,13 @@
51855469 .modal-footer .btn-block + .btn-block {
51865470 margin-left: 0;
51875471 }
5472
+.modal-scrollbar-measure {
5473
+ position: absolute;
5474
+ top: -9999px;
5475
+ width: 50px;
5476
+ height: 50px;
5477
+ overflow: scroll;
5478
+}
51885479 @media (min-width: 768px) {
51895480 .modal-dialog {
51905481 width: 600px;
....@@ -5197,13 +5488,15 @@
51975488 .modal-sm {
51985489 width: 300px;
51995490 }
5491
+}
5492
+@media (min-width: 992px) {
52005493 .modal-lg {
52015494 width: 900px;
52025495 }
52035496 }
52045497 .tooltip {
52055498 position: absolute;
5206
- z-index: 1030;
5499
+ z-index: 1070;
52075500 display: block;
52085501 font-size: 12px;
52095502 line-height: 1.4;
....@@ -5303,14 +5596,15 @@
53035596 position: absolute;
53045597 top: 0;
53055598 left: 0;
5306
- z-index: 1010;
5599
+ z-index: 1060;
53075600 display: none;
53085601 max-width: 276px;
53095602 padding: 1px;
53105603 text-align: left;
53115604 white-space: normal;
53125605 background-color: #fff;
5313
- background-clip: padding-box;
5606
+ -webkit-background-clip: padding-box;
5607
+ background-clip: padding-box;
53145608 border: 1px solid #ccc;
53155609 border: 1px solid rgba(0, 0, 0, .2);
53165610 border-radius: 6px;
....@@ -5342,8 +5636,8 @@
53425636 .popover-content {
53435637 padding: 9px 14px;
53445638 }
5345
-.popover .arrow,
5346
-.popover .arrow:after {
5639
+.popover > .arrow,
5640
+.popover > .arrow:after {
53475641 position: absolute;
53485642 display: block;
53495643 width: 0;
....@@ -5351,14 +5645,14 @@
53515645 border-color: transparent;
53525646 border-style: solid;
53535647 }
5354
-.popover .arrow {
5648
+.popover > .arrow {
53555649 border-width: 11px;
53565650 }
5357
-.popover .arrow:after {
5651
+.popover > .arrow:after {
53585652 content: "";
53595653 border-width: 10px;
53605654 }
5361
-.popover.top .arrow {
5655
+.popover.top > .arrow {
53625656 bottom: -11px;
53635657 left: 50%;
53645658 margin-left: -11px;
....@@ -5366,14 +5660,14 @@
53665660 border-top-color: rgba(0, 0, 0, .25);
53675661 border-bottom-width: 0;
53685662 }
5369
-.popover.top .arrow:after {
5663
+.popover.top > .arrow:after {
53705664 bottom: 1px;
53715665 margin-left: -10px;
53725666 content: " ";
53735667 border-top-color: #fff;
53745668 border-bottom-width: 0;
53755669 }
5376
-.popover.right .arrow {
5670
+.popover.right > .arrow {
53775671 top: 50%;
53785672 left: -11px;
53795673 margin-top: -11px;
....@@ -5381,14 +5675,14 @@
53815675 border-right-color: rgba(0, 0, 0, .25);
53825676 border-left-width: 0;
53835677 }
5384
-.popover.right .arrow:after {
5678
+.popover.right > .arrow:after {
53855679 bottom: -10px;
53865680 left: 1px;
53875681 content: " ";
53885682 border-right-color: #fff;
53895683 border-left-width: 0;
53905684 }
5391
-.popover.bottom .arrow {
5685
+.popover.bottom > .arrow {
53925686 top: -11px;
53935687 left: 50%;
53945688 margin-left: -11px;
....@@ -5396,14 +5690,14 @@
53965690 border-bottom-color: #999;
53975691 border-bottom-color: rgba(0, 0, 0, .25);
53985692 }
5399
-.popover.bottom .arrow:after {
5693
+.popover.bottom > .arrow:after {
54005694 top: 1px;
54015695 margin-left: -10px;
54025696 content: " ";
54035697 border-top-width: 0;
54045698 border-bottom-color: #fff;
54055699 }
5406
-.popover.left .arrow {
5700
+.popover.left > .arrow {
54075701 top: 50%;
54085702 right: -11px;
54095703 margin-top: -11px;
....@@ -5411,7 +5705,7 @@
54115705 border-left-color: #999;
54125706 border-left-color: rgba(0, 0, 0, .25);
54135707 }
5414
-.popover.left .arrow:after {
5708
+.popover.left > .arrow:after {
54155709 right: 1px;
54165710 bottom: -10px;
54175711 content: " ";
....@@ -5430,13 +5724,11 @@
54305724 position: relative;
54315725 display: none;
54325726 -webkit-transition: .6s ease-in-out left;
5727
+ -o-transition: .6s ease-in-out left;
54335728 transition: .6s ease-in-out left;
54345729 }
54355730 .carousel-inner > .item > img,
54365731 .carousel-inner > .item > a > img {
5437
- display: block;
5438
- max-width: 100%;
5439
- height: auto;
54405732 line-height: 1;
54415733 }
54425734 .carousel-inner > .active,
....@@ -5483,7 +5775,9 @@
54835775 opacity: .5;
54845776 }
54855777 .carousel-control.left {
5486
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
5778
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5779
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
5780
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
54875781 background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
54885782 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
54895783 background-repeat: repeat-x;
....@@ -5491,7 +5785,9 @@
54915785 .carousel-control.right {
54925786 right: 0;
54935787 left: auto;
5494
- background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
5788
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5789
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
5790
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
54955791 background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
54965792 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
54975793 background-repeat: repeat-x;
....@@ -5501,7 +5797,7 @@
55015797 color: #fff;
55025798 text-decoration: none;
55035799 filter: alpha(opacity=90);
5504
- outline: none;
5800
+ outline: 0;
55055801 opacity: .9;
55065802 }
55075803 .carousel-control .icon-prev,
....@@ -5516,17 +5812,18 @@
55165812 .carousel-control .icon-prev,
55175813 .carousel-control .glyphicon-chevron-left {
55185814 left: 50%;
5815
+ margin-left: -10px;
55195816 }
55205817 .carousel-control .icon-next,
55215818 .carousel-control .glyphicon-chevron-right {
55225819 right: 50%;
5820
+ margin-right: -10px;
55235821 }
55245822 .carousel-control .icon-prev,
55255823 .carousel-control .icon-next {
55265824 width: 20px;
55275825 height: 20px;
55285826 margin-top: -10px;
5529
- margin-left: -10px;
55305827 font-family: serif;
55315828 }
55325829 .carousel-control .icon-prev:before {
....@@ -5580,15 +5877,22 @@
55805877 text-shadow: none;
55815878 }
55825879 @media screen and (min-width: 768px) {
5583
- .carousel-control .glyphicons-chevron-left,
5584
- .carousel-control .glyphicons-chevron-right,
5880
+ .carousel-control .glyphicon-chevron-left,
5881
+ .carousel-control .glyphicon-chevron-right,
55855882 .carousel-control .icon-prev,
55865883 .carousel-control .icon-next {
55875884 width: 30px;
55885885 height: 30px;
55895886 margin-top: -15px;
5590
- margin-left: -15px;
55915887 font-size: 30px;
5888
+ }
5889
+ .carousel-control .glyphicon-chevron-left,
5890
+ .carousel-control .icon-prev {
5891
+ margin-left: -15px;
5892
+ }
5893
+ .carousel-control .glyphicon-chevron-right,
5894
+ .carousel-control .icon-next {
5895
+ margin-right: -15px;
55925896 }
55935897 .carousel-caption {
55945898 right: 20%;
....@@ -5601,6 +5905,8 @@
56015905 }
56025906 .clearfix:before,
56035907 .clearfix:after,
5908
+.dl-horizontal dd:before,
5909
+.dl-horizontal dd:after,
56045910 .container:before,
56055911 .container:after,
56065912 .container-fluid:before,
....@@ -5631,6 +5937,7 @@
56315937 content: " ";
56325938 }
56335939 .clearfix:after,
5940
+.dl-horizontal dd:after,
56345941 .container:after,
56355942 .container-fluid:after,
56365943 .row:after,
....@@ -5679,14 +5986,31 @@
56795986 }
56805987 .affix {
56815988 position: fixed;
5989
+ -webkit-transform: translate3d(0, 0, 0);
5990
+ -o-transform: translate3d(0, 0, 0);
5991
+ transform: translate3d(0, 0, 0);
56825992 }
56835993 @-ms-viewport {
56845994 width: device-width;
56855995 }
56865996 .visible-xs,
5687
-tr.visible-xs,
5688
-th.visible-xs,
5689
-td.visible-xs {
5997
+.visible-sm,
5998
+.visible-md,
5999
+.visible-lg {
6000
+ display: none !important;
6001
+}
6002
+.visible-xs-block,
6003
+.visible-xs-inline,
6004
+.visible-xs-inline-block,
6005
+.visible-sm-block,
6006
+.visible-sm-inline,
6007
+.visible-sm-inline-block,
6008
+.visible-md-block,
6009
+.visible-md-inline,
6010
+.visible-md-inline-block,
6011
+.visible-lg-block,
6012
+.visible-lg-inline,
6013
+.visible-lg-inline-block {
56906014 display: none !important;
56916015 }
56926016 @media (max-width: 767px) {
....@@ -5704,11 +6028,20 @@
57046028 display: table-cell !important;
57056029 }
57066030 }
5707
-.visible-sm,
5708
-tr.visible-sm,
5709
-th.visible-sm,
5710
-td.visible-sm {
5711
- display: none !important;
6031
+@media (max-width: 767px) {
6032
+ .visible-xs-block {
6033
+ display: block !important;
6034
+ }
6035
+}
6036
+@media (max-width: 767px) {
6037
+ .visible-xs-inline {
6038
+ display: inline !important;
6039
+ }
6040
+}
6041
+@media (max-width: 767px) {
6042
+ .visible-xs-inline-block {
6043
+ display: inline-block !important;
6044
+ }
57126045 }
57136046 @media (min-width: 768px) and (max-width: 991px) {
57146047 .visible-sm {
....@@ -5725,11 +6058,20 @@
57256058 display: table-cell !important;
57266059 }
57276060 }
5728
-.visible-md,
5729
-tr.visible-md,
5730
-th.visible-md,
5731
-td.visible-md {
5732
- display: none !important;
6061
+@media (min-width: 768px) and (max-width: 991px) {
6062
+ .visible-sm-block {
6063
+ display: block !important;
6064
+ }
6065
+}
6066
+@media (min-width: 768px) and (max-width: 991px) {
6067
+ .visible-sm-inline {
6068
+ display: inline !important;
6069
+ }
6070
+}
6071
+@media (min-width: 768px) and (max-width: 991px) {
6072
+ .visible-sm-inline-block {
6073
+ display: inline-block !important;
6074
+ }
57336075 }
57346076 @media (min-width: 992px) and (max-width: 1199px) {
57356077 .visible-md {
....@@ -5746,11 +6088,20 @@
57466088 display: table-cell !important;
57476089 }
57486090 }
5749
-.visible-lg,
5750
-tr.visible-lg,
5751
-th.visible-lg,
5752
-td.visible-lg {
5753
- display: none !important;
6091
+@media (min-width: 992px) and (max-width: 1199px) {
6092
+ .visible-md-block {
6093
+ display: block !important;
6094
+ }
6095
+}
6096
+@media (min-width: 992px) and (max-width: 1199px) {
6097
+ .visible-md-inline {
6098
+ display: inline !important;
6099
+ }
6100
+}
6101
+@media (min-width: 992px) and (max-width: 1199px) {
6102
+ .visible-md-inline-block {
6103
+ display: inline-block !important;
6104
+ }
57546105 }
57556106 @media (min-width: 1200px) {
57566107 .visible-lg {
....@@ -5767,42 +6118,42 @@
57676118 display: table-cell !important;
57686119 }
57696120 }
6121
+@media (min-width: 1200px) {
6122
+ .visible-lg-block {
6123
+ display: block !important;
6124
+ }
6125
+}
6126
+@media (min-width: 1200px) {
6127
+ .visible-lg-inline {
6128
+ display: inline !important;
6129
+ }
6130
+}
6131
+@media (min-width: 1200px) {
6132
+ .visible-lg-inline-block {
6133
+ display: inline-block !important;
6134
+ }
6135
+}
57706136 @media (max-width: 767px) {
5771
- .hidden-xs,
5772
- tr.hidden-xs,
5773
- th.hidden-xs,
5774
- td.hidden-xs {
6137
+ .hidden-xs {
57756138 display: none !important;
57766139 }
57776140 }
57786141 @media (min-width: 768px) and (max-width: 991px) {
5779
- .hidden-sm,
5780
- tr.hidden-sm,
5781
- th.hidden-sm,
5782
- td.hidden-sm {
6142
+ .hidden-sm {
57836143 display: none !important;
57846144 }
57856145 }
57866146 @media (min-width: 992px) and (max-width: 1199px) {
5787
- .hidden-md,
5788
- tr.hidden-md,
5789
- th.hidden-md,
5790
- td.hidden-md {
6147
+ .hidden-md {
57916148 display: none !important;
57926149 }
57936150 }
57946151 @media (min-width: 1200px) {
5795
- .hidden-lg,
5796
- tr.hidden-lg,
5797
- th.hidden-lg,
5798
- td.hidden-lg {
6152
+ .hidden-lg {
57996153 display: none !important;
58006154 }
58016155 }
5802
-.visible-print,
5803
-tr.visible-print,
5804
-th.visible-print,
5805
-td.visible-print {
6156
+.visible-print {
58066157 display: none !important;
58076158 }
58086159 @media print {
....@@ -5820,11 +6171,32 @@
58206171 display: table-cell !important;
58216172 }
58226173 }
6174
+.visible-print-block {
6175
+ display: none !important;
6176
+}
58236177 @media print {
5824
- .hidden-print,
5825
- tr.hidden-print,
5826
- th.hidden-print,
5827
- td.hidden-print {
6178
+ .visible-print-block {
6179
+ display: block !important;
6180
+ }
6181
+}
6182
+.visible-print-inline {
6183
+ display: none !important;
6184
+}
6185
+@media print {
6186
+ .visible-print-inline {
6187
+ display: inline !important;
6188
+ }
6189
+}
6190
+.visible-print-inline-block {
6191
+ display: none !important;
6192
+}
6193
+@media print {
6194
+ .visible-print-inline-block {
6195
+ display: inline-block !important;
6196
+ }
6197
+}
6198
+@media print {
6199
+ .hidden-print {
58286200 display: none !important;
58296201 }
58306202 }
securis/src/main/resources/static/css/bootstrap.css.map
....@@ -1 +1 @@
1
-{"version":3,"sources":["less/normalize.less","less/print.less","less/scaffolding.less","less/mixins.less","less/variables.less","less/type.less","less/code.less","less/grid.less","less/tables.less","less/forms.less","less/buttons.less","less/component-animations.less","less/glyphicons.less","less/dropdowns.less","less/button-groups.less","less/input-groups.less","less/navs.less","less/navbar.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/pager.less","less/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/progress-bars.less","less/media.less","less/list-group.less","less/panels.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/responsive-utilities.less"],"names":[],"mappings":"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","sourcesContent":["/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined in IE 8/9.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9.\n// Hide the `template` element in IE, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9, Safari 5, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari 5 and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari 5, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow displayed oddly in IE 9.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari 5.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8+, and Opera\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n * {\n text-shadow: none !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links for images, or javascript/internal links\n a[href^=\"javascript:\"]:after,\n a[href^=\"#\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .table {\n td,\n th {\n background-color: #fff !important;\n }\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n}\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 62.5%;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n","//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n\n// WebKit-style focus\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n.square(@size) {\n .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &:-moz-placeholder { color: @color; } // Firefox 4-18\n &::-moz-placeholder { color: @color; // Firefox 19+\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support the\n// standard `box-shadow` property.\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n -webkit-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n transform: rotate(@degrees);\n}\n.scale(@ratio; @ratio-y...) {\n -webkit-transform: scale(@ratio, @ratio-y);\n -ms-transform: scale(@ratio, @ratio-y); // IE9 only\n transform: scale(@ratio, @ratio-y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n -webkit-transform: skew(@x, @y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n -o-user-select: @select;\n user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n resize: @direction; // Options: horizontal, vertical, both\n overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse .panel-body {\n border-top-color: @border;\n }\n }\n & > .panel-footer {\n + .panel-collapse .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n\n// List Groups\n// -------------------------\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading { color: inherit; }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 8%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n background-color: @color;\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n\n// Contextual backgrounds\n// -------------------------\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n\n// Typography\n// -------------------------\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n background-color: @color;\n .progress-striped & {\n #gradient > .striped();\n }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n &,\n tr&,\n th&,\n td& { display: none !important; }\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n @media (min-width: @screen-xs-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-push(@columns) {\n @media (min-width: @screen-xs-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-xs-column-pull(@columns) {\n @media (min-width: @screen-xs-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.make-grid-columns-float(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = push) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = pull) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.make-grid(@index, @class, @type) when (@index >= 0) {\n .calc-grid(@index, @class, @type);\n // next iteration\n .make-grid((@index - 1), @class, @type);\n}\n\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Variables\n// --------------------------------------------------\n\n\n//== Colors\n//\n//## Gray and brand colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-info: #5bc0de;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n\n\n//== Scaffolding\n//\n// ## Settings for some of the most global styles.\n\n//** Background color for `<body>`.\n@body-bg: #fff;\n//** Global text color on `<body>`.\n@text-color: @gray-dark;\n\n//** Global textual link color.\n@link-color: @brand-primary;\n//** Link hover color set via `darken()` function.\n@link-hover-color: darken(@link-color, 15%);\n\n\n//== Typography\n//\n//## Font, line-height, and color for body text, headings, and more.\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.\n@font-family-monospace: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n@font-family-base: @font-family-sans-serif;\n\n@font-size-base: 14px;\n@font-size-large: ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small: ceil((@font-size-base * 0.85)); // ~12px\n\n@font-size-h1: floor((@font-size-base * 2.6)); // ~36px\n@font-size-h2: floor((@font-size-base * 2.15)); // ~30px\n@font-size-h3: ceil((@font-size-base * 1.7)); // ~24px\n@font-size-h4: ceil((@font-size-base * 1.25)); // ~18px\n@font-size-h5: @font-size-base;\n@font-size-h6: ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base: 1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px\n\n//** By default, this inherits from the `<body>`.\n@headings-font-family: inherit;\n@headings-font-weight: 500;\n@headings-line-height: 1.1;\n@headings-color: inherit;\n\n\n//-- Iconography\n//\n//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.\n\n@icon-font-path: \"../fonts/\";\n@icon-font-name: \"glyphicons-halflings-regular\";\n@icon-font-svg-id:\t\t\t\t\"glyphicons_halflingsregular\";\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical: 6px;\n@padding-base-horizontal: 12px;\n\n@padding-large-vertical: 10px;\n@padding-large-horizontal: 16px;\n\n@padding-small-vertical: 5px;\n@padding-small-horizontal: 10px;\n\n@padding-xs-vertical: 1px;\n@padding-xs-horizontal: 5px;\n\n@line-height-large: 1.33;\n@line-height-small: 1.5;\n\n@border-radius-base: 4px;\n@border-radius-large: 6px;\n@border-radius-small: 3px;\n\n//** Global color for active items (e.g., navs or dropdowns).\n@component-active-color: #fff;\n//** Global background color for active items (e.g., navs or dropdowns).\n@component-active-bg: @brand-primary;\n\n//** Width of the `border` for generating carets that indicator dropdowns.\n@caret-width-base: 4px;\n//** Carets increase slightly in size for larger components.\n@caret-width-large: 5px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Padding for `<th>`s and `<td>`s.\n@table-cell-padding: 8px;\n//** Padding for cells in `.table-condensed`.\n@table-condensed-cell-padding: 5px;\n\n//** Default background color used for all tables.\n@table-bg: transparent;\n//** Background color used for `.table-striped`.\n@table-bg-accent: #f9f9f9;\n//** Background color used for `.table-hover`.\n@table-bg-hover: #f5f5f5;\n@table-bg-active: @table-bg-hover;\n\n//** Border color for table and cell borders.\n@table-border-color: #ddd;\n\n\n//== Buttons\n//\n//## For each of Bootstrap's buttons, define text, background and border color.\n\n@btn-font-weight: normal;\n\n@btn-default-color: #333;\n@btn-default-bg: #fff;\n@btn-default-border: #ccc;\n\n@btn-primary-color: #fff;\n@btn-primary-bg: @brand-primary;\n@btn-primary-border: darken(@btn-primary-bg, 5%);\n\n@btn-success-color: #fff;\n@btn-success-bg: @brand-success;\n@btn-success-border: darken(@btn-success-bg, 5%);\n\n@btn-info-color: #fff;\n@btn-info-bg: @brand-info;\n@btn-info-border: darken(@btn-info-bg, 5%);\n\n@btn-warning-color: #fff;\n@btn-warning-bg: @brand-warning;\n@btn-warning-border: darken(@btn-warning-bg, 5%);\n\n@btn-danger-color: #fff;\n@btn-danger-bg: @brand-danger;\n@btn-danger-border: darken(@btn-danger-bg, 5%);\n\n@btn-link-disabled-color: @gray-light;\n\n\n//== Forms\n//\n//##\n\n//** `<input>` background color\n@input-bg: #fff;\n//** `<input disabled>` background color\n@input-bg-disabled: @gray-lighter;\n\n//** Text color for `<input>`s\n@input-color: @gray;\n//** `<input>` border color\n@input-border: #ccc;\n//** `<input>` border radius\n@input-border-radius: @border-radius-base;\n//** Border color for inputs on focus\n@input-border-focus: #66afe9;\n\n//** Placeholder text color\n@input-color-placeholder: @gray-light;\n\n//** Default `.form-control` height\n@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);\n//** Large `.form-control` height\n@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n//** Small `.form-control` height\n@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color: @gray-dark;\n@legend-border-color: #e5e5e5;\n\n//** Background color for textual input addons\n@input-group-addon-bg: @gray-lighter;\n//** Border color for textual input addons\n@input-group-addon-border-color: @input-border;\n\n\n//== Dropdowns\n//\n//## Dropdown menu container and contents.\n\n//** Background for the dropdown menu.\n@dropdown-bg: #fff;\n//** Dropdown menu `border-color`.\n@dropdown-border: rgba(0,0,0,.15);\n//** Dropdown menu `border-color` **for IE8**.\n@dropdown-fallback-border: #ccc;\n//** Divider color for between dropdown items.\n@dropdown-divider-bg: #e5e5e5;\n\n//** Dropdown link text color.\n@dropdown-link-color: @gray-dark;\n//** Hover color for dropdown links.\n@dropdown-link-hover-color: darken(@gray-dark, 5%);\n//** Hover background for dropdown links.\n@dropdown-link-hover-bg: #f5f5f5;\n\n//** Active dropdown menu item text color.\n@dropdown-link-active-color: @component-active-color;\n//** Active dropdown menu item background color.\n@dropdown-link-active-bg: @component-active-bg;\n\n//** Disabled dropdown menu item background color.\n@dropdown-link-disabled-color: @gray-light;\n\n//** Text color for headers within dropdown menus.\n@dropdown-header-color: @gray-light;\n\n// Note: Deprecated @dropdown-caret-color as of v3.1.0\n@dropdown-caret-color: #000;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navbar: 1000;\n@zindex-dropdown: 1000;\n@zindex-popover: 1010;\n@zindex-tooltip: 1030;\n@zindex-navbar-fixed: 1030;\n@zindex-modal-background: 1040;\n@zindex-modal: 1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs: 480px;\n@screen-xs-min: @screen-xs;\n@screen-phone: @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm: 768px;\n@screen-sm-min: @screen-sm;\n@screen-tablet: @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md: 992px;\n@screen-md-min: @screen-md;\n@screen-desktop: @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg: 1200px;\n@screen-lg-min: @screen-lg;\n@screen-lg-desktop: @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max: (@screen-sm-min - 1);\n@screen-sm-max: (@screen-md-min - 1);\n@screen-md-max: (@screen-lg-min - 1);\n\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Number of columns in the grid.\n@grid-columns: 12;\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width: 30px;\n// Navbar collapse\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint: @screen-sm-min;\n//** Point at which the navbar begins collapsing.\n@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);\n\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height: 50px;\n@navbar-margin-bottom: @line-height-computed;\n@navbar-border-radius: @border-radius-base;\n@navbar-padding-horizontal: floor((@grid-gutter-width / 2));\n@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);\n@navbar-collapse-max-height: 340px;\n\n@navbar-default-color: #777;\n@navbar-default-bg: #f8f8f8;\n@navbar-default-border: darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color: #777;\n@navbar-default-link-hover-color: #333;\n@navbar-default-link-hover-bg: transparent;\n@navbar-default-link-active-color: #555;\n@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color: #ccc;\n@navbar-default-link-disabled-bg: transparent;\n\n// Navbar brand label\n@navbar-default-brand-color: @navbar-default-link-color;\n@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg: transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg: #ddd;\n@navbar-default-toggle-icon-bar-bg: #888;\n@navbar-default-toggle-border-color: #ddd;\n\n\n// Inverted navbar\n// Reset inverted navbar basics\n@navbar-inverse-color: @gray-light;\n@navbar-inverse-bg: #222;\n@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color: @gray-light;\n@navbar-inverse-link-hover-color: #fff;\n@navbar-inverse-link-hover-bg: transparent;\n@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color: #444;\n@navbar-inverse-link-disabled-bg: transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color: @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color: #fff;\n@navbar-inverse-brand-hover-bg: transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg: #333;\n@navbar-inverse-toggle-icon-bar-bg: #fff;\n@navbar-inverse-toggle-border-color: #333;\n\n\n//== Navs\n//\n//##\n\n//=== Shared nav styles\n@nav-link-padding: 10px 15px;\n@nav-link-hover-bg: @gray-lighter;\n\n@nav-disabled-link-color: @gray-light;\n@nav-disabled-link-hover-color: @gray-light;\n\n@nav-open-link-hover-color: #fff;\n\n//== Tabs\n@nav-tabs-border-color: #ddd;\n\n@nav-tabs-link-hover-border-color: @gray-lighter;\n\n@nav-tabs-active-link-hover-bg: @body-bg;\n@nav-tabs-active-link-hover-color: @gray;\n@nav-tabs-active-link-hover-border-color: #ddd;\n\n@nav-tabs-justified-link-border-color: #ddd;\n@nav-tabs-justified-active-link-border-color: @body-bg;\n\n//== Pills\n@nav-pills-border-radius: @border-radius-base;\n@nav-pills-active-link-hover-bg: @component-active-bg;\n@nav-pills-active-link-hover-color: @component-active-color;\n\n\n//== Pagination\n//\n//##\n\n@pagination-color: @link-color;\n@pagination-bg: #fff;\n@pagination-border: #ddd;\n\n@pagination-hover-color: @link-hover-color;\n@pagination-hover-bg: @gray-lighter;\n@pagination-hover-border: #ddd;\n\n@pagination-active-color: #fff;\n@pagination-active-bg: @brand-primary;\n@pagination-active-border: @brand-primary;\n\n@pagination-disabled-color: @gray-light;\n@pagination-disabled-bg: #fff;\n@pagination-disabled-border: #ddd;\n\n\n//== Pager\n//\n//##\n\n@pager-bg: @pagination-bg;\n@pager-border: @pagination-border;\n@pager-border-radius: 15px;\n\n@pager-hover-bg: @pagination-hover-bg;\n\n@pager-active-bg: @pagination-active-bg;\n@pager-active-color: @pagination-active-color;\n\n@pager-disabled-color: @pagination-disabled-color;\n\n\n//== Jumbotron\n//\n//##\n\n@jumbotron-padding: 30px;\n@jumbotron-color: inherit;\n@jumbotron-bg: @gray-lighter;\n@jumbotron-heading-color: inherit;\n@jumbotron-font-size: ceil((@font-size-base * 1.5));\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text: #3c763d;\n@state-success-bg: #dff0d8;\n@state-success-border: darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text: #31708f;\n@state-info-bg: #d9edf7;\n@state-info-border: darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text: #8a6d3b;\n@state-warning-bg: #fcf8e3;\n@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text: #a94442;\n@state-danger-bg: #f2dede;\n@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Tooltips\n//\n//##\n\n//** Tooltip max width\n@tooltip-max-width: 200px;\n//** Tooltip text color\n@tooltip-color: #fff;\n//** Tooltip background color\n@tooltip-bg: #000;\n@tooltip-opacity: .9;\n\n//** Tooltip arrow width\n@tooltip-arrow-width: 5px;\n//** Tooltip arrow color\n@tooltip-arrow-color: @tooltip-bg;\n\n\n//== Popovers\n//\n//##\n\n//** Popover body background color\n@popover-bg: #fff;\n//** Popover maximum width\n@popover-max-width: 276px;\n//** Popover border color\n@popover-border-color: rgba(0,0,0,.2);\n//** Popover fallback border color\n@popover-fallback-border-color: #ccc;\n\n//** Popover title background color\n@popover-title-bg: darken(@popover-bg, 3%);\n\n//** Popover arrow width\n@popover-arrow-width: 10px;\n//** Popover arrow color\n@popover-arrow-color: #fff;\n\n//** Popover outer arrow width\n@popover-arrow-outer-width: (@popover-arrow-width + 1);\n//** Popover outer arrow color\n@popover-arrow-outer-color: rgba(0,0,0,.25);\n//** Popover outer arrow fallback color\n@popover-arrow-outer-fallback-color: #999;\n\n\n//== Labels\n//\n//##\n\n//** Default label background color\n@label-default-bg: @gray-light;\n//** Primary label background color\n@label-primary-bg: @brand-primary;\n//** Success label background color\n@label-success-bg: @brand-success;\n//** Info label background color\n@label-info-bg: @brand-info;\n//** Warning label background color\n@label-warning-bg: @brand-warning;\n//** Danger label background color\n@label-danger-bg: @brand-danger;\n\n//** Default label text color\n@label-color: #fff;\n//** Default text color of a linked label\n@label-link-hover-color: #fff;\n\n\n//== Modals\n//\n//##\n\n//** Padding applied to the modal body\n@modal-inner-padding: 20px;\n\n//** Padding applied to the modal title\n@modal-title-padding: 15px;\n//** Modal title line-height\n@modal-title-line-height: @line-height-base;\n\n//** Background color of modal content area\n@modal-content-bg: #fff;\n//** Modal content border color\n@modal-content-border-color: rgba(0,0,0,.2);\n//** Modal content border color **for IE8**\n@modal-content-fallback-border-color: #999;\n\n//** Modal backdrop background color\n@modal-backdrop-bg: #000;\n//** Modal backdrop opacity\n@modal-backdrop-opacity: .5;\n//** Modal header border color\n@modal-header-border-color: #e5e5e5;\n//** Modal footer border color\n@modal-footer-border-color: @modal-header-border-color;\n\n@modal-lg: 900px;\n@modal-md: 600px;\n@modal-sm: 300px;\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-padding: 15px;\n@alert-border-radius: @border-radius-base;\n@alert-link-font-weight: bold;\n\n@alert-success-bg: @state-success-bg;\n@alert-success-text: @state-success-text;\n@alert-success-border: @state-success-border;\n\n@alert-info-bg: @state-info-bg;\n@alert-info-text: @state-info-text;\n@alert-info-border: @state-info-border;\n\n@alert-warning-bg: @state-warning-bg;\n@alert-warning-text: @state-warning-text;\n@alert-warning-border: @state-warning-border;\n\n@alert-danger-bg: @state-danger-bg;\n@alert-danger-text: @state-danger-text;\n@alert-danger-border: @state-danger-border;\n\n\n//== Progress bars\n//\n//##\n\n//** Background color of the whole progress component\n@progress-bg: #f5f5f5;\n//** Progress bar text color\n@progress-bar-color: #fff;\n\n//** Default progress bar color\n@progress-bar-bg: @brand-primary;\n//** Success progress bar color\n@progress-bar-success-bg: @brand-success;\n//** Warning progress bar color\n@progress-bar-warning-bg: @brand-warning;\n//** Danger progress bar color\n@progress-bar-danger-bg: @brand-danger;\n//** Info progress bar color\n@progress-bar-info-bg: @brand-info;\n\n\n//== List group\n//\n//##\n\n//** Background color on `.list-group-item`\n@list-group-bg: #fff;\n//** `.list-group-item` border color\n@list-group-border: #ddd;\n//** List group border radius\n@list-group-border-radius: @border-radius-base;\n\n//** Background color of single list elements on hover\n@list-group-hover-bg: #f5f5f5;\n//** Text color of active list elements\n@list-group-active-color: @component-active-color;\n//** Background color of active list elements\n@list-group-active-bg: @component-active-bg;\n//** Border color of active list elements\n@list-group-active-border: @list-group-active-bg;\n@list-group-active-text-color: lighten(@list-group-active-bg, 40%);\n\n@list-group-link-color: #555;\n@list-group-link-heading-color: #333;\n\n\n//== Panels\n//\n//##\n\n@panel-bg: #fff;\n@panel-body-padding: 15px;\n@panel-border-radius: @border-radius-base;\n\n//** Border color for elements within panels\n@panel-inner-border: #ddd;\n@panel-footer-bg: #f5f5f5;\n\n@panel-default-text: @gray-dark;\n@panel-default-border: #ddd;\n@panel-default-heading-bg: #f5f5f5;\n\n@panel-primary-text: #fff;\n@panel-primary-border: @brand-primary;\n@panel-primary-heading-bg: @brand-primary;\n\n@panel-success-text: @state-success-text;\n@panel-success-border: @state-success-border;\n@panel-success-heading-bg: @state-success-bg;\n\n@panel-info-text: @state-info-text;\n@panel-info-border: @state-info-border;\n@panel-info-heading-bg: @state-info-bg;\n\n@panel-warning-text: @state-warning-text;\n@panel-warning-border: @state-warning-border;\n@panel-warning-heading-bg: @state-warning-bg;\n\n@panel-danger-text: @state-danger-text;\n@panel-danger-border: @state-danger-border;\n@panel-danger-heading-bg: @state-danger-bg;\n\n\n//== Thumbnails\n//\n//##\n\n//** Padding around the thumbnail image\n@thumbnail-padding: 4px;\n//** Thumbnail background color\n@thumbnail-bg: @body-bg;\n//** Thumbnail border color\n@thumbnail-border: #ddd;\n//** Thumbnail border radius\n@thumbnail-border-radius: @border-radius-base;\n\n//** Custom text color for thumbnail captions\n@thumbnail-caption-color: @text-color;\n//** Padding around the thumbnail caption\n@thumbnail-caption-padding: 9px;\n\n\n//== Wells\n//\n//##\n\n@well-bg: #f5f5f5;\n@well-border: darken(@well-bg, 7%);\n\n\n//== Badges\n//\n//##\n\n@badge-color: #fff;\n//** Linked badge text color on hover\n@badge-link-hover-color: #fff;\n@badge-bg: @gray-light;\n\n//** Badge text color in active nav link\n@badge-active-color: @link-color;\n//** Badge background color in active nav link\n@badge-active-bg: #fff;\n\n@badge-font-weight: bold;\n@badge-line-height: 1;\n@badge-border-radius: 10px;\n\n\n//== Breadcrumbs\n//\n//##\n\n@breadcrumb-padding-vertical: 8px;\n@breadcrumb-padding-horizontal: 15px;\n//** Breadcrumb background color\n@breadcrumb-bg: #f5f5f5;\n//** Breadcrumb text color\n@breadcrumb-color: #ccc;\n//** Text color of current page in the breadcrumb\n@breadcrumb-active-color: @gray-light;\n//** Textual separator for between breadcrumb elements\n@breadcrumb-separator: \"/\";\n\n\n//== Carousel\n//\n//##\n\n@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color: #fff;\n@carousel-control-width: 15%;\n@carousel-control-opacity: .5;\n@carousel-control-font-size: 20px;\n\n@carousel-indicator-active-bg: #fff;\n@carousel-indicator-border-color: #fff;\n\n@carousel-caption-color: #fff;\n\n\n//== Close\n//\n//##\n\n@close-font-weight: bold;\n@close-color: #000;\n@close-text-shadow: 0 1px 0 #fff;\n\n\n//== Code\n//\n//##\n\n@code-color: #c7254e;\n@code-bg: #f9f2f4;\n\n@kbd-color: #fff;\n@kbd-bg: #333;\n\n@pre-bg: #f5f5f5;\n@pre-color: @gray-dark;\n@pre-border-color: #ccc;\n@pre-scrollable-max-height: 340px;\n\n\n//== Type\n//\n//##\n\n//** Text muted color\n@text-muted: @gray-light;\n//** Abbreviations and acronyms border color\n@abbr-border-color: @gray-light;\n//** Headings small color\n@headings-small-color: @gray-light;\n//** Blockquote small color\n@blockquote-small-color: @gray-light;\n//** Blockquote border color\n@blockquote-border-color: @gray-lighter;\n//** Page header border color\n@page-header-border-color: @gray-lighter;\n\n\n//== Miscellaneous\n//\n//##\n\n//** Horizontal line color.\n@hr-border: @gray-lighter;\n\n//** Horizontal offset for forms and lists.\n@component-offset-horizontal: 180px;\n\n\n//== Container sizes\n//\n//## Define the maximum width of `.container` for different screen sizes.\n\n// Small screen / tablet\n@container-tablet: ((720px + @grid-gutter-width));\n//** For `@screen-sm-min` and up.\n@container-sm: @container-tablet;\n\n// Medium screen / desktop\n@container-desktop: ((940px + @grid-gutter-width));\n//** For `@screen-md-min` and up.\n@container-md: @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop: ((1140px + @grid-gutter-width));\n//** For `@screen-lg-min` and up.\n@container-lg: @container-large-desktop;\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 200;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small { font-size: 85%; }\n\n// Undo browser default styling\ncite { font-style: normal; }\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n\n &:first-child {\n padding-left: 0;\n }\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n .dl-horizontal {\n dt {\n float: left;\n width: (@component-offset-horizontal - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @component-offset-horizontal;\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: (@font-size-base * 1.25);\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n content: \"\";\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n white-space: nowrap;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid-columns-float(xs);\n.make-grid(@grid-columns, xs, width);\n.make-grid(@grid-columns, xs, pull);\n.make-grid(@grid-columns, xs, push);\n.make-grid(@grid-columns, xs, offset);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid-columns-float(sm);\n .make-grid(@grid-columns, sm, width);\n .make-grid(@grid-columns, sm, pull);\n .make-grid(@grid-columns, sm, push);\n .make-grid(@grid-columns, sm, offset);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid-columns-float(md);\n .make-grid(@grid-columns, md, width);\n .make-grid(@grid-columns, md, pull);\n .make-grid(@grid-columns, md, push);\n .make-grid(@grid-columns, md, offset);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid-columns-float(lg);\n .make-grid(@grid-columns, lg, width);\n .make-grid(@grid-columns, lg, pull);\n .make-grid(@grid-columns, lg, push);\n .make-grid(@grid-columns, lg, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n max-width: 100%;\n background-color: @table-bg;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n > td,\n > th {\n background-color: @table-bg-accent;\n }\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n > td,\n > th {\n background-color: @table-bg-hover;\n }\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n .table-responsive {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n overflow-x: scroll;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n -webkit-overflow-scrolling: touch;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: -webkit-min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; /* IE8-9 */\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n // Note: HTML5 says that controls under a fieldset > legend:first-child won't\n // be disabled if the fieldset is disabled. Due to implementation difficulty,\n // we don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n// Special styles for iOS date input\n//\n// In Mobile Safari, date inputs require a pixel line-height that matches the\n// given height of the input.\ninput[type=\"date\"] {\n line-height: @input-height-base;\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n padding-left: 20px;\n label {\n display: inline;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n float: left;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n\n // Feedback icon (requires .glyphicon classes)\n .form-control-feedback {\n position: absolute;\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n right: 0;\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n }\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match (which also avoids\n // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n vertical-align: middle;\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n float: none;\n margin-left: 0;\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of labels, radios, and checkboxes\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n .form-control-static {\n padding-top: (@padding-base-vertical + 1);\n }\n\n // Only right align form labels here when the columns stop stacking\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n right: (@grid-gutter-width / 2);\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &:focus {\n .tab-focus();\n }\n\n &:hover,\n &:focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n cursor: pointer;\n border-radius: 0;\n\n &,\n &:active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n padding-left: 0;\n padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n &.in {\n display: block;\n }\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition(height .35s ease);\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: ~\"url('@{icon-font-path}@{icon-font-name}.eot')\";\n src: ~\"url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype')\",\n ~\"url('@{icon-font-path}@{icon-font-name}.woff') format('woff')\",\n ~\"url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype')\",\n ~\"url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg')\";\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base solid;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: not-allowed;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n &:focus {\n // Remove focus outline when dropdown JS adds it after closing the menu\n outline: none;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { .btn-xs(); }\n.btn-group-sm > .btn { .btn-sm(); }\n.btn-group-lg > .btn { .btn-lg(); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n display: none;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n max-height: @navbar-collapse-max-height;\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @line-height-computed;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: none;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: 0;\n }\n }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: not-allowed;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: not-allowed;\n }\n }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n &[href] {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n .btn-xs & {\n top: 0;\n padding: 1px 5px;\n }\n}\n\n// Hover state, but only for links\na.badge {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n .container & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n > img,\n a > img {\n .img-responsive();\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n > .pull-left {\n margin-right: 10px;\n }\n > .pull-right {\n margin-left: 10px;\n }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @list-group-hover-bg;\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n &:first-child {\n border-top: 0;\n }\n &:last-child {\n border-bottom: 0;\n }\n }\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n &:first-child > th,\n &:first-child > td {\n border-top: 0;\n }\n &:last-child > th,\n &:last-child > td {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Optional heading\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: 10px 15px;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n overflow: hidden; // crop contents when collapsed\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: auto;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n margin-top: 15px;\n padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n .modal-lg { width: @modal-lg; }\n\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -10px; }\n &.right { margin-left: 10px; }\n &.bottom { margin-top: 10px; }\n &.left { margin-left: -10px; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n .img-responsive();\n line-height: 1;\n }\n }\n\n > .active,\n > .next,\n > .prev { display: block; }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: none;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n margin-left: -10px;\n font-family: serif;\n }\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicons-chevron-left,\n .glyphicons-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n margin-left: -15px;\n font-size: 30px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n.visible-xs {\n .responsive-invisibility();\n\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-sm {\n .responsive-invisibility();\n\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-md {\n .responsive-invisibility();\n\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-lg {\n .responsive-invisibility();\n\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n"]}
1
+{"version":3,"file":"bootstrap.css","sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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;EAAW,kBAAA;EHoR9C;AGnRmC;EAAW,kBAAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EA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A;Efk8CH;Ae97CC;EACE,YAAA;Efg8CH;Ael7CC;EACE,mBAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,2BAAA;Ef07CH;Ae37CC;EACE,kBAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,2BAAA;Efm8CH;Aep8CC;EACE,kBAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,2BAAA;Ef48CH;Ae78CC;EACE,kBAAA;Ef+8CH;Aeh9CC;EACE,2BAAA;Efk9CH;Aen9CC;EACE,0BAAA;Efq9CH;Aet9CC;EACE,iBAAA;Efw9CH;Aa59CD;EE9BI;IACE,aAAA;If6/CH;Eet/CD;IACE,aAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,qBAAA;If8/CD;Ee//CD;IACE,YAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,qBAAA;IfugDD;EexgDD;IACE,YAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,oBAAA;IfyhDD;Ee3gDD;IACE,aAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,YAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,qBAAA;If4hDD;Ee7hDD;IACE,YAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,qBAAA;IfqiDD;EetiDD;IACE,YAAA;IfwiDD;EeziDD;IACE,qBAAA;If2iDD;Ee5iDD;IACE,oBAAA;If8iDD;Ee1iDD;IACE,aAAA;If4iDD;Ee5jDD;IACE,YAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,oBAAA;IfokDD;EerkDD;IACE,WAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,oBAAA;If6kDD;Ee9kDD;IACE,WAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,oBAAA;IfslDD;EevlDD;IACE,WAAA;IfylDD;Ee1lDD;IACE,oBAAA;If4lDD;Ee7lDD;IACE,mBAAA;If+lDD;Ee3lDD;IACE,YAAA;If6lDD;Ee/kDD;IACE,mBAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,2BAAA;IfulDD;EexlDD;IACE,kBAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,2BAAA;IfgmDD;EejmDD;IACE,kBAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,2BAAA;IfymDD;Ee1mDD;IACE,kBAAA;If4mDD;Ee7mDD;IACE,2BAAA;If+mDD;EehnDD;IACE,0BAAA;IfknDD;EennDD;IACE,iBAAA;IfqnDD;EACF;AajnDD;EEvCI;IACE,aAAA;If2pDH;EeppDD;IACE,aAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,qBAAA;If4pDD;Ee7pDD;IACE,YAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,qBAAA;IfqqDD;EetqDD;IACE,YAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,oBAAA;IfurDD;EezqDD;IACE,aAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,YAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,qBAAA;If0rDD;Ee3rDD;IACE,YAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,qBAAA;IfmsDD;EepsDD;IACE,YAAA;IfssDD;EevsDD;IACE,qBAAA;IfysDD;Ee1sDD;IACE,oBAAA;If4sDD;EexsDD;IACE,aAAA;If0sDD;Ee1tDD;IACE,YAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,oBAAA;IfkuDD;EenuDD;IACE,WAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,oBAAA;If2uDD;Ee5uDD;IACE,WAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,oBAAA;IfovDD;EervDD;IACE,WAAA;IfuvDD;EexvDD;IACE,oBAAA;If0vDD;Ee3vDD;IACE,mBAAA;If6vDD;EezvDD;IACE,YAAA;If2vDD;Ee7uDD;IACE,mBAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,2BAAA;IfqvDD;EetvDD;IACE,kBAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,2BAAA;If8vDD;Ee/vDD;IACE,kBAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,2BAAA;IfuwDD;EexwDD;IACE,kBAAA;If0wDD;Ee3wDD;IACE,2BAAA;If6wDD;Ee9wDD;IACE,0BAAA;IfgxDD;EejxDD;IACE,iBAAA;IfmxDD;EACF;AaxwDD;EE9CI;IACE,aAAA;IfyzDH;EelzDD;IACE,aAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,qBAAA;If0zDD;Ee3zDD;IACE,YAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,qBAAA;Ifm0DD;Eep0DD;IACE,YAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,oBAAA;Ifq1DD;Eev0DD;IACE,aAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,YAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,qBAAA;Ifw1DD;Eez1DD;IACE,YAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,qBAAA;Ifi2DD;Eel2DD;IACE,YAAA;Ifo2DD;Eer2DD;IACE,qBAAA;Ifu2DD;Eex2DD;IACE,oBAAA;If02DD;Eet2DD;IACE,aAAA;Ifw2DD;Eex3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AAA;EACI,uBAAA;ErBqsFT;AoB9qFD;EClBI,gBAAA;EACA,2BAAA;ErBmsFH;AoB/qFD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuuFD;AqBruFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuuFP;AqBruFC;;;EAGE,wBAAA;ErBuuFH;AqBluFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErB8uFT;AoBptFD;ECrBI,gBAAA;EACA,2BAAA;ErB4uFH;AoBptFD;ECzDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBgxFD;AqB9wFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBgxFP;AqB9wFC;;;EAGE,wBAAA;ErBgxFH;AqB3wFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBuxFT;AoBzvFD;ECzBI,gBAAA;EACA,2BAAA;ErBqxFH;AoBzvFD;EC7DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBg0FT;AoB9xFD;EC7BI,gBAAA;EACA,2BAAA;ErB8zFH;AoB9xFD;ECjEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBk2FD;AqBh2FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBk2FP;AqBh2FC;;;EAGE,wBAAA;ErBk2FH;AqB71FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBy2FT;AoBn0FD;ECjCI,gBAAA;EACA,2BAAA;ErBu2FH;AoBn0FD;ECrEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB24FD;AqBz4FC;;;;;EAKE,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB24FP;AqBz4FC;;;EAGE,wBAAA;ErB24FH;AqBt4FG;;;;;;;;;;;;;;;EAKE,2BAAA;EACI,uBAAA;ErBk5FT;AoBx2FD;ECrCI,gBAAA;EACA,2BAAA;ErBg5FH;AoBn2FD;EACE,gBAAA;EACA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","sourcesContent":[null,"/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n * {\n text-shadow: none !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links for images, or javascript/internal links\n a[href^=\"javascript:\"]:after,\n a[href^=\"#\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .table {\n td,\n th {\n background-color: #fff !important;\n }\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n &::-moz-placeholder { color: @color; // Firefox\n opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n width: 100% \\9; // Force IE10 and below to size SVG images correctly\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\n// Undo browser default styling\ncite {\n font-style: normal;\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n content: \"\";\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) when (@index = 1) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n > td,\n > th {\n background-color: @table-bg-accent;\n }\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n > td,\n > th {\n background-color: @table-bg-hover;\n }\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n overflow-x: auto;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n -webkit-overflow-scrolling: touch;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: not-allowed;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned.\n// As a workaround, we set a pixel line-height that matches the\n// given height of the input. Since this fucks up everything else, we have to\n// appropriately reset it for Internet Explorer and the size variations.\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n line-height: @input-height-base;\n // IE8+ misaligns the text within date inputs, so we reset\n line-height: @line-height-base ~\"\\0\";\n\n &.input-sm {\n line-height: @input-height-small;\n }\n &.input-lg {\n line-height: @input-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n min-height: @line-height-computed; // clear the floating input if there is no label text\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: not-allowed;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: not-allowed;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n}\n.input-lg + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n\n// Reposition feedback icon if label is hidden with \"screenreader only\" state\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match (which also avoids\n // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n top: 0;\n right: (@grid-gutter-width / 2);\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n }\n }\n .form-control {\n &:extend(.input-lg);\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n }\n }\n .form-control {\n &:extend(.input-sm);\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: not-allowed;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n cursor: pointer;\n border-radius: 0;\n\n &,\n &:active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: underline;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition(height .35s ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base solid;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: not-allowed;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n &:focus {\n // Remove focus outline when dropdown JS adds it after closing the menu\n outline: 0;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `opacity`. We cannot\n// use `display: none;` or `visibility: hidden;` as that also hides the popover.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 for more.\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n position: absolute;\n z-index: -1;\n .opacity(0);\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n .translate3d(0, 0, 0);\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n\n // Outdent the form if last child to line up with content down the page\n &.navbar-right:last-child {\n margin-right: 0;\n }\n }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n .translate3d(0, 0, 0);\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: not-allowed;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: not-allowed;\n }\n }\n\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n \n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n .btn-xs & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n a.list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n// Account for lower percentages\n.progress-bar {\n &[aria-valuenow=\"1\"],\n &[aria-valuenow=\"2\"] {\n min-width: 30px;\n }\n\n &[aria-valuenow=\"0\"] {\n color: @gray-light;\n min-width: 30px;\n background-color: transparent;\n background-image: none;\n box-shadow: none;\n }\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n","// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n > .pull-left {\n margin-right: 10px;\n }\n > .pull-right {\n margin-left: 10px;\n }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n\n // Align badges within list items\n > .badge {\n float: right;\n }\n > .badge + .badge {\n margin-right: 5px;\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n + .panel-collapse > .panel-body {\n border-top: 1px solid @panel-inner-border;\n }\n }\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n\n // Modifier class for 16:9 aspect ratio\n &.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n }\n\n // Modifier class for 4:3 aspect ratio\n &.embed-responsive-4by3 {\n padding-bottom: 75%;\n }\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate3d(0, -25%, 0);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate3d(0, 0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n visibility: visible;\n font-size: @font-size-small;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n text-align: left; // Reset given new insertion method\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 18px;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]}
securis/src/main/resources/static/css/bootstrap.min.css
....@@ -1,7 +1,5 @@
11 /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
33 * Copyright 2011-2014 Twitter, Inc.
44 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- */
6
-
7
-/*! normalize.css v3.0.0 | MIT License | git.io/normalize */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,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.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:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-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]{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;-moz-box-sizing:content-box;-webkit-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 silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]: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}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-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:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;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{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-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}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:400;line-height:1;color:#999}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:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{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}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}.list-inline>li:first-child{padding-left:0}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:700}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 #999}.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.428571429;color:#999}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'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.428571429}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;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.66666666666666%}.col-xs-10{width:83.33333333333334%}.col-xs-9{width:75%}.col-xs-8{width:66.66666666666666%}.col-xs-7{width:58.333333333333336%}.col-xs-6{width:50%}.col-xs-5{width:41.66666666666667%}.col-xs-4{width:33.33333333333333%}.col-xs-3{width:25%}.col-xs-2{width:16.666666666666664%}.col-xs-1{width:8.333333333333332%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666666666666%}.col-xs-pull-10{right:83.33333333333334%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666666666666%}.col-xs-pull-7{right:58.333333333333336%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666666666667%}.col-xs-pull-4{right:33.33333333333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.666666666666664%}.col-xs-pull-1{right:8.333333333333332%}.col-xs-pull-0{right:0}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666666666666%}.col-xs-push-10{left:83.33333333333334%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666666666666%}.col-xs-push-7{left:58.333333333333336%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666666666667%}.col-xs-push-4{left:33.33333333333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.666666666666664%}.col-xs-push-1{left:8.333333333333332%}.col-xs-push-0{left:0}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666666666666%}.col-xs-offset-10{margin-left:83.33333333333334%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666666666666%}.col-xs-offset-7{margin-left:58.333333333333336%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666666666667%}.col-xs-offset-4{margin-left:33.33333333333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.666666666666664%}.col-xs-offset-1{margin-left:8.333333333333332%}.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.66666666666666%}.col-sm-10{width:83.33333333333334%}.col-sm-9{width:75%}.col-sm-8{width:66.66666666666666%}.col-sm-7{width:58.333333333333336%}.col-sm-6{width:50%}.col-sm-5{width:41.66666666666667%}.col-sm-4{width:33.33333333333333%}.col-sm-3{width:25%}.col-sm-2{width:16.666666666666664%}.col-sm-1{width:8.333333333333332%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-0{right:0}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666666666666%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-0{left:0}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666666666666%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-1{margin-left:8.333333333333332%}.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.66666666666666%}.col-md-10{width:83.33333333333334%}.col-md-9{width:75%}.col-md-8{width:66.66666666666666%}.col-md-7{width:58.333333333333336%}.col-md-6{width:50%}.col-md-5{width:41.66666666666667%}.col-md-4{width:33.33333333333333%}.col-md-3{width:25%}.col-md-2{width:16.666666666666664%}.col-md-1{width:8.333333333333332%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666666666666%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-0{right:0}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666666666666%}.col-md-push-10{left:83.33333333333334%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666666666666%}.col-md-push-7{left:58.333333333333336%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666666666667%}.col-md-push-4{left:33.33333333333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.666666666666664%}.col-md-push-1{left:8.333333333333332%}.col-md-push-0{left:0}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666666666666%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-1{margin-left:8.333333333333332%}.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.66666666666666%}.col-lg-10{width:83.33333333333334%}.col-lg-9{width:75%}.col-lg-8{width:66.66666666666666%}.col-lg-7{width:58.333333333333336%}.col-lg-6{width:50%}.col-lg-5{width:41.66666666666667%}.col-lg-4{width:33.33333333333333%}.col-lg-3{width:25%}.col-lg-2{width:16.666666666666664%}.col-lg-1{width:8.333333333333332%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-0{right:0}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666666666666%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-0{left:0}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666666666666%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-0{margin-left:0}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{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.428571429;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-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{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.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.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.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.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.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.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;margin-bottom:5px;font-weight:700}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.428571429;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;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,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-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,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control:-moz-placeholder{color:#999}.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{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.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}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(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{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(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{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(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}.form-control-static{margin-bottom: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 .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.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}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.428571429;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.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,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.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: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:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.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: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:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.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: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:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.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: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:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.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: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:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.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: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:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.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:#2a6496;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:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.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;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@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.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:400;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{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"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.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;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);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:400;line-height:1.428571429;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:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.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.428571429;color:#999}.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 solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@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:focus,.btn-group-vertical>.btn:focus{outline:0}.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-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-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-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.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,.125);box-shadow:inset 0 3px 5px rgba(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%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display: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{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.33;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:400;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{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:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;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:#428bca}.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.428571429;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:#428bca}.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{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;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}}.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;font-size:18px;line-height:20px;height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@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;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-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.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,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.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 .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@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-form.navbar-right:last-child{margin-right:-15px}}.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{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}.navbar-text.navbar-right:last-child{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-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.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:#999}.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:#999}.navbar-inverse .navbar-link:hover{color:#fff}.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:#999}.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.428571429;text-decoration:none;color:#428bca;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{color:#2a6496;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:#428bca;border-color:#428bca;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:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.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}.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:#999;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.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:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding: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}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .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.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .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}}@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,.1);box-shadow:inset 0 1px 2px rgba(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:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.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}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.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{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.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{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.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{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.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,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group .list-group-item:first-child{border-top:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.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>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{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>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,.panel>.table-bordered>tfoot>tr:first-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:first-child>th,.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>tfoot>tr:first-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:first-child>td{border-top:0}.panel>.table-bordered>thead>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:last-child>th,.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,.panel>.table-bordered>thead>tr:last-child>td,.panel>.table-responsive>.table-bordered>thead>tr:last-child>td,.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{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.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{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-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{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-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.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-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-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-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-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.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,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(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:700;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:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;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%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.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,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);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.428571429px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;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}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;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;text-decoration:none;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;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right: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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.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;font-weight:400;line-height:18px;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,.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,.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,.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,.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;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}.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,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(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,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(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%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;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,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicons-chevron-left,.carousel-control .glyphicons-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix: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,.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;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,tr.visible-xs,th.visible-xs,td.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}.visible-sm,tr.visible-sm,th.visible-sm,td.visible-sm{display:none!important}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}.visible-md,tr.visible-md,th.visible-md,td.visible-md{display:none!important}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}.visible-lg,tr.visible-lg,th.visible-lg,td.visible-lg{display:none!important}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs,tr.hidden-xs,th.hidden-xs,td.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,tr.hidden-sm,th.hidden-sm,td.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md,tr.hidden-md,th.hidden-md,td.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg,tr.hidden-lg,th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print,tr.visible-print,th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print,tr.hidden-print,th.hidden-print,td.hidden-print{display:none!important}}
5
+ *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border: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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]: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}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!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.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:400;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{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"}*{-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:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;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;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;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}.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;padding:0;margin:-1px;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}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:400;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%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.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:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{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;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;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;text-align:right;border-right:5px solid #eee;border-left:0}.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'}blockquote:before,blockquote:after{content:""}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,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;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{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-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-right:15px;padding-left: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}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-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.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}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-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{min-width:0;padding:0;margin:0;border: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:700}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,.075);box-shadow:inset 0 1px 1px rgba(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,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;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}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{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}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.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{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.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{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.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{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.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 .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{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.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{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.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: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:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.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: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:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.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: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:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.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: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:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.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: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:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.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: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{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.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:#2a6496;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.33;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:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.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;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.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:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.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;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.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:focus,.btn-group-vertical>.btn:focus{outline:0}.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-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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(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-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.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-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;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>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left: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.33;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:400;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-top-right-radius:0;border-bottom-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-top-left-radius:0;border-bottom-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{margin-left:-1px}.nav{padding-left:0;margin-bottom: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;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.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;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.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:#428bca}.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{margin-bottom:5px;text-align:center}.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-left-radius:0;border-top-right-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{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.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-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-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;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@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;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;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-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@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 .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}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{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-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{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{color:#555;background-color:#e7e7e7}@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:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.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{color:#fff;background-color:#080808}@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:#777}.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:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.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{padding:0 5px;color:#ccc;content:"/\00a0"}.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;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;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;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.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;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;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:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.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:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding: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{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left: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:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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:700}.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{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.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{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(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:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.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-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.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:#428bca;border-color:#428bca}.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:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.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{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.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{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.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{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.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,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-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{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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.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:first-child,.panel>.table-responsive:first-child>.table: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 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{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{margin-bottom:0;border: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{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:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.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{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.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,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(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:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,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;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.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-bottom:0;margin-left:5px}.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,.5);box-shadow:0 5px 15px rgba(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-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;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;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right: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;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(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{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;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{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";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,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-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}.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;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;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;margin-top:-10px;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%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(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{right:20%;left: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{display:table;content:" "}.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-right:auto;margin-left: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;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-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}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}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}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}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}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}}
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.eot
Binary files differ
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.svg
....@@ -28,12 +28,12 @@
2828 <glyph unicode="&#x205f;" horiz-adv-x="326" />
2929 <glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
3030 <glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
31
-<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
31
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
32
+<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
3233 <glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
3334 <glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
34
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
3535 <glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
36
-<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q17 -55 85.5 -75.5t147.5 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
36
+<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
3737 <glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
3838 <glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
3939 <glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
....@@ -46,7 +46,7 @@
4646 <glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
4747 <glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
4848 <glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
49
-<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
49
+<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
5050 <glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
5151 <glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
5252 <glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
....@@ -58,7 +58,7 @@
5858 <glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
5959 <glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
6060 <glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
61
-<glyph unicode="&#xe028;" d="M0 25v475l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
61
+<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
6262 <glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
6363 <glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
6464 <glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
....@@ -71,14 +71,14 @@
7171 <glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
7272 <glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
7373 <glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
74
-<glyph unicode="&#xe041;" d="M1 700v475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
75
-<glyph unicode="&#xe042;" d="M2 700v475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
74
+<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
75
+<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
7676 <glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
7777 <glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
7878 <glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
7979 <glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
8080 <glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
81
-<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v70h471q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
81
+<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
8282 <glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
8383 <glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
8484 <glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
....@@ -93,10 +93,10 @@
9393 <glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
9494 <glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
9595 <glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
96
-<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
96
+<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
9797 <glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
9898 <glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
99
-<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l566 567l-136 137l-430 -431l-147 147z" />
99
+<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
100100 <glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
101101 <glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
102102 <glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
....@@ -110,13 +110,13 @@
110110 <glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
111111 <glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
112112 <glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
113
-<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
114
-<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM300 500h600v200h-600v-200z" />
115
-<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141z" />
113
+<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
114
+<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
115
+<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
116116 <glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
117
-<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM363 700h144q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26 q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-105 0 -172 -56t-67 -183zM500 300h200v100h-200v-100z" />
118
-<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -300t-217.5 -218t-299.5 -80t-299.5 80t-217.5 218t-80 300zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
119
-<glyph unicode="&#xe087;" d="M0 500v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200 v-206q149 48 201 206h-201v200h200q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210z" />
117
+<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
118
+<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
119
+<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
120120 <glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
121121 <glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
122122 <glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
....@@ -127,14 +127,14 @@
127127 <glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
128128 <glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
129129 <glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
130
-<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
131
-<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100z M100 0h400v400h-400v-400zM200 900q-3 0 14 48t35 96l18 47l214 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
130
+<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
131
+<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
132132 <glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
133133 <glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
134134 <glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
135135 <glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
136
-<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
137
-<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -21 -13 -29t-32 1l-94 78h-222l-94 -78q-19 -9 -32 -1t-13 29v64 q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
136
+<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
137
+<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
138138 <glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
139139 <glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
140140 <glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
....@@ -148,33 +148,33 @@
148148 <glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
149149 <glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
150150 <glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
151
-<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM99 500v250v5q0 13 0.5 18.5t2.5 13t8 10.5t15 3h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35q-56 337 -56 351z M1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
152
-<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23t-167.5 -37 t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
151
+<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
152
+<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
153153 <glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
154
-<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q123 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 212l100 213h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
155
-<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
154
+<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
155
+<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
156156 <glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
157
-<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 37h302l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 16.5 -10.5t26 -26t16.5 -36.5v-526q0 -13 -85.5 -93.5t-93.5 -80.5h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l106 89v502l-342 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM999 201v600h200v-600h-200z" />
158
-<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
159
-<glyph unicode="&#xe130;" d="M1 585q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85l-1 -302q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM76 565l237 339h503l89 -100v-294l-340 -130 q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
160
-<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 500h300l-2 -194l402 294l-402 298v-197h-298v-201z" />
161
-<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l400 -294v194h302v201h-300v197z" />
162
-<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
163
-<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
164
-<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -34 5.5 -93t7.5 -87q0 -9 17 -44t16 -60q12 0 23 -5.5 t23 -15t20 -13.5q20 -10 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55.5t-20 -57.5q12 -21 22.5 -34.5t28 -27t36.5 -17.5q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q101 -2 221 111q31 30 47 48t34 49t21 62q-14 9 -37.5 9.5t-35.5 7.5q-14 7 -49 15t-52 19 q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q8 16 22 22q6 -1 26 -1.5t33.5 -4.5t19.5 -13q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5 t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23 q-19 -3 -37 0q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -46 0t-45 -3q-20 -6 -51.5 -25.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79zM518 915q3 12 16 30.5t16 25.5q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -18 8 -42.5t16.5 -44 t9.5 -23.5q-6 1 -39 5t-53.5 10t-36.5 16z" />
157
+<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
158
+<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
159
+<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
160
+<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
161
+<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
162
+<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
163
+<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
164
+<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
165165 <glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
166166 <glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
167167 <glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
168168 <glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
169169 <glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
170
-<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM513 609q0 32 21 56.5t52 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-16 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5q-37 0 -62.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
171
-<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36 q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60l517 511 q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
172
-<glyph unicode="&#xe143;" d="M79 784q0 131 99 229.5t230 98.5q144 0 242 -129q103 129 245 129q130 0 227 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100l-84.5 84.5t-68 74t-60 78t-33.5 70.5t-15 78z M250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-106 48.5q-73 0 -131 -83l-118 -171l-114 174q-51 80 -124 80q-59 0 -108.5 -49.5t-49.5 -118.5z" />
173
-<glyph unicode="&#xe144;" d="M57 353q0 -94 66 -160l141 -141q66 -66 159 -66q95 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-12 12 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141l19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -18q46 -46 77 -99l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
170
+<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
171
+<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
172
+<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
173
+<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
174174 <glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
175175 <glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
176
-<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335l-27 7q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5v-307l64 -14 q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5zM700 237 q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
177
-<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -11 2.5 -24.5t5.5 -24t9.5 -26.5t10.5 -25t14 -27.5t14 -25.5 t15.5 -27t13.5 -24h242v-100h-197q8 -50 -2.5 -115t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10 t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5t-30 142.5h-221z" />
176
+<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
177
+<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
178178 <glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
179179 <glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
180180 <glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
....@@ -187,15 +187,15 @@
187187 <glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
188188 <glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
189189 <glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
190
-<glyph unicode="&#xe162;" d="M216 519q10 -19 32 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8l9 -1q13 0 26 16l538 630q15 19 6 36q-8 18 -32 16h-300q1 4 78 219.5t79 227.5q2 17 -6 27l-8 8h-9q-16 0 -25 -15q-4 -5 -98.5 -111.5t-228 -257t-209.5 -238.5q-17 -19 -7 -40z" />
190
+<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
191191 <glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
192192 <glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
193193 <glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
194194 <glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
195195 <glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
196196 <glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
197
-<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 401h700v699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
198
-<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l248 -237v700h-699zM900 150h100v50h-100v-50z" />
197
+<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
198
+<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
199199 <glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
200200 <glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
201201 <glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
....@@ -204,11 +204,11 @@
204204 <glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
205205 <glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
206206 <glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
207
-<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -117q-25 -16 -43.5 -50.5t-18.5 -65.5v-359z" />
207
+<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
208208 <glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
209209 <glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
210
-<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q16 17 13 40.5t-22 37.5l-192 136q-19 14 -45 12t-42 -19l-119 -118q-143 103 -267 227q-126 126 -227 268l118 118q17 17 20 41.5 t-11 44.5l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
211
-<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -15 -35.5t-35 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
210
+<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
211
+<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
212212 <glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
213213 <glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
214214 <glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
....@@ -221,9 +221,9 @@
221221 <glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
222222 <glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
223223 <glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
224
-<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86t85 208q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300 h200l-300 -300z" />
225
-<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104t60.5 178q0 121 -85 207.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
224
+<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
225
+<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
226226 <glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
227
-<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -12t1 -11q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
227
+<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
228228 </font>
229229 </defs></svg>
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf
Binary files differ
securis/src/main/resources/static/fonts/glyphicons-halflings-regular.woff
Binary files differ
securis/src/main/resources/static/js/admin.js
....@@ -7,6 +7,7 @@
77 401: "Unathorized action",
88 403: "Forbidden action",
99 500: "Server error",
10
+ 418: "Application error",
1011 404: "Element not found"
1112 }
1213
....@@ -21,9 +22,9 @@
2122 link : function(scope, element, attrs, ngModel) {
2223 if (!ngModel)
2324 return; // do nothing if no ng-model
24
- // TODO: Replace the hard-coded form ID by the
25
+ // TODO: Replace the hard-coded form ID ('catalogForm') by the
2526 // appropiate dynamic field
26
- scope.catalogForm[attrs.name] = scope.catalogForm['{{field.name}}'];
27
+ scope.catalogForm[attrs.name] = scope.catalogForm[scope.field.name];
2728 scope.catalogForm[attrs.name].$name = attrs.name;
2829 }
2930 };
....@@ -115,6 +116,8 @@
115116 return 'select';
116117 if (field.type === 'multiselect')
117118 return 'multiselect';
119
+ if (field.type === 'metadata')
120
+ return 'metadata';
118121 if (!field.multiline)
119122 return 'normal';
120123 if (field.multiline)
....@@ -161,6 +164,19 @@
161164
162165 }
163166 }
167
+
168
+ // Metadata management
169
+
170
+ $scope.createMetadataRow = function() {
171
+ if (!$scope.formu.metadata) {
172
+ $scope.formu.metadata = [];
173
+ }
174
+ $scope.formu.metadata.push({key: '', value: '', mandatory: true});
175
+ }
176
+ $scope.removeMetadataKey = function(row_md) {
177
+ $scope.formu.metadata.splice( $scope.formu.metadata.indexOf(row_md), 1 );
178
+ }
179
+
164180 } ]);
165181
166182 app.controller('CatalogListCtrl', [ '$scope', '$http', '$filter', 'Catalogs',
securis/src/main/resources/static/js/angular/angular-animate.min.js
....@@ -1,25 +1,30 @@
11 /*
2
- AngularJS v1.2.9
2
+ AngularJS v1.3.0-rc.5
33 (c) 2010-2014 Google, Inc. http://angularjs.org
44 License: MIT
55 */
6
-(function(H,f,s){'use strict';f.module("ngAnimate",["ng"]).factory("$$animateReflow",["$window","$timeout",function(f,D){var c=f.requestAnimationFrame||f.webkitRequestAnimationFrame||function(c){return D(c,10,!1)},x=f.cancelAnimationFrame||f.webkitCancelAnimationFrame||function(c){return D.cancel(c)};return function(k){var f=c(k);return function(){x(f)}}}]).config(["$provide","$animateProvider",function(S,D){function c(c){for(var f=0;f<c.length;f++){var k=c[f];if(k.nodeType==Y)return k}}var x=f.noop,
7
-k=f.forEach,ba=D.$$selectors,Y=1,l="$$ngAnimateState",L="ng-animate",n={running:!0};S.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement","$timeout","$rootScope","$document",function(E,H,s,I,u,r,O){function J(a){if(a){var h=[],e={};a=a.substr(1).split(".");(s.transitions||s.animations)&&a.push("");for(var b=0;b<a.length;b++){var g=a[b],c=ba[g];c&&!e[g]&&(h.push(H.get(c)),e[g]=!0)}return h}}function p(a,h,e,b,g,f,t){function n(a){z();if(!0===a)q();else{if(a=e.data(l))a.done=q,e.data(l,
8
-a);s(w,"after",q)}}function s(b,c,g){"after"==c?r():F();var f=c+"End";k(b,function(k,d){var G=function(){a:{var G=c+"Complete",a=b[d];a[G]=!0;(a[f]||x)();for(a=0;a<b.length;a++)if(!b[a][G])break a;g()}};"before"!=c||"enter"!=a&&"move"!=a?k[c]?k[f]=B?k[c](e,h,G):k[c](e,G):G():G()})}function E(b){e.triggerHandler("$animate:"+b,{event:a,className:h})}function F(){u(function(){E("before")},0,!1)}function r(){u(function(){E("after")},0,!1)}function z(){z.hasBeenRun||(z.hasBeenRun=!0,f())}function q(){if(!q.hasBeenRun){q.hasBeenRun=
9
-!0;var a=e.data(l);a&&(B?C(e):(a.closeAnimationTimeout=u(function(){C(e)},0,!1),e.data(l,a)));t&&u(t,0,!1)}}var A,v,p=c(e);p&&(A=p.className,v=A+" "+h);if(p&&M(v)){v=(" "+v).replace(/\s+/g,".");b||(b=g?g.parent():e.parent());v=J(v);var B="addClass"==a||"removeClass"==a;g=e.data(l)||{};if(ca(e,b)||0===v.length)z(),F(),r(),q();else{var w=[];B&&(g.disabled||g.running&&g.structural)||k(v,function(b){if(!b.allowCancel||b.allowCancel(e,a,h)){var c=b[a];"leave"==a?(b=c,c=null):b=b["before"+a.charAt(0).toUpperCase()+
10
-a.substr(1)];w.push({before:b,after:c})}});0===w.length?(z(),F(),r(),t&&u(t,0,!1)):(b=" "+A+" ",g.running&&(u.cancel(g.closeAnimationTimeout),C(e),K(g.animations),v=(A=B&&!g.structural)&&g.className==h&&a!=g.event,g.beforeComplete||v?(g.done||x)(!0):A&&(b="removeClass"==g.event?b.replace(" "+g.className+" "," "):b+g.className+" ")),A=" "+h+" ","addClass"==a&&0<=b.indexOf(A)||"removeClass"==a&&-1==b.indexOf(A)?(z(),F(),r(),t&&u(t,0,!1)):(e.addClass(L),e.data(l,{running:!0,event:a,className:h,structural:!B,
11
-animations:w,done:n}),s(w,"before",n)))}}else z(),F(),r(),q()}function R(a){a=c(a);k(a.querySelectorAll("."+L),function(a){a=f.element(a);var e=a.data(l);e&&(K(e.animations),C(a))})}function K(a){k(a,function(a){a.beforeComplete||(a.beforeEnd||x)(!0);a.afterComplete||(a.afterEnd||x)(!0)})}function C(a){c(a)==c(I)?n.disabled||(n.running=!1,n.structural=!1):(a.removeClass(L),a.removeData(l))}function ca(a,h){if(n.disabled)return!0;if(c(a)==c(I))return n.disabled||n.running;do{if(0===h.length)break;
12
-var e=c(h)==c(I),b=e?n:h.data(l),b=b&&(!!b.disabled||!!b.running);if(e||b)return b;if(e)break}while(h=h.parent());return!0}I.data(l,n);r.$$postDigest(function(){r.$$postDigest(function(){n.running=!1})});var N=D.classNameFilter(),M=N?function(a){return N.test(a)}:function(){return!0};return{enter:function(a,c,e,b){this.enabled(!1,a);E.enter(a,c,e);r.$$postDigest(function(){p("enter","ng-enter",a,c,e,x,b)})},leave:function(a,c){R(a);this.enabled(!1,a);r.$$postDigest(function(){p("leave","ng-leave",
13
-a,null,null,function(){E.leave(a)},c)})},move:function(a,c,e,b){R(a);this.enabled(!1,a);E.move(a,c,e);r.$$postDigest(function(){p("move","ng-move",a,c,e,x,b)})},addClass:function(a,c,e){p("addClass",c,a,null,null,function(){E.addClass(a,c)},e)},removeClass:function(a,c,e){p("removeClass",c,a,null,null,function(){E.removeClass(a,c)},e)},enabled:function(a,c){switch(arguments.length){case 2:if(a)C(c);else{var e=c.data(l)||{};e.disabled=!0;c.data(l,e)}break;case 1:n.disabled=!a;break;default:a=!n.disabled}return!!a}}}]);
14
-D.register("",["$window","$sniffer","$timeout","$$animateReflow",function(n,l,D,I){function u(d,a){P&&P();V.push(a);var y=c(d);d=f.element(y);W.push(d);var y=d.data(q),b=y.stagger,b=y.itemIndex*(Math.max(b.animationDelay,b.transitionDelay)||0);Q=Math.max(Q,(b+(y.maxDelay+y.maxDuration)*v)*aa);y.animationCount=B;P=I(function(){k(V,function(d){d()});var d=[],a=B;k(W,function(a){d.push(a)});D(function(){r(d,a);d=null},Q,!1);V=[];W=[];P=null;w={};Q=0;B++})}function r(d,a){k(d,function(d){(d=d.data(q))&&
15
-d.animationCount==a&&(d.closeAnimationFn||x)()})}function O(d,a){var c=a?w[a]:null;if(!c){var b=0,e=0,m=0,f=0,h,q,l,r;k(d,function(d){if(d.nodeType==Y){d=n.getComputedStyle(d)||{};l=d[g+$];b=Math.max(J(l),b);r=d[g+X];h=d[g+F];e=Math.max(J(h),e);q=d[t+F];f=Math.max(J(q),f);var a=J(d[t+$]);0<a&&(a*=parseInt(d[t+S],10)||1);m=Math.max(a,m)}});c={total:0,transitionPropertyStyle:r,transitionDurationStyle:l,transitionDelayStyle:h,transitionDelay:e,transitionDuration:b,animationDelayStyle:q,animationDelay:f,
16
-animationDuration:m};a&&(w[a]=c)}return c}function J(d){var a=0;d=f.isString(d)?d.split(/\s*,\s*/):[];k(d,function(d){a=Math.max(parseFloat(d)||0,a)});return a}function p(d){var a=d.parent(),b=a.data(z);b||(a.data(z,++Z),b=Z);return b+"-"+c(d).className}function R(d,a,b){var e=p(d),f=e+" "+a,m={},h=w[f]?++w[f].total:0;if(0<h){var l=a+"-stagger",m=e+" "+l;(e=!w[m])&&d.addClass(l);m=O(d,m);e&&d.removeClass(l)}b=b||function(d){return d()};d.addClass(a);b=b(function(){return O(d,f)});l=Math.max(b.transitionDelay,
17
-b.animationDelay);e=Math.max(b.transitionDuration,b.animationDuration);if(0===e)return d.removeClass(a),!1;var n="";0<b.transitionDuration?c(d).style[g+X]="none":c(d).style[t]="none 0s";k(a.split(" "),function(d,a){n+=(0<a?" ":"")+d+"-active"});d.data(q,{className:a,activeClassName:n,maxDuration:e,maxDelay:l,classes:a+" "+n,timings:b,stagger:m,itemIndex:h});return!0}function K(d){var a=g+X;d=c(d);d.style[a]&&0<d.style[a].length&&(d.style[a]="")}function C(d){var a=t;d=c(d);d.style[a]&&0<d.style[a].length&&
18
-(d.style[a]="")}function L(a,e,y){function f(b){a.off(v,g);a.removeClass(r);b=a;b.removeClass(e);b.removeData(q);b=c(a);for(var y in s)b.style.removeProperty(s[y])}function g(a){a.stopPropagation();var d=a.originalEvent||a;a=d.$manualTimeStamp||d.timeStamp||Date.now();d=parseFloat(d.elapsedTime.toFixed(A));Math.max(a-w,0)>=t&&d>=n&&y()}var m=a.data(q),h=c(a);if(-1!=h.className.indexOf(e)&&m){var k=m.timings,l=m.stagger,n=m.maxDuration,r=m.activeClassName,t=Math.max(k.transitionDelay,k.animationDelay)*
19
-aa,w=Date.now(),v=U+" "+T,u=m.itemIndex,p="",s=[];if(0<k.transitionDuration){var x=k.transitionPropertyStyle;-1==x.indexOf("all")&&(p+=b+"transition-property: "+x+";",p+=b+"transition-duration: "+k.transitionDurationStyle+";",s.push(b+"transition-property"),s.push(b+"transition-duration"))}0<u&&(0<l.transitionDelay&&0===l.transitionDuration&&(p+=b+"transition-delay: "+N(k.transitionDelayStyle,l.transitionDelay,u)+"; ",s.push(b+"transition-delay")),0<l.animationDelay&&0===l.animationDuration&&(p+=
20
-b+"animation-delay: "+N(k.animationDelayStyle,l.animationDelay,u)+"; ",s.push(b+"animation-delay")));0<s.length&&(k=h.getAttribute("style")||"",h.setAttribute("style",k+" "+p));a.on(v,g);a.addClass(r);m.closeAnimationFn=function(){f();y()};return f}y()}function N(a,b,c){var e="";k(a.split(","),function(a,d){e+=(0<d?",":"")+(c*b+parseInt(a,10))+"s"});return e}function M(a,b,c){if(R(a,b,c))return function(c){c&&(a.removeClass(b),a.removeData(q))}}function a(a,b,c){if(a.data(q))return L(a,b,c);a.removeClass(b);
21
-a.removeData(q);c()}function h(d,b,c){var e=M(d,b);if(e){var f=e;u(d,function(){K(d);C(d);f=a(d,b,c)});return function(a){(f||x)(a)}}c()}function e(a,b){var c="";a=f.isArray(a)?a:a.split(/\s+/);k(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var b="",g,T,t,U;H.ontransitionend===s&&H.onwebkittransitionend!==s?(b="-webkit-",g="WebkitTransition",T="webkitTransitionEnd transitionend"):(g="transition",T="transitionend");H.onanimationend===s&&H.onwebkitanimationend!==s?(b="-webkit-",t=
22
-"WebkitAnimation",U="webkitAnimationEnd animationend"):(t="animation",U="animationend");var $="Duration",X="Property",F="Delay",S="IterationCount",z="$$ngAnimateKey",q="$$ngAnimateCSS3Data",A=3,v=1.5,aa=1E3,B=0,w={},Z=0,V=[],W=[],P,Q=0;return{allowCancel:function(a,b,g){var h=(a.data(q)||{}).classes;if(!h||0<=["enter","leave","move"].indexOf(b))return!0;var l=a.parent(),m=f.element(c(a).cloneNode());m.attr("style","position:absolute; top:-9999px; left:-9999px");m.removeAttr("id");m.empty();k(h.split(" "),
23
-function(a){m.removeClass(a)});m.addClass(e(g,"addClass"==b?"-add":"-remove"));l.append(m);a=O(m);m.remove();return 0<Math.max(a.transitionDuration,a.animationDuration)},enter:function(a,b){return h(a,"ng-enter",b)},leave:function(a,b){return h(a,"ng-leave",b)},move:function(a,b){return h(a,"ng-move",b)},beforeAddClass:function(a,b,c){var f=M(a,e(b,"-add"),function(c){a.addClass(b);c=c();a.removeClass(b);return c});if(f)return u(a,function(){K(a);C(a);c()}),f;c()},addClass:function(b,c,f){return a(b,
24
-e(c,"-add"),f)},beforeRemoveClass:function(a,b,c){var f=M(a,e(b,"-remove"),function(c){var e=a.attr("class");a.removeClass(b);c=c();a.attr("class",e);return c});if(f)return u(a,function(){K(a);C(a);c()}),f;c()},removeClass:function(b,c,f){return a(b,e(c,"-remove"),f)}}}])}])})(window,window.angular);
6
+(function(L,f,U){'use strict';f.module("ngAnimate",["ng"]).directive("ngAnimateChildren",function(){return function(V,C,h){h=h.ngAnimateChildren;f.isString(h)&&0===h.length?C.data("$$ngAnimateChildren",!0):V.$watch(h,function(f){C.data("$$ngAnimateChildren",!!f)})}}).factory("$$animateReflow",["$$rAF","$document",function(f,C){return function(h){return f(function(){h()})}}]).config(["$provide","$animateProvider",function(V,C){function h(f){for(var k=0;k<f.length;k++){var h=f[k];if(1==h.nodeType)return h}}
7
+function M(f,k){return h(f)==h(k)}var p=f.noop,k=f.forEach,aa=C.$$selectors,D=f.isArray,ba=f.isString,t={running:!0};V.decorator("$animate",["$delegate","$$q","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","$document","$templateRequest",function(N,L,K,W,u,y,O,U,X){function x(a,d){var c=a.data("$$ngAnimateState")||{};d&&(c.running=!0,c.structural=!0,a.data("$$ngAnimateState",c));return c.disabled||c.running&&c.structural}function P(a){var d,c=L.defer();c.promise.$$cancelFn=function(){d&&
8
+d()};O.$$postDigest(function(){d=a(function(){c.resolve()})});return c.promise}function Q(a){if(D(a))return a;if(ba(a))return[a]}function R(a,d,c){c=c||{};var e={};k(c,function(b,a){k(a.split(" "),function(a){e[a]=b})});var f=Object.create(null);k((a.attr("class")||"").split(/\s+/),function(b){f[b]=!0});var g=[],l=[];k(d.classes,function(b,a){var c=f[a],d=e[a]||{};!1===b?(c||"addClass"==d.event)&&l.push(a):!0===b&&(c&&"removeClass"!=d.event||g.push(a))});return 0<g.length+l.length&&[g.join(" "),l.join(" ")]}
9
+function S(a){if(a){var d=[],c={};a=a.substr(1).split(".");(W.transitions||W.animations)&&d.push(K.get(aa[""]));for(var e=0;e<a.length;e++){var f=a[e],g=aa[f];g&&!c[f]&&(d.push(K.get(g)),c[f]=!0)}return d}}function Y(a,d,c){function e(b,a){var c=b[a],d=b["before"+a.charAt(0).toUpperCase()+a.substr(1)];if(c||d)return"leave"==a&&(d=c,c=null),q.push({event:a,fn:c}),m.push({event:a,fn:d}),!0}function f(d,s,z){var e=[];k(d,function(b){b.fn&&e.push(b)});var m=0;k(e,function(d,f){var w=function(){a:{if(s){(s[f]||
10
+p)();if(++m<e.length)break a;s=null}z()}};switch(d.event){case "setClass":s.push(d.fn(a,l,b,w));break;case "addClass":s.push(d.fn(a,l||c,w));break;case "removeClass":s.push(d.fn(a,b||c,w));break;default:s.push(d.fn(a,w))}});s&&0===s.length&&z()}var g=a[0];if(g){var l,b;D(c)&&(l=c[0],b=c[1],l?b?c=l+" "+b:(c=l,d="addClass"):(c=b,d="removeClass"));var s="setClass"==d,z=s||"addClass"==d||"removeClass"==d,w=a.attr("class")+" "+c;if(A(w)){var E=p,F=[],m=[],r=p,h=[],q=[],w=(" "+w).replace(/\s+/g,".");k(S(w),
11
+function(b){!e(b,d)&&s&&(e(b,"addClass"),e(b,"removeClass"))});return{node:g,event:d,className:c,isClassBased:z,isSetClassOperation:s,before:function(b){E=b;f(m,F,function(){E=p;b()})},after:function(b){r=b;f(q,h,function(){r=p;b()})},cancel:function(){F&&(k(F,function(b){(b||p)(!0)}),E(!0));h&&(k(h,function(b){(b||p)(!0)}),r(!0))}}}}}function G(a,d,c,e,h,g,l,b){function s(b){var l="$animate:"+b;r&&r[l]&&0<r[l].length&&y(function(){c.triggerHandler(l,{event:a,className:d})})}function z(){s("before")}
12
+function w(){s("after")}function E(){E.hasBeenRun||(E.hasBeenRun=!0,g())}function F(){if(!F.hasBeenRun){F.hasBeenRun=!0;D(l)&&k(l,function(b){c.removeClass(b)});var z=c.data("$$ngAnimateState");z&&(m&&m.isClassBased?B(c,d):(y(function(){var b=c.data("$$ngAnimateState")||{};n==b.index&&B(c,d,a)}),c.data("$$ngAnimateState",z)));s("close");b()}}var m=Y(c,a,d);if(!m)return E(),z(),w(),F(),p;a=m.event;d=m.className;var r=f.element._data(m.node),r=r&&r.events;e||(e=h?h.parent():c.parent());if(J(c,e))return E(),
13
+z(),w(),F(),p;e=c.data("$$ngAnimateState")||{};var I=e.active||{},q=e.totalActive||0,v=e.last;h=!1;if(0<q){q=[];if(m.isClassBased)"setClass"==v.event?(q.push(v),B(c,d)):I[d]&&($=I[d],$.event==a?h=!0:(q.push($),B(c,d)));else if("leave"==a&&I["ng-leave"])h=!0;else{for(var $ in I)q.push(I[$]);e={};B(c,!0)}0<q.length&&k(q,function(b){b.cancel()})}!m.isClassBased||m.isSetClassOperation||h||(h="addClass"==a==c.hasClass(d));if(h)return E(),z(),w(),s("close"),b(),p;I=e.active||{};q=e.totalActive||0;if("leave"==
14
+a)c.one("$destroy",function(b){b=f.element(this);var a=b.data("$$ngAnimateState");a&&(a=a.active["ng-leave"])&&(a.cancel(),B(b,"ng-leave"))});c.addClass("ng-animate");D(l)&&k(l,function(b){c.addClass(b)});var n=H++;q++;I[d]=m;c.data("$$ngAnimateState",{last:m,active:I,index:n,totalActive:q});z();m.before(function(b){var l=c.data("$$ngAnimateState");b=b||!l||!l.active[d]||m.isClassBased&&l.active[d].event!=a;E();!0===b?F():(w(),m.after(F))});return m.cancel}function n(a){if(a=h(a))a=f.isFunction(a.getElementsByClassName)?
15
+a.getElementsByClassName("ng-animate"):a.querySelectorAll(".ng-animate"),k(a,function(a){a=f.element(a);(a=a.data("$$ngAnimateState"))&&a.active&&k(a.active,function(a){a.cancel()})})}function B(a,d){if(M(a,u))t.disabled||(t.running=!1,t.structural=!1);else if(d){var c=a.data("$$ngAnimateState")||{},e=!0===d;!e&&c.active&&c.active[d]&&(c.totalActive--,delete c.active[d]);if(e||!c.totalActive)a.removeClass("ng-animate"),a.removeData("$$ngAnimateState")}}function J(a,d){if(t.disabled)return!0;if(M(a,
16
+u))return t.running;var c,e,h;do{if(0===d.length)break;var g=M(d,u),l=g?t:d.data("$$ngAnimateState")||{};if(l.disabled)return!0;g&&(h=!0);!1!==c&&(g=d.data("$$ngAnimateChildren"),f.isDefined(g)&&(c=g));e=e||l.running||l.last&&!l.last.isClassBased}while(d=d.parent());return!h||!c&&e}u.data("$$ngAnimateState",t);var Z=O.$watch(function(){return X.totalPendingRequests},function(a,d){0===a&&(Z(),O.$$postDigest(function(){O.$$postDigest(function(){t.running=!1})}))}),H=0,T=C.classNameFilter(),A=T?function(a){return T.test(a)}:
17
+function(){return!0};return{enter:function(a,d,c,e){e=Q(e);a=f.element(a);d=d&&f.element(d);c=c&&f.element(c);x(a,!0);N.enter(a,d,c);return P(function(k){return G("enter","ng-enter",f.element(h(a)),d,c,p,e,k)})},leave:function(a,d){d=Q(d);a=f.element(a);n(a);x(a,!0);return P(function(c){return G("leave","ng-leave",f.element(h(a)),null,null,function(){N.leave(a)},d,c)})},move:function(a,d,c,e){e=Q(e);a=f.element(a);d=d&&f.element(d);c=c&&f.element(c);n(a);x(a,!0);N.move(a,d,c);return P(function(k){return G("move",
18
+"ng-move",f.element(h(a)),d,c,p,e,k)})},addClass:function(a,d,c){return this.setClass(a,d,[],c)},removeClass:function(a,d,c){return this.setClass(a,[],d,c)},setClass:function(a,d,c,e){e=Q(e);a=f.element(a);a=f.element(h(a));if(x(a))return N.setClass(a,d,c,!0);var n,g=a.data("$$animateClasses"),l=!!g;g||(g={classes:{}});n=g.classes;d=D(d)?d:d.split(" ");k(d,function(b){b&&b.length&&(n[b]=!0)});c=D(c)?c:c.split(" ");k(c,function(b){b&&b.length&&(n[b]=!1)});if(l)return e&&g.options&&(g.options=g.options.concat(e)),
19
+g.promise;a.data("$$animateClasses",g={classes:n,options:e});return g.promise=P(function(b){var c=a.parent(),d=h(a),l=d.parentNode;if(!l||l.$$NG_REMOVED||d.$$NG_REMOVED)b();else{d=a.data("$$animateClasses");a.removeData("$$animateClasses");var l=a.data("$$ngAnimateState")||{},e=R(a,d,l.active);return e?G("setClass",e,a,c,null,function(){e[0]&&N.$$addClassImmediately(a,e[0]);e[1]&&N.$$removeClassImmediately(a,e[1])},d.options,b):b()}})},cancel:function(a){a.$$cancelFn()},enabled:function(a,d){switch(arguments.length){case 2:if(a)B(d);
20
+else{var c=d.data("$$ngAnimateState")||{};c.disabled=!0;d.data("$$ngAnimateState",c)}break;case 1:t.disabled=!a;break;default:a=!t.disabled}return!!a}}}]);C.register("",["$window","$sniffer","$timeout","$$animateReflow",function(t,C,K,W){function u(){c||(c=W(function(){d=[];c=null;A={}}))}function y(a,b){c&&c();d.push(b);c=W(function(){k(d,function(b){b()});d=[];c=null;A={}})}function O(a,b){var c=h(a);a=f.element(c);g.push(a);c=Date.now()+b;c<=M||(K.cancel(e),M=c,e=K(function(){V(g);g=[]},b,!1))}
21
+function V(a){k(a,function(b){(b=b.data("$$ngAnimateCSS3Data"))&&k(b.closeAnimationFns,function(b){b()})})}function X(a,b){var c=b?A[b]:null;if(!c){var d=0,e=0,f=0,h=0;k(a,function(b){if(1==b.nodeType){b=t.getComputedStyle(b)||{};d=Math.max(x(b[J+"Duration"]),d);e=Math.max(x(b[J+"Delay"]),e);h=Math.max(x(b[H+"Delay"]),h);var a=x(b[H+"Duration"]);0<a&&(a*=parseInt(b[H+"IterationCount"],10)||1);f=Math.max(a,f)}});c={total:0,transitionDelay:e,transitionDuration:d,animationDelay:h,animationDuration:f};
22
+b&&(A[b]=c)}return c}function x(a){var b=0;a=ba(a)?a.split(/\s*,\s*/):[];k(a,function(a){b=Math.max(parseFloat(a)||0,b)});return b}function P(c,b,d){c=0<=["ng-enter","ng-leave","ng-move"].indexOf(d);var e,f=b.parent(),k=f.data("$$ngAnimateKey");k||(f.data("$$ngAnimateKey",++a),k=a);e=k+"-"+h(b).getAttribute("class");var f=e+" "+d,k=A[f]?++A[f].total:0,g={};if(0<k){var m=d+"-stagger",g=e+" "+m;(e=!A[g])&&b.addClass(m);g=X(b,g);e&&b.removeClass(m)}b.addClass(d);var m=b.data("$$ngAnimateCSS3Data")||
23
+{},r=X(b,f);e=r.transitionDuration;r=r.animationDuration;if(c&&0===e&&0===r)return b.removeClass(d),!1;d=c&&0<e;c=0<r&&0<g.animationDelay&&0===g.animationDuration;b.data("$$ngAnimateCSS3Data",{stagger:g,cacheKey:f,running:m.running||0,itemIndex:k,blockTransition:d,closeAnimationFns:m.closeAnimationFns||[]});b=h(b);d&&(b.style[J+"Property"]="none");c&&(b.style[H+"PlayState"]="paused");return!0}function Q(a,b,c,d){function e(a){b.off(D,f);b.removeClass(m);b.removeClass(r);y&&K.cancel(y);G(b,c);a=h(b);
24
+for(var d in n)a.style.removeProperty(n[d])}function f(b){b.stopPropagation();var a=b.originalEvent||b;b=a.$manualTimeStamp||a.timeStamp||Date.now();a=parseFloat(a.elapsedTime.toFixed(3));Math.max(b-C,0)>=A&&a>=x&&d()}var g=h(b);a=b.data("$$ngAnimateCSS3Data");if(-1!=g.getAttribute("class").indexOf(c)&&a){a.blockTransition&&(g.style[J+"Property"]="");var m="",r="";k(c.split(" "),function(b,a){var c=(0<a?" ":"")+b;m+=c+"-active";r+=c+"-pending"});var n=[],q=a.itemIndex,v=a.stagger,p=0;if(0<q){p=0;
25
+0<v.transitionDelay&&0===v.transitionDuration&&(p=v.transitionDelay*q);var t=0;0<v.animationDelay&&0===v.animationDuration&&(t=v.animationDelay*q,n.push(B+"animation-play-state"));p=Math.round(100*Math.max(p,t))/100}p||b.addClass(m);var u=X(b,a.cacheKey+" "+m),x=Math.max(u.transitionDuration,u.animationDuration);if(0===x)b.removeClass(m),G(b,c),d();else{var q=Math.max(u.transitionDelay,u.animationDelay),A=1E3*q;0<n.length&&(v=g.getAttribute("style")||"",";"!==v.charAt(v.length-1)&&(v+=";"),g.setAttribute("style",
26
+v+" "));var C=Date.now(),D=T+" "+Z,q=1E3*(p+1.5*(q+x)),y;0<p&&(b.addClass(r),y=K(function(){y=null;b.addClass(m);b.removeClass(r);0<u.animationDuration&&(g.style[H+"PlayState"]="")},1E3*p,!1));b.on(D,f);a.closeAnimationFns.push(function(){e();d()});a.running++;O(b,q);return e}}else d()}function R(a,b,c,d){if(P(a,b,c,d))return function(a){a&&G(b,c)}}function S(a,b,c,d){if(b.data("$$ngAnimateCSS3Data"))return Q(a,b,c,d);G(b,c);d()}function Y(a,b,c,d){var e=R(a,b,c);if(e){var f=e;y(b,function(){f=S(a,
27
+b,c,d)});return function(a){(f||p)(a)}}u();d()}function G(a,b){a.removeClass(b);var c=a.data("$$ngAnimateCSS3Data");c&&(c.running&&c.running--,c.running&&0!==c.running||a.removeData("$$ngAnimateCSS3Data"))}function n(a,b){var c="";a=D(a)?a:a.split(/\s+/);k(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var B="",J,Z,H,T;L.ontransitionend===U&&L.onwebkittransitionend!==U?(B="-webkit-",J="WebkitTransition",Z="webkitTransitionEnd transitionend"):(J="transition",Z="transitionend");L.onanimationend===
28
+U&&L.onwebkitanimationend!==U?(B="-webkit-",H="WebkitAnimation",T="webkitAnimationEnd animationend"):(H="animation",T="animationend");var A={},a=0,d=[],c,e=null,M=0,g=[];return{enter:function(a,b){return Y("enter",a,"ng-enter",b)},leave:function(a,b){return Y("leave",a,"ng-leave",b)},move:function(a,b){return Y("move",a,"ng-move",b)},beforeSetClass:function(a,b,c,d){b=n(c,"-remove")+" "+n(b,"-add");if(b=R("setClass",a,b))return y(a,d),b;u();d()},beforeAddClass:function(a,b,c){if(b=R("addClass",a,
29
+n(b,"-add")))return y(a,c),b;u();c()},beforeRemoveClass:function(a,b,c){if(b=R("removeClass",a,n(b,"-remove")))return y(a,c),b;u();c()},setClass:function(a,b,c,d){c=n(c,"-remove");b=n(b,"-add");return S("setClass",a,c+" "+b,d)},addClass:function(a,b,c){return S("addClass",a,n(b,"-add"),c)},removeClass:function(a,b,c){return S("removeClass",a,n(b,"-remove"),c)}}}])}])})(window,window.angular);
2530 //# sourceMappingURL=angular-animate.min.js.map
securis/src/main/resources/static/js/angular/angular-animate.min.js.map
....@@ -0,0 +1,8 @@
1
+{
2
+"version":3,
3
+"file":"angular-animate.min.js",
4
+"lineCount":29,
5
+"mappings":"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",
6
+"sources":["angular-animate.js"],
7
+"names":["window","angular","undefined","module","directive","scope","element","attrs","val","ngAnimateChildren","isString","length","data","NG_ANIMATE_CHILDREN","$watch","value","factory","$$rAF","$document","fn","config","$provide","$animateProvider","extractElementNode","i","elm","ELEMENT_NODE","nodeType","isMatchingElement","elm1","elm2","noop","forEach","selectors","$$selectors","isArray","rootAnimateState","running","decorator","$delegate","$$q","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","$templateRequest","classBasedAnimationsBlocked","setter","NG_ANIMATE_STATE","structural","disabled","runAnimationPostDigest","cancelFn","defer","promise","$$cancelFn","defer.promise.$$cancelFn","$$postDigest","resolve","parseAnimateOptions","options","resolveElementClasses","cache","runningAnimations","lookup","selector","split","s","hasClasses","Object","create","attr","className","toAdd","toRemove","classes","status","hasClass","matchingAnimation","event","push","join","name","matches","flagMap","substr","transitions","animations","get","klass","selectorFactoryName","animationRunner","animationEvent","registerAnimation","animationFactory","afterFn","beforeFn","charAt","toUpperCase","after","before","run","fns","cancellations","allCompleteFn","animation","count","index","progress","classNameAdd","classNameRemove","node","isSetClassOperation","isClassBased","currentClassName","isAnimatableClassName","beforeComplete","beforeCancel","afterComplete","afterCancel","animationLookup","replace","created","cancel","performAnimation","parentElement","afterElement","domOperation","doneCallback","fireDOMCallback","animationPhase","eventName","elementEvents","triggerHandler","fireBeforeCallbackAsync","fireAfterCallbackAsync","fireDOMOperation","hasBeenRun","closeAnimation","removeClass","runner","cleanup","localAnimationCount","_data","events","parent","animationsDisabled","ngAnimateState","active","totalActiveAnimations","totalActive","lastAnimation","last","skipAnimation","animationsToCancel","current","operation","one","e","state","activeLeaveAnimation","addClass","NG_ANIMATE_CLASS_NAME","globalAnimationCounter","cancelled","cancelChildAnimations","nodes","isFunction","getElementsByClassName","querySelectorAll","removeAnimations","removeData","allowChildAnimations","parentRunningAnimation","hasParent","isRoot","animateChildrenFlag","isDefined","deregisterWatch","totalPendingRequests","oldVal","classNameFilter","test","enter","done","leave","move","setClass","add","remove","STORAGE_KEY","hasCache","c","concat","elementNode","parentNode","$$addClassImmediately","$$removeClassImmediately","enabled","arguments","register","$window","$timeout","$$animateReflow","clearCacheAfterReflow","cancelAnimationReflow","animationReflowQueue","lookupCache","afterReflow","callback","animationCloseHandler","totalTime","animationElementQueue","futureTimestamp","Date","now","closingTimestamp","closingTimer","closeAllAnimations","elements","elementData","NG_ANIMATE_CSS_DATA_KEY","closeAnimationFns","getElementAnimationDetails","cacheKey","transitionDuration","transitionDelay","animationDuration","animationDelay","elementStyles","getComputedStyle","Math","max","parseMaxTime","transitionDurationStyle","TRANSITION_PROP","DURATION_KEY","transitionDelayStyle","DELAY_KEY","ANIMATION_PROP","aDuration","parseInt","ANIMATION_ITERATION_COUNT_KEY","total","str","maxValue","values","parseFloat","animateSetup","indexOf","parentID","NG_ANIMATE_PARENT_KEY","parentCounter","getAttribute","eventCacheKey","itemIndex","stagger","staggerClassName","staggerCacheKey","applyClasses","formerData","timings","blockTransition","blockAnimation","style","PROPERTY_KEY","ANIMATION_PLAYSTATE_KEY","animateRun","activeAnimationComplete","onEnd","off","css3AnimationEvents","onAnimationProgress","activeClassName","pendingClassName","staggerTimeout","animateClose","appliedStyles","removeProperty","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","maxDuration","prefix","staggerTime","transitionStaggerDelay","animationStaggerDelay","CSS_PREFIX","round","maxDelay","ONE_SECOND","oldStyle","setAttribute","ANIMATIONEND_EVENT","TRANSITIONEND_EVENT","CLOSING_TIME_BUFFER","on","animateBefore","calculationDecorator","animateAfter","afterAnimationComplete","animate","animationComplete","preReflowCancellation","suffixClasses","suffix","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","animationCompleted","beforeSetClass","cancellationMethod","beforeAddClass","beforeRemoveClass"]
8
+}
securis/src/main/resources/static/js/angular/angular-resource.min.js
....@@ -1,13 +1,13 @@
11 /*
2
- AngularJS v1.2.9
2
+ AngularJS v1.3.0-rc.5
33 (c) 2010-2014 Google, Inc. http://angularjs.org
44 License: MIT
55 */
6
-(function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)p.hasOwnProperty(c)&&("$"!==c.charAt(0)&&"$"!==c.charAt(1))&&(g[c]=p[c]);return g}var v=a.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;a.module("ngResource",["ng"]).factory("$resource",["$http","$q",function(p,g){function c(a,c){this.template=a;this.defaults=c||{};this.urlParams={}}function t(n,w,l){function r(h,d){var e={};d=x({},w,d);s(d,function(b,d){u(b)&&(b=b());var k;if(b&&
7
-b.charAt&&"@"==b.charAt(0)){k=h;var a=b.substr(1);if(null==a||""===a||"hasOwnProperty"===a||!C.test("."+a))throw v("badmember",a);for(var a=a.split("."),f=0,c=a.length;f<c&&k!==A;f++){var g=a[f];k=null!==k?k[g]:A}}else k=b;e[d]=k});return e}function e(a){return a.resource}function f(a){D(a||{},this)}var F=new c(n);l=x({},B,l);s(l,function(h,d){var c=/^(POST|PUT|PATCH)$/i.test(h.method);f[d]=function(b,d,k,w){var q={},n,l,y;switch(arguments.length){case 4:y=w,l=k;case 3:case 2:if(u(d)){if(u(b)){l=
8
-b;y=d;break}l=d;y=k}else{q=b;n=d;l=k;break}case 1:u(b)?l=b:c?n=b:q=b;break;case 0:break;default:throw v("badargs",arguments.length);}var t=this instanceof f,m=t?n:h.isArray?[]:new f(n),z={},B=h.interceptor&&h.interceptor.response||e,C=h.interceptor&&h.interceptor.responseError||A;s(h,function(a,b){"params"!=b&&("isArray"!=b&&"interceptor"!=b)&&(z[b]=G(a))});c&&(z.data=n);F.setUrlParams(z,x({},r(n,h.params||{}),q),h.url);q=p(z).then(function(b){var d=b.data,k=m.$promise;if(d){if(a.isArray(d)!==!!h.isArray)throw v("badcfg",
9
-h.isArray?"array":"object",a.isArray(d)?"array":"object");h.isArray?(m.length=0,s(d,function(b){m.push(new f(b))})):(D(d,m),m.$promise=k)}m.$resolved=!0;b.resource=m;return b},function(b){m.$resolved=!0;(y||E)(b);return g.reject(b)});q=q.then(function(b){var a=B(b);(l||E)(a,b.headers);return a},C);return t?q:(m.$promise=q,m.$resolved=!1,m)};f.prototype["$"+d]=function(b,a,k){u(b)&&(k=a,a=b,b={});b=f[d].call(this,b,this,a,k);return b.$promise||b}});f.bind=function(a){return t(n,x({},w,a),l)};return f}
10
-var B={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},E=a.noop,s=a.forEach,x=a.extend,G=a.copy,u=a.isFunction;c.prototype={setUrlParams:function(c,g,l){var r=this,e=l||r.template,f,p,h=r.urlParams={};s(e.split(/\W/),function(a){if("hasOwnProperty"===a)throw v("badname");!/^\d+$/.test(a)&&(a&&RegExp("(^|[^\\\\]):"+a+"(\\W|$)").test(e))&&(h[a]=!0)});e=e.replace(/\\:/g,":");g=g||{};s(r.urlParams,function(d,c){f=g.hasOwnProperty(c)?
11
-g[c]:r.defaults[c];a.isDefined(f)&&null!==f?(p=encodeURIComponent(f).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),e=e.replace(RegExp(":"+c+"(\\W|$)","g"),p+"$1")):e=e.replace(RegExp("(/?):"+c+"(\\W|$)","g"),function(a,c,d){return"/"==d.charAt(0)?d:c+d})});e=e.replace(/\/+$/,"")||"/";e=e.replace(/\/\.(?=\w+($|\?))/,".");c.url=e.replace(/\/\\\./,"/.");s(g,function(a,e){r.urlParams[e]||
12
-(c.params=c.params||{},c.params[e]=a)})}};return t}])})(window,window.angular);
6
+(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 w=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"}}};
7
+this.$get=["$http","$q",function(q,h){function t(d,g){this.template=d;this.defaults=s({},f.defaults,g);this.urlParams={}}function v(x,g,l,m){function c(b,k){var c={};k=s({},g,k);r(k,function(a,k){u(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 w("badmember",e);for(var e=e.split("."),n=0,g=e.length;n<g&&d!==B;n++){var h=e[n];d=null!==d?d[h]:B}}else d=a;c[k]=d});return c}function F(b){return b.resource}function e(b){D(b||
8
+{},this)}var G=new t(x,m);l=s({},f.defaults.actions,l);e.prototype.toJSON=function(){var b=s({},this);delete b.$promise;delete b.$resolved;return b};r(l,function(b,k){var g=/^(POST|PUT|PATCH)$/i.test(b.method);e[k]=function(a,y,m,x){var n={},f,l,z;switch(arguments.length){case 4:z=x,l=m;case 3:case 2:if(u(y)){if(u(a)){l=a;z=y;break}l=y;z=m}else{n=a;f=y;l=m;break}case 1:u(a)?l=a:g?f=a:n=a;break;case 0:break;default:throw w("badargs",arguments.length);}var t=this instanceof e,p=t?f:b.isArray?[]:new e(f),
9
+A={},v=b.interceptor&&b.interceptor.response||F,C=b.interceptor&&b.interceptor.responseError||B;r(b,function(b,a){"params"!=a&&"isArray"!=a&&"interceptor"!=a&&(A[a]=H(b))});g&&(A.data=f);G.setUrlParams(A,s({},c(f,b.params||{}),n),b.url);n=q(A).then(function(a){var c=a.data,g=p.$promise;if(c){if(d.isArray(c)!==!!b.isArray)throw w("badcfg",k,b.isArray?"array":"object",d.isArray(c)?"array":"object");b.isArray?(p.length=0,r(c,function(a){"object"===typeof a?p.push(new e(a)):p.push(a)})):(D(c,p),p.$promise=
10
+g)}p.$resolved=!0;a.resource=p;return a},function(a){p.$resolved=!0;(z||E)(a);return h.reject(a)});n=n.then(function(a){var b=v(a);(l||E)(b,a.headers);return b},C);return t?n:(p.$promise=n,p.$resolved=!1,p)};e.prototype["$"+k]=function(a,b,c){u(a)&&(c=b,b=a,a={});a=e[k].call(this,a,this,b,c);return a.$promise||a}});e.bind=function(b){return v(x,s({},g,b),l)};return e}var E=d.noop,r=d.forEach,s=d.extend,H=d.copy,u=d.isFunction;t.prototype={setUrlParams:function(f,g,l){var m=this,c=l||m.template,h,
11
+e,q=m.urlParams={};r(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw w("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+b+"(\\W|$)")).test(c)&&(q[b]=!0)});c=c.replace(/\\:/g,":");g=g||{};r(m.urlParams,function(b,k){h=g.hasOwnProperty(k)?g[k]:m.defaults[k];d.isDefined(h)&&null!==h?(e=encodeURIComponent(h).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+
12
+k+"(\\W|$)","g"),function(b,a){return e+a})):c=c.replace(new RegExp("(/?):"+k+"(\\W|$)","g"),function(b,a,c){return"/"==c.charAt(0)?c:a+c})});m.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");f.url=c.replace(/\/\\\./,"/.");r(g,function(b,c){m.urlParams[c]||(f.params=f.params||{},f.params[c]=b)})}};return v}]})})(window,window.angular);
1313 //# sourceMappingURL=angular-resource.min.js.map
securis/src/main/resources/static/js/angular/angular-resource.min.js.map
....@@ -0,0 +1,8 @@
1
+{
2
+"version":3,
3
+"file":"angular-resource.min.js",
4
+"lineCount":12,
5
+"mappings":"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",
6
+"sources":["angular-resource.js"],
7
+"names":["window","angular","undefined","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","provider","defaults","stripTrailingSlashes","actions","method","isArray","$get","$http","$q","Route","template","extend","urlParams","resourceFactory","url","paramDefaults","options","extractParams","data","actionParams","ids","isFunction","path","test","keys","split","i","ii","length","obj","defaultResponseInterceptor","response","resource","Resource","route","prototype","toJSON","Resource.prototype.toJSON","$promise","$resolved","action","name","hasBody","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","copy","setUrlParams","promise","then","item","push","noop","reject","headers","result","call","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","val","encodedVal","param","RegExp","replace","_","urlParam","isDefined","encodeURIComponent","match","p1","leadingSlashes","tail"]
8
+}
securis/src/main/resources/static/js/angular/angular-route.min.js
....@@ -1,14 +1,15 @@
11 /*
2
- AngularJS v1.2.9
2
+ AngularJS v1.3.0-rc.5
33 (c) 2010-2014 Google, Inc. http://angularjs.org
44 License: MIT
55 */
6
-(function(h,e,A){'use strict';function u(w,q,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,n){function y(){l&&(l.$destroy(),l=null);g&&(k.leave(g),g=null)}function v(){var b=w.current&&w.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),f=w.current;g=n(b,function(d){k.enter(d,null,g||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||q()});y()});l=f.scope=b;l.$emit("$viewContentLoaded");l.$eval(h)}else y()}var l,g,t=b.autoscroll,h=b.onload||"";
7
-a.$on("$routeChangeSuccess",v);v()}}}function z(e,h,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var n=e(c.contents());b.controller&&(f.$scope=a,f=h(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));n(a)}}}h=e.module("ngRoute",["ng"]).provider("$route",function(){function h(a,c){return e.extend(new (e.extend(function(){},{prototype:a})),c)}function q(a,
8
-e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},h=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?|\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;h.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&q(a,c));if(a){var b="/"==a[a.length-1]?a.substr(0,
9
-a.length-1):a+"/";k[b]=e.extend({redirectTo:a},q(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,n,q,v,l){function g(){var d=t(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!x)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)x=!1,a.$broadcast("$routeChangeStart",d,m),
10
-(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(u(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?n.get(d):n.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=l.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl=
11
-b,c=q.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function t(){var a,b;e.forEach(k,function(f,k){var p;if(p=!b){var s=c.path();p=f.keys;var l={};if(f.regexp)if(s=f.regexp.exec(s)){for(var g=1,q=s.length;g<q;++g){var n=p[g-1],r="string"==typeof s[g]?decodeURIComponent(s[g]):
12
-s[g];n&&r&&(l[n.name]=r)}p=l}else p=null;else p=null;p=a=p}p&&(b=h(f,{params:e.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||k[null]&&h(k[null],{params:{},pathParams:{}})}function u(a,c){var b=[];e.forEach((a||"").split(":"),function(a,d){if(0===d)b.push(a);else{var e=a.match(/(\w+)(.*)/),f=e[1];b.push(c[f]);b.push(e[2]||"");delete c[f]}});return b.join("")}var x=!1,r={routes:k,reload:function(){x=!0;a.$evalAsync(g)}};a.$on("$locationChangeSuccess",g);return r}]});h.provider("$routeParams",
13
-function(){this.$get=function(){return{}}});h.directive("ngView",u);h.directive("ngView",z);u.$inject=["$route","$anchorScroll","$animate"];z.$inject=["$compile","$controller","$route"]})(window,window.angular);
6
+(function(p,e,B){'use strict';function u(q,h,f){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,b,c,g,x){function y(){k&&(f.cancel(k),k=null);l&&(l.$destroy(),l=null);m&&(k=f.leave(m),k.then(function(){k=null}),m=null)}function w(){var c=q.current&&q.current.locals;if(e.isDefined(c&&c.$template)){var c=a.$new(),g=q.current;m=x(c,function(c){f.enter(c,null,m||b).then(function(){!e.isDefined(s)||s&&!a.$eval(s)||h()});y()});l=g.scope=c;l.$emit("$viewContentLoaded");
7
+l.$eval(v)}else y()}var l,m,k,s=c.autoscroll,v=c.onload||"";a.$on("$routeChangeSuccess",w);w()}}}function z(e,h,f){return{restrict:"ECA",priority:-400,link:function(a,b){var c=f.current,g=c.locals;b.html(g.$template);var x=e(b.contents());c.controller&&(g.$scope=a,g=h(c.controller,g),c.controllerAs&&(a[c.controllerAs]=g),b.data("$ngControllerController",g),b.children().data("$ngControllerController",g));x(a)}}}p=e.module("ngRoute",["ng"]).provider("$route",function(){function q(a,b){return e.extend(new (e.extend(function(){},
8
+{prototype:a})),b)}function h(a,e){var c=e.caseInsensitiveMatch,g={originalPath:a,regexp:a},f=g.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,c,b){a="?"===b?b:null;b="*"===b?b:null;f.push({name:c,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(b&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");g.regexp=new RegExp("^"+a+"$",c?"i":"");return g}var f={};this.when=function(a,b){f[a]=e.extend({reloadOnSearch:!0},b,a&&h(a,b));if(a){var c=
9
+"/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";f[c]=e.extend({redirectTo:a},h(c,b))}return this};this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce",function(a,b,c,g,h,p,w){function l(b){var d=r.current;(u=(n=k())&&d&&n.$$route===d.$$route&&e.equals(n.pathParams,d.pathParams)&&!n.reloadOnSearch&&!v)||!d&&!n||a.$broadcast("$routeChangeStart",n,d).defaultPrevented&&
10
+b&&b.preventDefault()}function m(){var t=r.current,d=n;if(u)t.params=d.params,e.copy(t.params,c),a.$broadcast("$routeUpdate",t);else if(d||t)v=!1,(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?b.path(s(d.redirectTo,d.params)).search(d.params).replace():b.url(d.redirectTo(d.pathParams,b.path(),b.search())).replace()),g.when(d).then(function(){if(d){var a=e.extend({},d.resolve),b,c;e.forEach(a,function(d,b){a[b]=e.isString(d)?h.get(d):h.invoke(d,null,null,b)});e.isDefined(b=d.template)?e.isFunction(b)&&
11
+(b=b(d.params)):e.isDefined(c=d.templateUrl)&&(e.isFunction(c)&&(c=c(d.params)),c=w.getTrustedResourceUrl(c),e.isDefined(c)&&(d.loadedTemplateUrl=c,b=p(c)));e.isDefined(b)&&(a.$template=b);return g.all(a)}}).then(function(b){d==r.current&&(d&&(d.locals=b,e.copy(d.params,c)),a.$broadcast("$routeChangeSuccess",d,t))},function(b){d==r.current&&a.$broadcast("$routeChangeError",d,t,b)})}function k(){var a,d;e.forEach(f,function(c,g){var f;if(f=!d){var h=b.path();f=c.keys;var l={};if(c.regexp)if(h=c.regexp.exec(h)){for(var k=
12
+1,m=h.length;k<m;++k){var n=f[k-1],p=h[k];n&&p&&(l[n.name]=p)}f=l}else f=null;else f=null;f=a=f}f&&(d=q(c,{params:e.extend({},b.search(),a),pathParams:a}),d.$$route=c)});return d||f[null]&&q(f[null],{params:{},pathParams:{}})}function s(a,b){var c=[];e.forEach((a||"").split(":"),function(a,e){if(0===e)c.push(a);else{var f=a.match(/(\w+)(.*)/),g=f[1];c.push(b[g]);c.push(f[2]||"");delete b[g]}});return c.join("")}var v=!1,n,u,r={routes:f,reload:function(){v=!0;a.$evalAsync(function(){l();m()})},updateParams:function(a){if(this.current&&
13
+this.current.$$route){var c={},f=this;e.forEach(Object.keys(a),function(b){f.current.pathParams[b]||(c[b]=a[b])});a=e.extend({},this.current.params,a);b.path(s(this.current.$$route.originalPath,a));b.search(e.extend({},b.search(),c))}else throw A("norout");}};a.$on("$locationChangeStart",l);a.$on("$locationChangeSuccess",m);return r}]});var A=e.$$minErr("ngRoute");p.provider("$routeParams",function(){this.$get=function(){return{}}});p.directive("ngView",u);p.directive("ngView",z);u.$inject=["$route",
14
+"$anchorScroll","$animate"];z.$inject=["$compile","$controller","$route"]})(window,window.angular);
1415 //# sourceMappingURL=angular-route.min.js.map
securis/src/main/resources/static/js/angular/angular-route.min.js.map
....@@ -0,0 +1,8 @@
1
+{
2
+"version":3,
3
+"file":"angular-route.min.js",
4
+"lineCount":14,
5
+"mappings":"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",
6
+"sources":["angular-route.js"],
7
+"names":["window","angular","undefined","ngViewFactory","$route","$anchorScroll","$animate","restrict","terminal","priority","transclude","link","scope","$element","attr","ctrl","$transclude","cleanupLastView","previousLeaveAnimation","cancel","currentScope","$destroy","currentElement","leave","then","update","locals","current","isDefined","$template","newScope","$new","clone","enter","onNgViewEnter","autoScrollExp","$eval","$emit","onloadExp","autoscroll","onload","$on","ngViewFillContentFactory","$compile","$controller","html","contents","controller","$scope","controllerAs","data","children","ngRouteModule","module","provider","$RouteProvider","inherit","parent","extra","extend","prototype","pathRegExp","path","opts","insensitive","caseInsensitiveMatch","ret","originalPath","regexp","keys","replace","_","slash","key","option","optional","star","push","name","RegExp","routes","when","this.when","route","reloadOnSearch","redirectPath","length","substr","redirectTo","otherwise","this.otherwise","params","$get","$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce","prepareRoute","$locationEvent","lastRoute","preparedRouteIsUpdateOnly","preparedRoute","parseRoute","$$route","equals","pathParams","forceReload","$broadcast","defaultPrevented","preventDefault","commitRoute","nextRoute","copy","isString","interpolate","search","url","resolve","template","templateUrl","forEach","value","get","invoke","isFunction","getTrustedResourceUrl","loadedTemplateUrl","all","error","match","m","exec","on","i","len","val","string","result","split","segment","segmentMatch","join","reload","$evalAsync","updateParams","newParams","searchParams","self","Object","$routeMinErr","$$minErr","$RouteParamsProvider","this.$get","directive","$inject"]
8
+}
securis/src/main/resources/static/js/angular/angular.js
....@@ -0,0 +1,25284 @@
1
+/**
2
+ * @license AngularJS v1.3.0-rc.5
3
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
4
+ * License: MIT
5
+ */
6
+(function(window, document, undefined) {'use strict';
7
+
8
+/**
9
+ * @description
10
+ *
11
+ * This object provides a utility for producing rich Error messages within
12
+ * Angular. It can be called as follows:
13
+ *
14
+ * var exampleMinErr = minErr('example');
15
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
16
+ *
17
+ * The above creates an instance of minErr in the example namespace. The
18
+ * resulting error will have a namespaced error code of example.one. The
19
+ * resulting error will replace {0} with the value of foo, and {1} with the
20
+ * value of bar. The object is not restricted in the number of arguments it can
21
+ * take.
22
+ *
23
+ * If fewer arguments are specified than necessary for interpolation, the extra
24
+ * interpolation markers will be preserved in the final string.
25
+ *
26
+ * Since data will be parsed statically during a build step, some restrictions
27
+ * are applied with respect to how minErr instances are created and called.
28
+ * Instances should have names of the form namespaceMinErr for a minErr created
29
+ * using minErr('namespace') . Error codes, namespaces and template strings
30
+ * should all be static strings, not variables or general expressions.
31
+ *
32
+ * @param {string} module The namespace to use for the new minErr instance.
33
+ * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
34
+ * error from returned function, for cases when a particular type of error is useful.
35
+ * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
36
+ */
37
+
38
+function minErr(module, ErrorConstructor) {
39
+ ErrorConstructor = ErrorConstructor || Error;
40
+ return function () {
41
+ var code = arguments[0],
42
+ prefix = '[' + (module ? module + ':' : '') + code + '] ',
43
+ template = arguments[1],
44
+ templateArgs = arguments,
45
+ stringify = function (obj) {
46
+ if (typeof obj === 'function') {
47
+ return obj.toString().replace(/ \{[\s\S]*$/, '');
48
+ } else if (typeof obj === 'undefined') {
49
+ return 'undefined';
50
+ } else if (typeof obj !== 'string') {
51
+ return JSON.stringify(obj);
52
+ }
53
+ return obj;
54
+ },
55
+ message, i;
56
+
57
+ message = prefix + template.replace(/\{\d+\}/g, function (match) {
58
+ var index = +match.slice(1, -1), arg;
59
+
60
+ if (index + 2 < templateArgs.length) {
61
+ arg = templateArgs[index + 2];
62
+ if (typeof arg === 'function') {
63
+ return arg.toString().replace(/ ?\{[\s\S]*$/, '');
64
+ } else if (typeof arg === 'undefined') {
65
+ return 'undefined';
66
+ } else if (typeof arg !== 'string') {
67
+ return toJson(arg);
68
+ }
69
+ return arg;
70
+ }
71
+ return match;
72
+ });
73
+
74
+ message = message + '\nhttp://errors.angularjs.org/1.3.0-rc.5/' +
75
+ (module ? module + '/' : '') + code;
76
+ for (i = 2; i < arguments.length; i++) {
77
+ message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
78
+ encodeURIComponent(stringify(arguments[i]));
79
+ }
80
+ return new ErrorConstructor(message);
81
+ };
82
+}
83
+
84
+/* We need to tell jshint what variables are being exported */
85
+/* global angular: true,
86
+ msie: true,
87
+ jqLite: true,
88
+ jQuery: true,
89
+ slice: true,
90
+ splice: true,
91
+ push: true,
92
+ toString: true,
93
+ ngMinErr: true,
94
+ angularModule: true,
95
+ uid: true,
96
+ REGEX_STRING_REGEXP: true,
97
+ VALIDITY_STATE_PROPERTY: true,
98
+
99
+ lowercase: true,
100
+ uppercase: true,
101
+ manualLowercase: true,
102
+ manualUppercase: true,
103
+ nodeName_: true,
104
+ isArrayLike: true,
105
+ forEach: true,
106
+ sortedKeys: true,
107
+ forEachSorted: true,
108
+ reverseParams: true,
109
+ nextUid: true,
110
+ setHashKey: true,
111
+ extend: true,
112
+ int: true,
113
+ inherit: true,
114
+ noop: true,
115
+ identity: true,
116
+ valueFn: true,
117
+ isUndefined: true,
118
+ isDefined: true,
119
+ isObject: true,
120
+ isString: true,
121
+ isNumber: true,
122
+ isDate: true,
123
+ isArray: true,
124
+ isFunction: true,
125
+ isRegExp: true,
126
+ isWindow: true,
127
+ isScope: true,
128
+ isFile: true,
129
+ isBlob: true,
130
+ isBoolean: true,
131
+ isPromiseLike: true,
132
+ trim: true,
133
+ isElement: true,
134
+ makeMap: true,
135
+ size: true,
136
+ includes: true,
137
+ arrayRemove: true,
138
+ isLeafNode: true,
139
+ copy: true,
140
+ shallowCopy: true,
141
+ equals: true,
142
+ csp: true,
143
+ concat: true,
144
+ sliceArgs: true,
145
+ bind: true,
146
+ toJsonReplacer: true,
147
+ toJson: true,
148
+ fromJson: true,
149
+ startingTag: true,
150
+ tryDecodeURIComponent: true,
151
+ parseKeyValue: true,
152
+ toKeyValue: true,
153
+ encodeUriSegment: true,
154
+ encodeUriQuery: true,
155
+ angularInit: true,
156
+ bootstrap: true,
157
+ getTestability: true,
158
+ snake_case: true,
159
+ bindJQuery: true,
160
+ assertArg: true,
161
+ assertArgFn: true,
162
+ assertNotHasOwnProperty: true,
163
+ getter: true,
164
+ getBlockNodes: true,
165
+ hasOwnProperty: true,
166
+ createMap: true,
167
+
168
+ NODE_TYPE_ELEMENT: true,
169
+ NODE_TYPE_TEXT: true,
170
+ NODE_TYPE_COMMENT: true,
171
+ NODE_TYPE_DOCUMENT: true,
172
+ NODE_TYPE_DOCUMENT_FRAGMENT: true,
173
+*/
174
+
175
+////////////////////////////////////
176
+
177
+/**
178
+ * @ngdoc module
179
+ * @name ng
180
+ * @module ng
181
+ * @description
182
+ *
183
+ * # ng (core module)
184
+ * The ng module is loaded by default when an AngularJS application is started. The module itself
185
+ * contains the essential components for an AngularJS application to function. The table below
186
+ * lists a high level breakdown of each of the services/factories, filters, directives and testing
187
+ * components available within this core module.
188
+ *
189
+ * <div doc-module-components="ng"></div>
190
+ */
191
+
192
+var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
193
+
194
+// The name of a form control's ValidityState property.
195
+// This is used so that it's possible for internal tests to create mock ValidityStates.
196
+var VALIDITY_STATE_PROPERTY = 'validity';
197
+
198
+/**
199
+ * @ngdoc function
200
+ * @name angular.lowercase
201
+ * @module ng
202
+ * @kind function
203
+ *
204
+ * @description Converts the specified string to lowercase.
205
+ * @param {string} string String to be converted to lowercase.
206
+ * @returns {string} Lowercased string.
207
+ */
208
+var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};
209
+var hasOwnProperty = Object.prototype.hasOwnProperty;
210
+
211
+/**
212
+ * @ngdoc function
213
+ * @name angular.uppercase
214
+ * @module ng
215
+ * @kind function
216
+ *
217
+ * @description Converts the specified string to uppercase.
218
+ * @param {string} string String to be converted to uppercase.
219
+ * @returns {string} Uppercased string.
220
+ */
221
+var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};
222
+
223
+
224
+var manualLowercase = function(s) {
225
+ /* jshint bitwise: false */
226
+ return isString(s)
227
+ ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
228
+ : s;
229
+};
230
+var manualUppercase = function(s) {
231
+ /* jshint bitwise: false */
232
+ return isString(s)
233
+ ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
234
+ : s;
235
+};
236
+
237
+
238
+// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
239
+// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
240
+// with correct but slower alternatives.
241
+if ('i' !== 'I'.toLowerCase()) {
242
+ lowercase = manualLowercase;
243
+ uppercase = manualUppercase;
244
+}
245
+
246
+
247
+var /** holds major version number for IE or NaN for real browsers */
248
+ msie,
249
+ jqLite, // delay binding since jQuery could be loaded after us.
250
+ jQuery, // delay binding
251
+ slice = [].slice,
252
+ splice = [].splice,
253
+ push = [].push,
254
+ toString = Object.prototype.toString,
255
+ ngMinErr = minErr('ng'),
256
+
257
+ /** @name angular */
258
+ angular = window.angular || (window.angular = {}),
259
+ angularModule,
260
+ uid = 0;
261
+
262
+/**
263
+ * documentMode is an IE-only property
264
+ * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
265
+ */
266
+msie = document.documentMode;
267
+
268
+
269
+/**
270
+ * @private
271
+ * @param {*} obj
272
+ * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
273
+ * String ...)
274
+ */
275
+function isArrayLike(obj) {
276
+ if (obj == null || isWindow(obj)) {
277
+ return false;
278
+ }
279
+
280
+ var length = obj.length;
281
+
282
+ if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
283
+ return true;
284
+ }
285
+
286
+ return isString(obj) || isArray(obj) || length === 0 ||
287
+ typeof length === 'number' && length > 0 && (length - 1) in obj;
288
+}
289
+
290
+/**
291
+ * @ngdoc function
292
+ * @name angular.forEach
293
+ * @module ng
294
+ * @kind function
295
+ *
296
+ * @description
297
+ * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
298
+ * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
299
+ * is the value of an object property or an array element, `key` is the object property key or
300
+ * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
301
+ *
302
+ * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
303
+ * using the `hasOwnProperty` method.
304
+ *
305
+ ```js
306
+ var values = {name: 'misko', gender: 'male'};
307
+ var log = [];
308
+ angular.forEach(values, function(value, key) {
309
+ this.push(key + ': ' + value);
310
+ }, log);
311
+ expect(log).toEqual(['name: misko', 'gender: male']);
312
+ ```
313
+ *
314
+ * @param {Object|Array} obj Object to iterate over.
315
+ * @param {Function} iterator Iterator function.
316
+ * @param {Object=} context Object to become context (`this`) for the iterator function.
317
+ * @returns {Object|Array} Reference to `obj`.
318
+ */
319
+
320
+function forEach(obj, iterator, context) {
321
+ var key, length;
322
+ if (obj) {
323
+ if (isFunction(obj)) {
324
+ for (key in obj) {
325
+ // Need to check if hasOwnProperty exists,
326
+ // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
327
+ if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
328
+ iterator.call(context, obj[key], key, obj);
329
+ }
330
+ }
331
+ } else if (isArray(obj) || isArrayLike(obj)) {
332
+ var isPrimitive = typeof obj !== 'object';
333
+ for (key = 0, length = obj.length; key < length; key++) {
334
+ if (isPrimitive || key in obj) {
335
+ iterator.call(context, obj[key], key, obj);
336
+ }
337
+ }
338
+ } else if (obj.forEach && obj.forEach !== forEach) {
339
+ obj.forEach(iterator, context, obj);
340
+ } else {
341
+ for (key in obj) {
342
+ if (obj.hasOwnProperty(key)) {
343
+ iterator.call(context, obj[key], key, obj);
344
+ }
345
+ }
346
+ }
347
+ }
348
+ return obj;
349
+}
350
+
351
+function sortedKeys(obj) {
352
+ var keys = [];
353
+ for (var key in obj) {
354
+ if (obj.hasOwnProperty(key)) {
355
+ keys.push(key);
356
+ }
357
+ }
358
+ return keys.sort();
359
+}
360
+
361
+function forEachSorted(obj, iterator, context) {
362
+ var keys = sortedKeys(obj);
363
+ for ( var i = 0; i < keys.length; i++) {
364
+ iterator.call(context, obj[keys[i]], keys[i]);
365
+ }
366
+ return keys;
367
+}
368
+
369
+
370
+/**
371
+ * when using forEach the params are value, key, but it is often useful to have key, value.
372
+ * @param {function(string, *)} iteratorFn
373
+ * @returns {function(*, string)}
374
+ */
375
+function reverseParams(iteratorFn) {
376
+ return function(value, key) { iteratorFn(key, value); };
377
+}
378
+
379
+/**
380
+ * A consistent way of creating unique IDs in angular.
381
+ *
382
+ * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
383
+ * we hit number precision issues in JavaScript.
384
+ *
385
+ * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
386
+ *
387
+ * @returns {number} an unique alpha-numeric string
388
+ */
389
+function nextUid() {
390
+ return ++uid;
391
+}
392
+
393
+
394
+/**
395
+ * Set or clear the hashkey for an object.
396
+ * @param obj object
397
+ * @param h the hashkey (!truthy to delete the hashkey)
398
+ */
399
+function setHashKey(obj, h) {
400
+ if (h) {
401
+ obj.$$hashKey = h;
402
+ }
403
+ else {
404
+ delete obj.$$hashKey;
405
+ }
406
+}
407
+
408
+/**
409
+ * @ngdoc function
410
+ * @name angular.extend
411
+ * @module ng
412
+ * @kind function
413
+ *
414
+ * @description
415
+ * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
416
+ * to `dst`. You can specify multiple `src` objects.
417
+ *
418
+ * @param {Object} dst Destination object.
419
+ * @param {...Object} src Source object(s).
420
+ * @returns {Object} Reference to `dst`.
421
+ */
422
+function extend(dst) {
423
+ var h = dst.$$hashKey;
424
+
425
+ for (var i = 1, ii = arguments.length; i < ii; i++) {
426
+ var obj = arguments[i];
427
+ if (obj) {
428
+ var keys = Object.keys(obj);
429
+ for (var j = 0, jj = keys.length; j < jj; j++) {
430
+ var key = keys[j];
431
+ dst[key] = obj[key];
432
+ }
433
+ }
434
+ }
435
+
436
+ setHashKey(dst, h);
437
+ return dst;
438
+}
439
+
440
+function int(str) {
441
+ return parseInt(str, 10);
442
+}
443
+
444
+
445
+function inherit(parent, extra) {
446
+ return extend(new (extend(function() {}, {prototype:parent}))(), extra);
447
+}
448
+
449
+/**
450
+ * @ngdoc function
451
+ * @name angular.noop
452
+ * @module ng
453
+ * @kind function
454
+ *
455
+ * @description
456
+ * A function that performs no operations. This function can be useful when writing code in the
457
+ * functional style.
458
+ ```js
459
+ function foo(callback) {
460
+ var result = calculateResult();
461
+ (callback || angular.noop)(result);
462
+ }
463
+ ```
464
+ */
465
+function noop() {}
466
+noop.$inject = [];
467
+
468
+
469
+/**
470
+ * @ngdoc function
471
+ * @name angular.identity
472
+ * @module ng
473
+ * @kind function
474
+ *
475
+ * @description
476
+ * A function that returns its first argument. This function is useful when writing code in the
477
+ * functional style.
478
+ *
479
+ ```js
480
+ function transformer(transformationFn, value) {
481
+ return (transformationFn || angular.identity)(value);
482
+ };
483
+ ```
484
+ */
485
+function identity($) {return $;}
486
+identity.$inject = [];
487
+
488
+
489
+function valueFn(value) {return function() {return value;};}
490
+
491
+/**
492
+ * @ngdoc function
493
+ * @name angular.isUndefined
494
+ * @module ng
495
+ * @kind function
496
+ *
497
+ * @description
498
+ * Determines if a reference is undefined.
499
+ *
500
+ * @param {*} value Reference to check.
501
+ * @returns {boolean} True if `value` is undefined.
502
+ */
503
+function isUndefined(value){return typeof value === 'undefined';}
504
+
505
+
506
+/**
507
+ * @ngdoc function
508
+ * @name angular.isDefined
509
+ * @module ng
510
+ * @kind function
511
+ *
512
+ * @description
513
+ * Determines if a reference is defined.
514
+ *
515
+ * @param {*} value Reference to check.
516
+ * @returns {boolean} True if `value` is defined.
517
+ */
518
+function isDefined(value){return typeof value !== 'undefined';}
519
+
520
+
521
+/**
522
+ * @ngdoc function
523
+ * @name angular.isObject
524
+ * @module ng
525
+ * @kind function
526
+ *
527
+ * @description
528
+ * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
529
+ * considered to be objects. Note that JavaScript arrays are objects.
530
+ *
531
+ * @param {*} value Reference to check.
532
+ * @returns {boolean} True if `value` is an `Object` but not `null`.
533
+ */
534
+function isObject(value){
535
+ // http://jsperf.com/isobject4
536
+ return value !== null && typeof value === 'object';
537
+}
538
+
539
+
540
+/**
541
+ * @ngdoc function
542
+ * @name angular.isString
543
+ * @module ng
544
+ * @kind function
545
+ *
546
+ * @description
547
+ * Determines if a reference is a `String`.
548
+ *
549
+ * @param {*} value Reference to check.
550
+ * @returns {boolean} True if `value` is a `String`.
551
+ */
552
+function isString(value){return typeof value === 'string';}
553
+
554
+
555
+/**
556
+ * @ngdoc function
557
+ * @name angular.isNumber
558
+ * @module ng
559
+ * @kind function
560
+ *
561
+ * @description
562
+ * Determines if a reference is a `Number`.
563
+ *
564
+ * @param {*} value Reference to check.
565
+ * @returns {boolean} True if `value` is a `Number`.
566
+ */
567
+function isNumber(value){return typeof value === 'number';}
568
+
569
+
570
+/**
571
+ * @ngdoc function
572
+ * @name angular.isDate
573
+ * @module ng
574
+ * @kind function
575
+ *
576
+ * @description
577
+ * Determines if a value is a date.
578
+ *
579
+ * @param {*} value Reference to check.
580
+ * @returns {boolean} True if `value` is a `Date`.
581
+ */
582
+function isDate(value) {
583
+ return toString.call(value) === '[object Date]';
584
+}
585
+
586
+
587
+/**
588
+ * @ngdoc function
589
+ * @name angular.isArray
590
+ * @module ng
591
+ * @kind function
592
+ *
593
+ * @description
594
+ * Determines if a reference is an `Array`.
595
+ *
596
+ * @param {*} value Reference to check.
597
+ * @returns {boolean} True if `value` is an `Array`.
598
+ */
599
+var isArray = Array.isArray;
600
+
601
+/**
602
+ * @ngdoc function
603
+ * @name angular.isFunction
604
+ * @module ng
605
+ * @kind function
606
+ *
607
+ * @description
608
+ * Determines if a reference is a `Function`.
609
+ *
610
+ * @param {*} value Reference to check.
611
+ * @returns {boolean} True if `value` is a `Function`.
612
+ */
613
+function isFunction(value){return typeof value === 'function';}
614
+
615
+
616
+/**
617
+ * Determines if a value is a regular expression object.
618
+ *
619
+ * @private
620
+ * @param {*} value Reference to check.
621
+ * @returns {boolean} True if `value` is a `RegExp`.
622
+ */
623
+function isRegExp(value) {
624
+ return toString.call(value) === '[object RegExp]';
625
+}
626
+
627
+
628
+/**
629
+ * Checks if `obj` is a window object.
630
+ *
631
+ * @private
632
+ * @param {*} obj Object to check
633
+ * @returns {boolean} True if `obj` is a window obj.
634
+ */
635
+function isWindow(obj) {
636
+ return obj && obj.window === obj;
637
+}
638
+
639
+
640
+function isScope(obj) {
641
+ return obj && obj.$evalAsync && obj.$watch;
642
+}
643
+
644
+
645
+function isFile(obj) {
646
+ return toString.call(obj) === '[object File]';
647
+}
648
+
649
+
650
+function isBlob(obj) {
651
+ return toString.call(obj) === '[object Blob]';
652
+}
653
+
654
+
655
+function isBoolean(value) {
656
+ return typeof value === 'boolean';
657
+}
658
+
659
+
660
+function isPromiseLike(obj) {
661
+ return obj && isFunction(obj.then);
662
+}
663
+
664
+
665
+var trim = function(value) {
666
+ return isString(value) ? value.trim() : value;
667
+};
668
+
669
+
670
+/**
671
+ * @ngdoc function
672
+ * @name angular.isElement
673
+ * @module ng
674
+ * @kind function
675
+ *
676
+ * @description
677
+ * Determines if a reference is a DOM element (or wrapped jQuery element).
678
+ *
679
+ * @param {*} value Reference to check.
680
+ * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
681
+ */
682
+function isElement(node) {
683
+ return !!(node &&
684
+ (node.nodeName // we are a direct element
685
+ || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API
686
+}
687
+
688
+/**
689
+ * @param str 'key1,key2,...'
690
+ * @returns {object} in the form of {key1:true, key2:true, ...}
691
+ */
692
+function makeMap(str) {
693
+ var obj = {}, items = str.split(","), i;
694
+ for ( i = 0; i < items.length; i++ )
695
+ obj[ items[i] ] = true;
696
+ return obj;
697
+}
698
+
699
+
700
+function nodeName_(element) {
701
+ return lowercase(element.nodeName || element[0].nodeName);
702
+}
703
+
704
+
705
+/**
706
+ * @description
707
+ * Determines the number of elements in an array, the number of properties an object has, or
708
+ * the length of a string.
709
+ *
710
+ * Note: This function is used to augment the Object type in Angular expressions. See
711
+ * {@link angular.Object} for more information about Angular arrays.
712
+ *
713
+ * @param {Object|Array|string} obj Object, array, or string to inspect.
714
+ * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object
715
+ * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array.
716
+ */
717
+function size(obj, ownPropsOnly) {
718
+ var count = 0, key;
719
+
720
+ if (isArray(obj) || isString(obj)) {
721
+ return obj.length;
722
+ } else if (isObject(obj)) {
723
+ for (key in obj)
724
+ if (!ownPropsOnly || obj.hasOwnProperty(key))
725
+ count++;
726
+ }
727
+
728
+ return count;
729
+}
730
+
731
+
732
+function includes(array, obj) {
733
+ return Array.prototype.indexOf.call(array, obj) != -1;
734
+}
735
+
736
+function arrayRemove(array, value) {
737
+ var index = array.indexOf(value);
738
+ if (index >=0)
739
+ array.splice(index, 1);
740
+ return value;
741
+}
742
+
743
+function isLeafNode (node) {
744
+ if (node) {
745
+ switch (nodeName_(node)) {
746
+ case "option":
747
+ case "pre":
748
+ case "title":
749
+ return true;
750
+ }
751
+ }
752
+ return false;
753
+}
754
+
755
+/**
756
+ * @ngdoc function
757
+ * @name angular.copy
758
+ * @module ng
759
+ * @kind function
760
+ *
761
+ * @description
762
+ * Creates a deep copy of `source`, which should be an object or an array.
763
+ *
764
+ * * If no destination is supplied, a copy of the object or array is created.
765
+ * * If a destination is provided, all of its elements (for array) or properties (for objects)
766
+ * are deleted and then all elements/properties from the source are copied to it.
767
+ * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
768
+ * * If `source` is identical to 'destination' an exception will be thrown.
769
+ *
770
+ * @param {*} source The source that will be used to make a copy.
771
+ * Can be any type, including primitives, `null`, and `undefined`.
772
+ * @param {(Object|Array)=} destination Destination into which the source is copied. If
773
+ * provided, must be of the same type as `source`.
774
+ * @returns {*} The copy or updated `destination`, if `destination` was specified.
775
+ *
776
+ * @example
777
+ <example module="copyExample">
778
+ <file name="index.html">
779
+ <div ng-controller="ExampleController">
780
+ <form novalidate class="simple-form">
781
+ Name: <input type="text" ng-model="user.name" /><br />
782
+ E-mail: <input type="email" ng-model="user.email" /><br />
783
+ Gender: <input type="radio" ng-model="user.gender" value="male" />male
784
+ <input type="radio" ng-model="user.gender" value="female" />female<br />
785
+ <button ng-click="reset()">RESET</button>
786
+ <button ng-click="update(user)">SAVE</button>
787
+ </form>
788
+ <pre>form = {{user | json}}</pre>
789
+ <pre>master = {{master | json}}</pre>
790
+ </div>
791
+
792
+ <script>
793
+ angular.module('copyExample', [])
794
+ .controller('ExampleController', ['$scope', function($scope) {
795
+ $scope.master= {};
796
+
797
+ $scope.update = function(user) {
798
+ // Example with 1 argument
799
+ $scope.master= angular.copy(user);
800
+ };
801
+
802
+ $scope.reset = function() {
803
+ // Example with 2 arguments
804
+ angular.copy($scope.master, $scope.user);
805
+ };
806
+
807
+ $scope.reset();
808
+ }]);
809
+ </script>
810
+ </file>
811
+ </example>
812
+ */
813
+function copy(source, destination, stackSource, stackDest) {
814
+ if (isWindow(source) || isScope(source)) {
815
+ throw ngMinErr('cpws',
816
+ "Can't copy! Making copies of Window or Scope instances is not supported.");
817
+ }
818
+
819
+ if (!destination) {
820
+ destination = source;
821
+ if (source) {
822
+ if (isArray(source)) {
823
+ destination = copy(source, [], stackSource, stackDest);
824
+ } else if (isDate(source)) {
825
+ destination = new Date(source.getTime());
826
+ } else if (isRegExp(source)) {
827
+ destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
828
+ destination.lastIndex = source.lastIndex;
829
+ } else if (isObject(source)) {
830
+ var emptyObject = Object.create(Object.getPrototypeOf(source));
831
+ destination = copy(source, emptyObject, stackSource, stackDest);
832
+ }
833
+ }
834
+ } else {
835
+ if (source === destination) throw ngMinErr('cpi',
836
+ "Can't copy! Source and destination are identical.");
837
+
838
+ stackSource = stackSource || [];
839
+ stackDest = stackDest || [];
840
+
841
+ if (isObject(source)) {
842
+ var index = stackSource.indexOf(source);
843
+ if (index !== -1) return stackDest[index];
844
+
845
+ stackSource.push(source);
846
+ stackDest.push(destination);
847
+ }
848
+
849
+ var result;
850
+ if (isArray(source)) {
851
+ destination.length = 0;
852
+ for ( var i = 0; i < source.length; i++) {
853
+ result = copy(source[i], null, stackSource, stackDest);
854
+ if (isObject(source[i])) {
855
+ stackSource.push(source[i]);
856
+ stackDest.push(result);
857
+ }
858
+ destination.push(result);
859
+ }
860
+ } else {
861
+ var h = destination.$$hashKey;
862
+ if (isArray(destination)) {
863
+ destination.length = 0;
864
+ } else {
865
+ forEach(destination, function(value, key) {
866
+ delete destination[key];
867
+ });
868
+ }
869
+ for ( var key in source) {
870
+ if(source.hasOwnProperty(key)) {
871
+ result = copy(source[key], null, stackSource, stackDest);
872
+ if (isObject(source[key])) {
873
+ stackSource.push(source[key]);
874
+ stackDest.push(result);
875
+ }
876
+ destination[key] = result;
877
+ }
878
+ }
879
+ setHashKey(destination,h);
880
+ }
881
+
882
+ }
883
+ return destination;
884
+}
885
+
886
+/**
887
+ * Creates a shallow copy of an object, an array or a primitive.
888
+ *
889
+ * Assumes that there are no proto properties for objects.
890
+ */
891
+function shallowCopy(src, dst) {
892
+ if (isArray(src)) {
893
+ dst = dst || [];
894
+
895
+ for (var i = 0, ii = src.length; i < ii; i++) {
896
+ dst[i] = src[i];
897
+ }
898
+ } else if (isObject(src)) {
899
+ dst = dst || {};
900
+
901
+ for (var key in src) {
902
+ if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
903
+ dst[key] = src[key];
904
+ }
905
+ }
906
+ }
907
+
908
+ return dst || src;
909
+}
910
+
911
+
912
+/**
913
+ * @ngdoc function
914
+ * @name angular.equals
915
+ * @module ng
916
+ * @kind function
917
+ *
918
+ * @description
919
+ * Determines if two objects or two values are equivalent. Supports value types, regular
920
+ * expressions, arrays and objects.
921
+ *
922
+ * Two objects or values are considered equivalent if at least one of the following is true:
923
+ *
924
+ * * Both objects or values pass `===` comparison.
925
+ * * Both objects or values are of the same type and all of their properties are equal by
926
+ * comparing them with `angular.equals`.
927
+ * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
928
+ * * Both values represent the same regular expression (In JavaScript,
929
+ * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
930
+ * representation matches).
931
+ *
932
+ * During a property comparison, properties of `function` type and properties with names
933
+ * that begin with `$` are ignored.
934
+ *
935
+ * Scope and DOMWindow objects are being compared only by identify (`===`).
936
+ *
937
+ * @param {*} o1 Object or value to compare.
938
+ * @param {*} o2 Object or value to compare.
939
+ * @returns {boolean} True if arguments are equal.
940
+ */
941
+function equals(o1, o2) {
942
+ if (o1 === o2) return true;
943
+ if (o1 === null || o2 === null) return false;
944
+ if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
945
+ var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
946
+ if (t1 == t2) {
947
+ if (t1 == 'object') {
948
+ if (isArray(o1)) {
949
+ if (!isArray(o2)) return false;
950
+ if ((length = o1.length) == o2.length) {
951
+ for(key=0; key<length; key++) {
952
+ if (!equals(o1[key], o2[key])) return false;
953
+ }
954
+ return true;
955
+ }
956
+ } else if (isDate(o1)) {
957
+ if (!isDate(o2)) return false;
958
+ return equals(o1.getTime(), o2.getTime());
959
+ } else if (isRegExp(o1) && isRegExp(o2)) {
960
+ return o1.toString() == o2.toString();
961
+ } else {
962
+ if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
963
+ keySet = {};
964
+ for(key in o1) {
965
+ if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
966
+ if (!equals(o1[key], o2[key])) return false;
967
+ keySet[key] = true;
968
+ }
969
+ for(key in o2) {
970
+ if (!keySet.hasOwnProperty(key) &&
971
+ key.charAt(0) !== '$' &&
972
+ o2[key] !== undefined &&
973
+ !isFunction(o2[key])) return false;
974
+ }
975
+ return true;
976
+ }
977
+ }
978
+ }
979
+ return false;
980
+}
981
+
982
+var csp = function() {
983
+ if (isDefined(csp.isActive_)) return csp.isActive_;
984
+
985
+ var active = !!(document.querySelector('[ng-csp]') ||
986
+ document.querySelector('[data-ng-csp]'));
987
+
988
+ if (!active) {
989
+ try {
990
+ /* jshint -W031, -W054 */
991
+ new Function('');
992
+ /* jshint +W031, +W054 */
993
+ } catch (e) {
994
+ active = true;
995
+ }
996
+ }
997
+
998
+ return (csp.isActive_ = active);
999
+};
1000
+
1001
+
1002
+
1003
+function concat(array1, array2, index) {
1004
+ return array1.concat(slice.call(array2, index));
1005
+}
1006
+
1007
+function sliceArgs(args, startIndex) {
1008
+ return slice.call(args, startIndex || 0);
1009
+}
1010
+
1011
+
1012
+/* jshint -W101 */
1013
+/**
1014
+ * @ngdoc function
1015
+ * @name angular.bind
1016
+ * @module ng
1017
+ * @kind function
1018
+ *
1019
+ * @description
1020
+ * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
1021
+ * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
1022
+ * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
1023
+ * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
1024
+ *
1025
+ * @param {Object} self Context which `fn` should be evaluated in.
1026
+ * @param {function()} fn Function to be bound.
1027
+ * @param {...*} args Optional arguments to be prebound to the `fn` function call.
1028
+ * @returns {function()} Function that wraps the `fn` with all the specified bindings.
1029
+ */
1030
+/* jshint +W101 */
1031
+function bind(self, fn) {
1032
+ var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
1033
+ if (isFunction(fn) && !(fn instanceof RegExp)) {
1034
+ return curryArgs.length
1035
+ ? function() {
1036
+ return arguments.length
1037
+ ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0)))
1038
+ : fn.apply(self, curryArgs);
1039
+ }
1040
+ : function() {
1041
+ return arguments.length
1042
+ ? fn.apply(self, arguments)
1043
+ : fn.call(self);
1044
+ };
1045
+ } else {
1046
+ // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
1047
+ return fn;
1048
+ }
1049
+}
1050
+
1051
+
1052
+function toJsonReplacer(key, value) {
1053
+ var val = value;
1054
+
1055
+ if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
1056
+ val = undefined;
1057
+ } else if (isWindow(value)) {
1058
+ val = '$WINDOW';
1059
+ } else if (value && document === value) {
1060
+ val = '$DOCUMENT';
1061
+ } else if (isScope(value)) {
1062
+ val = '$SCOPE';
1063
+ }
1064
+
1065
+ return val;
1066
+}
1067
+
1068
+
1069
+/**
1070
+ * @ngdoc function
1071
+ * @name angular.toJson
1072
+ * @module ng
1073
+ * @kind function
1074
+ *
1075
+ * @description
1076
+ * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
1077
+ * stripped since angular uses this notation internally.
1078
+ *
1079
+ * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
1080
+ * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
1081
+ * @returns {string|undefined} JSON-ified string representing `obj`.
1082
+ */
1083
+function toJson(obj, pretty) {
1084
+ if (typeof obj === 'undefined') return undefined;
1085
+ return JSON.stringify(obj, toJsonReplacer, pretty ? ' ' : null);
1086
+}
1087
+
1088
+
1089
+/**
1090
+ * @ngdoc function
1091
+ * @name angular.fromJson
1092
+ * @module ng
1093
+ * @kind function
1094
+ *
1095
+ * @description
1096
+ * Deserializes a JSON string.
1097
+ *
1098
+ * @param {string} json JSON string to deserialize.
1099
+ * @returns {Object|Array|string|number} Deserialized thingy.
1100
+ */
1101
+function fromJson(json) {
1102
+ return isString(json)
1103
+ ? JSON.parse(json)
1104
+ : json;
1105
+}
1106
+
1107
+
1108
+/**
1109
+ * @returns {string} Returns the string representation of the element.
1110
+ */
1111
+function startingTag(element) {
1112
+ element = jqLite(element).clone();
1113
+ try {
1114
+ // turns out IE does not let you set .html() on elements which
1115
+ // are not allowed to have children. So we just ignore it.
1116
+ element.empty();
1117
+ } catch(e) {}
1118
+ var elemHtml = jqLite('<div>').append(element).html();
1119
+ try {
1120
+ return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
1121
+ elemHtml.
1122
+ match(/^(<[^>]+>)/)[1].
1123
+ replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
1124
+ } catch(e) {
1125
+ return lowercase(elemHtml);
1126
+ }
1127
+
1128
+}
1129
+
1130
+
1131
+/////////////////////////////////////////////////
1132
+
1133
+/**
1134
+ * Tries to decode the URI component without throwing an exception.
1135
+ *
1136
+ * @private
1137
+ * @param str value potential URI component to check.
1138
+ * @returns {boolean} True if `value` can be decoded
1139
+ * with the decodeURIComponent function.
1140
+ */
1141
+function tryDecodeURIComponent(value) {
1142
+ try {
1143
+ return decodeURIComponent(value);
1144
+ } catch(e) {
1145
+ // Ignore any invalid uri component
1146
+ }
1147
+}
1148
+
1149
+
1150
+/**
1151
+ * Parses an escaped url query string into key-value pairs.
1152
+ * @returns {Object.<string,boolean|Array>}
1153
+ */
1154
+function parseKeyValue(/**string*/keyValue) {
1155
+ var obj = {}, key_value, key;
1156
+ forEach((keyValue || "").split('&'), function(keyValue) {
1157
+ if ( keyValue ) {
1158
+ key_value = keyValue.replace(/\+/g,'%20').split('=');
1159
+ key = tryDecodeURIComponent(key_value[0]);
1160
+ if ( isDefined(key) ) {
1161
+ var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
1162
+ if (!hasOwnProperty.call(obj, key)) {
1163
+ obj[key] = val;
1164
+ } else if(isArray(obj[key])) {
1165
+ obj[key].push(val);
1166
+ } else {
1167
+ obj[key] = [obj[key],val];
1168
+ }
1169
+ }
1170
+ }
1171
+ });
1172
+ return obj;
1173
+}
1174
+
1175
+function toKeyValue(obj) {
1176
+ var parts = [];
1177
+ forEach(obj, function(value, key) {
1178
+ if (isArray(value)) {
1179
+ forEach(value, function(arrayValue) {
1180
+ parts.push(encodeUriQuery(key, true) +
1181
+ (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
1182
+ });
1183
+ } else {
1184
+ parts.push(encodeUriQuery(key, true) +
1185
+ (value === true ? '' : '=' + encodeUriQuery(value, true)));
1186
+ }
1187
+ });
1188
+ return parts.length ? parts.join('&') : '';
1189
+}
1190
+
1191
+
1192
+/**
1193
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
1194
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
1195
+ * segments:
1196
+ * segment = *pchar
1197
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
1198
+ * pct-encoded = "%" HEXDIG HEXDIG
1199
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
1200
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
1201
+ * / "*" / "+" / "," / ";" / "="
1202
+ */
1203
+function encodeUriSegment(val) {
1204
+ return encodeUriQuery(val, true).
1205
+ replace(/%26/gi, '&').
1206
+ replace(/%3D/gi, '=').
1207
+ replace(/%2B/gi, '+');
1208
+}
1209
+
1210
+
1211
+/**
1212
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
1213
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
1214
+ * encoded per http://tools.ietf.org/html/rfc3986:
1215
+ * query = *( pchar / "/" / "?" )
1216
+ * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
1217
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
1218
+ * pct-encoded = "%" HEXDIG HEXDIG
1219
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
1220
+ * / "*" / "+" / "," / ";" / "="
1221
+ */
1222
+function encodeUriQuery(val, pctEncodeSpaces) {
1223
+ return encodeURIComponent(val).
1224
+ replace(/%40/gi, '@').
1225
+ replace(/%3A/gi, ':').
1226
+ replace(/%24/g, '$').
1227
+ replace(/%2C/gi, ',').
1228
+ replace(/%3B/gi, ';').
1229
+ replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
1230
+}
1231
+
1232
+var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
1233
+
1234
+function getNgAttribute(element, ngAttr) {
1235
+ var attr, i, ii = ngAttrPrefixes.length;
1236
+ element = jqLite(element);
1237
+ for (i=0; i<ii; ++i) {
1238
+ attr = ngAttrPrefixes[i] + ngAttr;
1239
+ if (isString(attr = element.attr(attr))) {
1240
+ return attr;
1241
+ }
1242
+ }
1243
+ return null;
1244
+}
1245
+
1246
+/**
1247
+ * @ngdoc directive
1248
+ * @name ngApp
1249
+ * @module ng
1250
+ *
1251
+ * @element ANY
1252
+ * @param {angular.Module} ngApp an optional application
1253
+ * {@link angular.module module} name to load.
1254
+ * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
1255
+ * created in "strict-di" mode. This means that the application will fail to invoke functions which
1256
+ * do not use explicit function annotation (and are thus unsuitable for minification), as described
1257
+ * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
1258
+ * tracking down the root of these bugs.
1259
+ *
1260
+ * @description
1261
+ *
1262
+ * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
1263
+ * designates the **root element** of the application and is typically placed near the root element
1264
+ * of the page - e.g. on the `<body>` or `<html>` tags.
1265
+ *
1266
+ * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
1267
+ * found in the document will be used to define the root element to auto-bootstrap as an
1268
+ * application. To run multiple applications in an HTML document you must manually bootstrap them using
1269
+ * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
1270
+ *
1271
+ * You can specify an **AngularJS module** to be used as the root module for the application. This
1272
+ * module will be loaded into the {@link auto.$injector} when the application is bootstrapped and
1273
+ * should contain the application code needed or have dependencies on other modules that will
1274
+ * contain the code. See {@link angular.module} for more information.
1275
+ *
1276
+ * In the example below if the `ngApp` directive were not placed on the `html` element then the
1277
+ * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
1278
+ * would not be resolved to `3`.
1279
+ *
1280
+ * `ngApp` is the easiest, and most common, way to bootstrap an application.
1281
+ *
1282
+ <example module="ngAppDemo">
1283
+ <file name="index.html">
1284
+ <div ng-controller="ngAppDemoController">
1285
+ I can add: {{a}} + {{b}} = {{ a+b }}
1286
+ </div>
1287
+ </file>
1288
+ <file name="script.js">
1289
+ angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
1290
+ $scope.a = 1;
1291
+ $scope.b = 2;
1292
+ });
1293
+ </file>
1294
+ </example>
1295
+ *
1296
+ * Using `ngStrictDi`, you would see something like this:
1297
+ *
1298
+ <example ng-app-included="true">
1299
+ <file name="index.html">
1300
+ <div ng-app="ngAppStrictDemo" ng-strict-di>
1301
+ <div ng-controller="GoodController1">
1302
+ I can add: {{a}} + {{b}} = {{ a+b }}
1303
+
1304
+ <p>This renders because the controller does not fail to
1305
+ instantiate, by using explicit annotation style (see
1306
+ script.js for details)
1307
+ </p>
1308
+ </div>
1309
+
1310
+ <div ng-controller="GoodController2">
1311
+ Name: <input ng-model="name"><br />
1312
+ Hello, {{name}}!
1313
+
1314
+ <p>This renders because the controller does not fail to
1315
+ instantiate, by using explicit annotation style
1316
+ (see script.js for details)
1317
+ </p>
1318
+ </div>
1319
+
1320
+ <div ng-controller="BadController">
1321
+ I can add: {{a}} + {{b}} = {{ a+b }}
1322
+
1323
+ <p>The controller could not be instantiated, due to relying
1324
+ on automatic function annotations (which are disabled in
1325
+ strict mode). As such, the content of this section is not
1326
+ interpolated, and there should be an error in your web console.
1327
+ </p>
1328
+ </div>
1329
+ </div>
1330
+ </file>
1331
+ <file name="script.js">
1332
+ angular.module('ngAppStrictDemo', [])
1333
+ // BadController will fail to instantiate, due to relying on automatic function annotation,
1334
+ // rather than an explicit annotation
1335
+ .controller('BadController', function($scope) {
1336
+ $scope.a = 1;
1337
+ $scope.b = 2;
1338
+ })
1339
+ // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
1340
+ // due to using explicit annotations using the array style and $inject property, respectively.
1341
+ .controller('GoodController1', ['$scope', function($scope) {
1342
+ $scope.a = 1;
1343
+ $scope.b = 2;
1344
+ }])
1345
+ .controller('GoodController2', GoodController2);
1346
+ function GoodController2($scope) {
1347
+ $scope.name = "World";
1348
+ }
1349
+ GoodController2.$inject = ['$scope'];
1350
+ </file>
1351
+ <file name="style.css">
1352
+ div[ng-controller] {
1353
+ margin-bottom: 1em;
1354
+ -webkit-border-radius: 4px;
1355
+ border-radius: 4px;
1356
+ border: 1px solid;
1357
+ padding: .5em;
1358
+ }
1359
+ div[ng-controller^=Good] {
1360
+ border-color: #d6e9c6;
1361
+ background-color: #dff0d8;
1362
+ color: #3c763d;
1363
+ }
1364
+ div[ng-controller^=Bad] {
1365
+ border-color: #ebccd1;
1366
+ background-color: #f2dede;
1367
+ color: #a94442;
1368
+ margin-bottom: 0;
1369
+ }
1370
+ </file>
1371
+ </example>
1372
+ */
1373
+function angularInit(element, bootstrap) {
1374
+ var appElement,
1375
+ module,
1376
+ config = {};
1377
+
1378
+ // The element `element` has priority over any other element
1379
+ forEach(ngAttrPrefixes, function(prefix) {
1380
+ var name = prefix + 'app';
1381
+
1382
+ if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
1383
+ appElement = element;
1384
+ module = element.getAttribute(name);
1385
+ }
1386
+ });
1387
+ forEach(ngAttrPrefixes, function(prefix) {
1388
+ var name = prefix + 'app';
1389
+ var candidate;
1390
+
1391
+ if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
1392
+ appElement = candidate;
1393
+ module = candidate.getAttribute(name);
1394
+ }
1395
+ });
1396
+ if (appElement) {
1397
+ config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
1398
+ bootstrap(appElement, module ? [module] : [], config);
1399
+ }
1400
+}
1401
+
1402
+/**
1403
+ * @ngdoc function
1404
+ * @name angular.bootstrap
1405
+ * @module ng
1406
+ * @description
1407
+ * Use this function to manually start up angular application.
1408
+ *
1409
+ * See: {@link guide/bootstrap Bootstrap}
1410
+ *
1411
+ * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
1412
+ * They must use {@link ng.directive:ngApp ngApp}.
1413
+ *
1414
+ * Angular will detect if it has been loaded into the browser more than once and only allow the
1415
+ * first loaded script to be bootstrapped and will report a warning to the browser console for
1416
+ * each of the subsequent scripts. This prevents strange results in applications, where otherwise
1417
+ * multiple instances of Angular try to work on the DOM.
1418
+ *
1419
+ * ```html
1420
+ * <!doctype html>
1421
+ * <html>
1422
+ * <body>
1423
+ * <div ng-controller="WelcomeController">
1424
+ * {{greeting}}
1425
+ * </div>
1426
+ *
1427
+ * <script src="angular.js"></script>
1428
+ * <script>
1429
+ * var app = angular.module('demo', [])
1430
+ * .controller('WelcomeController', function($scope) {
1431
+ * $scope.greeting = 'Welcome!';
1432
+ * });
1433
+ * angular.bootstrap(document, ['demo']);
1434
+ * </script>
1435
+ * </body>
1436
+ * </html>
1437
+ * ```
1438
+ *
1439
+ * @param {DOMElement} element DOM element which is the root of angular application.
1440
+ * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
1441
+ * Each item in the array should be the name of a predefined module or a (DI annotated)
1442
+ * function that will be invoked by the injector as a run block.
1443
+ * See: {@link angular.module modules}
1444
+ * @param {Object=} config an object for defining configuration options for the application. The
1445
+ * following keys are supported:
1446
+ *
1447
+ * - `strictDi`: disable automatic function annotation for the application. This is meant to
1448
+ * assist in finding bugs which break minified code.
1449
+ *
1450
+ * @returns {auto.$injector} Returns the newly created injector for this app.
1451
+ */
1452
+function bootstrap(element, modules, config) {
1453
+ if (!isObject(config)) config = {};
1454
+ var defaultConfig = {
1455
+ strictDi: false
1456
+ };
1457
+ config = extend(defaultConfig, config);
1458
+ var doBootstrap = function() {
1459
+ element = jqLite(element);
1460
+
1461
+ if (element.injector()) {
1462
+ var tag = (element[0] === document) ? 'document' : startingTag(element);
1463
+ //Encode angle brackets to prevent input from being sanitized to empty string #8683
1464
+ throw ngMinErr(
1465
+ 'btstrpd',
1466
+ "App Already Bootstrapped with this Element '{0}'",
1467
+ tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
1468
+ }
1469
+
1470
+ modules = modules || [];
1471
+ modules.unshift(['$provide', function($provide) {
1472
+ $provide.value('$rootElement', element);
1473
+ }]);
1474
+
1475
+ if (config.debugInfoEnabled) {
1476
+ // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
1477
+ modules.push(['$compileProvider', function($compileProvider) {
1478
+ $compileProvider.debugInfoEnabled(true);
1479
+ }]);
1480
+ }
1481
+
1482
+ modules.unshift('ng');
1483
+ var injector = createInjector(modules, config.strictDi);
1484
+ injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
1485
+ function bootstrapApply(scope, element, compile, injector) {
1486
+ scope.$apply(function() {
1487
+ element.data('$injector', injector);
1488
+ compile(element)(scope);
1489
+ });
1490
+ }]
1491
+ );
1492
+ return injector;
1493
+ };
1494
+
1495
+ var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
1496
+ var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
1497
+
1498
+ if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
1499
+ config.debugInfoEnabled = true;
1500
+ window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
1501
+ }
1502
+
1503
+ if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
1504
+ return doBootstrap();
1505
+ }
1506
+
1507
+ window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
1508
+ angular.resumeBootstrap = function(extraModules) {
1509
+ forEach(extraModules, function(module) {
1510
+ modules.push(module);
1511
+ });
1512
+ doBootstrap();
1513
+ };
1514
+}
1515
+
1516
+/**
1517
+ * @ngdoc function
1518
+ * @name angular.reloadWithDebugInfo
1519
+ * @module ng
1520
+ * @description
1521
+ * Use this function to reload the current application with debug information turned on.
1522
+ * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
1523
+ *
1524
+ * See {@link ng.$compileProvider#debugInfoEnabled} for more.
1525
+ */
1526
+function reloadWithDebugInfo() {
1527
+ window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
1528
+ window.location.reload();
1529
+}
1530
+
1531
+/**
1532
+ * @name angular.getTestability
1533
+ * @module ng
1534
+ * @description
1535
+ * Get the testability service for the instance of Angular on the given
1536
+ * element.
1537
+ * @param {DOMElement} element DOM element which is the root of angular application.
1538
+ */
1539
+function getTestability(rootElement) {
1540
+ return angular.element(rootElement).injector().get('$$testability');
1541
+}
1542
+
1543
+var SNAKE_CASE_REGEXP = /[A-Z]/g;
1544
+function snake_case(name, separator) {
1545
+ separator = separator || '_';
1546
+ return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
1547
+ return (pos ? separator : '') + letter.toLowerCase();
1548
+ });
1549
+}
1550
+
1551
+var bindJQueryFired = false;
1552
+var skipDestroyOnNextJQueryCleanData;
1553
+function bindJQuery() {
1554
+ var originalCleanData;
1555
+
1556
+ if (bindJQueryFired) {
1557
+ return;
1558
+ }
1559
+
1560
+ // bind to jQuery if present;
1561
+ jQuery = window.jQuery;
1562
+ // Use jQuery if it exists with proper functionality, otherwise default to us.
1563
+ // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
1564
+ // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
1565
+ // versions. It will not work for sure with jQuery <1.7, though.
1566
+ if (jQuery && jQuery.fn.on) {
1567
+ jqLite = jQuery;
1568
+ extend(jQuery.fn, {
1569
+ scope: JQLitePrototype.scope,
1570
+ isolateScope: JQLitePrototype.isolateScope,
1571
+ controller: JQLitePrototype.controller,
1572
+ injector: JQLitePrototype.injector,
1573
+ inheritedData: JQLitePrototype.inheritedData
1574
+ });
1575
+
1576
+ // All nodes removed from the DOM via various jQuery APIs like .remove()
1577
+ // are passed through jQuery.cleanData. Monkey-patch this method to fire
1578
+ // the $destroy event on all removed nodes.
1579
+ originalCleanData = jQuery.cleanData;
1580
+ jQuery.cleanData = function(elems) {
1581
+ var events;
1582
+ if (!skipDestroyOnNextJQueryCleanData) {
1583
+ for (var i = 0, elem; (elem = elems[i]) != null; i++) {
1584
+ events = jQuery._data(elem, "events");
1585
+ if (events && events.$destroy) {
1586
+ jQuery(elem).triggerHandler('$destroy');
1587
+ }
1588
+ }
1589
+ } else {
1590
+ skipDestroyOnNextJQueryCleanData = false;
1591
+ }
1592
+ originalCleanData(elems);
1593
+ };
1594
+ } else {
1595
+ jqLite = JQLite;
1596
+ }
1597
+
1598
+ angular.element = jqLite;
1599
+
1600
+ // Prevent double-proxying.
1601
+ bindJQueryFired = true;
1602
+}
1603
+
1604
+/**
1605
+ * throw error if the argument is falsy.
1606
+ */
1607
+function assertArg(arg, name, reason) {
1608
+ if (!arg) {
1609
+ throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
1610
+ }
1611
+ return arg;
1612
+}
1613
+
1614
+function assertArgFn(arg, name, acceptArrayAnnotation) {
1615
+ if (acceptArrayAnnotation && isArray(arg)) {
1616
+ arg = arg[arg.length - 1];
1617
+ }
1618
+
1619
+ assertArg(isFunction(arg), name, 'not a function, got ' +
1620
+ (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
1621
+ return arg;
1622
+}
1623
+
1624
+/**
1625
+ * throw error if the name given is hasOwnProperty
1626
+ * @param {String} name the name to test
1627
+ * @param {String} context the context in which the name is used, such as module or directive
1628
+ */
1629
+function assertNotHasOwnProperty(name, context) {
1630
+ if (name === 'hasOwnProperty') {
1631
+ throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
1632
+ }
1633
+}
1634
+
1635
+/**
1636
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
1637
+ * @param {Object} obj starting object
1638
+ * @param {String} path path to traverse
1639
+ * @param {boolean} [bindFnToScope=true]
1640
+ * @returns {Object} value as accessible by path
1641
+ */
1642
+//TODO(misko): this function needs to be removed
1643
+function getter(obj, path, bindFnToScope) {
1644
+ if (!path) return obj;
1645
+ var keys = path.split('.');
1646
+ var key;
1647
+ var lastInstance = obj;
1648
+ var len = keys.length;
1649
+
1650
+ for (var i = 0; i < len; i++) {
1651
+ key = keys[i];
1652
+ if (obj) {
1653
+ obj = (lastInstance = obj)[key];
1654
+ }
1655
+ }
1656
+ if (!bindFnToScope && isFunction(obj)) {
1657
+ return bind(lastInstance, obj);
1658
+ }
1659
+ return obj;
1660
+}
1661
+
1662
+/**
1663
+ * Return the DOM siblings between the first and last node in the given array.
1664
+ * @param {Array} array like object
1665
+ * @returns {jqLite} jqLite collection containing the nodes
1666
+ */
1667
+function getBlockNodes(nodes) {
1668
+ // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original
1669
+ // collection, otherwise update the original collection.
1670
+ var node = nodes[0];
1671
+ var endNode = nodes[nodes.length - 1];
1672
+ var blockNodes = [node];
1673
+
1674
+ do {
1675
+ node = node.nextSibling;
1676
+ if (!node) break;
1677
+ blockNodes.push(node);
1678
+ } while (node !== endNode);
1679
+
1680
+ return jqLite(blockNodes);
1681
+}
1682
+
1683
+
1684
+/**
1685
+ * Creates a new object without a prototype. This object is useful for lookup without having to
1686
+ * guard against prototypically inherited properties via hasOwnProperty.
1687
+ *
1688
+ * Related micro-benchmarks:
1689
+ * - http://jsperf.com/object-create2
1690
+ * - http://jsperf.com/proto-map-lookup/2
1691
+ * - http://jsperf.com/for-in-vs-object-keys2
1692
+ *
1693
+ * @returns {Object}
1694
+ */
1695
+function createMap() {
1696
+ return Object.create(null);
1697
+}
1698
+
1699
+var NODE_TYPE_ELEMENT = 1;
1700
+var NODE_TYPE_TEXT = 3;
1701
+var NODE_TYPE_COMMENT = 8;
1702
+var NODE_TYPE_DOCUMENT = 9;
1703
+var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
1704
+
1705
+/**
1706
+ * @ngdoc type
1707
+ * @name angular.Module
1708
+ * @module ng
1709
+ * @description
1710
+ *
1711
+ * Interface for configuring angular {@link angular.module modules}.
1712
+ */
1713
+
1714
+function setupModuleLoader(window) {
1715
+
1716
+ var $injectorMinErr = minErr('$injector');
1717
+ var ngMinErr = minErr('ng');
1718
+
1719
+ function ensure(obj, name, factory) {
1720
+ return obj[name] || (obj[name] = factory());
1721
+ }
1722
+
1723
+ var angular = ensure(window, 'angular', Object);
1724
+
1725
+ // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
1726
+ angular.$$minErr = angular.$$minErr || minErr;
1727
+
1728
+ return ensure(angular, 'module', function() {
1729
+ /** @type {Object.<string, angular.Module>} */
1730
+ var modules = {};
1731
+
1732
+ /**
1733
+ * @ngdoc function
1734
+ * @name angular.module
1735
+ * @module ng
1736
+ * @description
1737
+ *
1738
+ * The `angular.module` is a global place for creating, registering and retrieving Angular
1739
+ * modules.
1740
+ * All modules (angular core or 3rd party) that should be available to an application must be
1741
+ * registered using this mechanism.
1742
+ *
1743
+ * When passed two or more arguments, a new module is created. If passed only one argument, an
1744
+ * existing module (the name passed as the first argument to `module`) is retrieved.
1745
+ *
1746
+ *
1747
+ * # Module
1748
+ *
1749
+ * A module is a collection of services, directives, controllers, filters, and configuration information.
1750
+ * `angular.module` is used to configure the {@link auto.$injector $injector}.
1751
+ *
1752
+ * ```js
1753
+ * // Create a new module
1754
+ * var myModule = angular.module('myModule', []);
1755
+ *
1756
+ * // register a new service
1757
+ * myModule.value('appName', 'MyCoolApp');
1758
+ *
1759
+ * // configure existing services inside initialization blocks.
1760
+ * myModule.config(['$locationProvider', function($locationProvider) {
1761
+ * // Configure existing providers
1762
+ * $locationProvider.hashPrefix('!');
1763
+ * }]);
1764
+ * ```
1765
+ *
1766
+ * Then you can create an injector and load your modules like this:
1767
+ *
1768
+ * ```js
1769
+ * var injector = angular.injector(['ng', 'myModule'])
1770
+ * ```
1771
+ *
1772
+ * However it's more likely that you'll just use
1773
+ * {@link ng.directive:ngApp ngApp} or
1774
+ * {@link angular.bootstrap} to simplify this process for you.
1775
+ *
1776
+ * @param {!string} name The name of the module to create or retrieve.
1777
+ * @param {!Array.<string>=} requires If specified then new module is being created. If
1778
+ * unspecified then the module is being retrieved for further configuration.
1779
+ * @param {Function=} configFn Optional configuration function for the module. Same as
1780
+ * {@link angular.Module#config Module#config()}.
1781
+ * @returns {module} new module with the {@link angular.Module} api.
1782
+ */
1783
+ return function module(name, requires, configFn) {
1784
+ var assertNotHasOwnProperty = function(name, context) {
1785
+ if (name === 'hasOwnProperty') {
1786
+ throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
1787
+ }
1788
+ };
1789
+
1790
+ assertNotHasOwnProperty(name, 'module');
1791
+ if (requires && modules.hasOwnProperty(name)) {
1792
+ modules[name] = null;
1793
+ }
1794
+ return ensure(modules, name, function() {
1795
+ if (!requires) {
1796
+ throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
1797
+ "the module name or forgot to load it. If registering a module ensure that you " +
1798
+ "specify the dependencies as the second argument.", name);
1799
+ }
1800
+
1801
+ /** @type {!Array.<Array.<*>>} */
1802
+ var invokeQueue = [];
1803
+
1804
+ /** @type {!Array.<Function>} */
1805
+ var configBlocks = [];
1806
+
1807
+ /** @type {!Array.<Function>} */
1808
+ var runBlocks = [];
1809
+
1810
+ var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
1811
+
1812
+ /** @type {angular.Module} */
1813
+ var moduleInstance = {
1814
+ // Private state
1815
+ _invokeQueue: invokeQueue,
1816
+ _configBlocks: configBlocks,
1817
+ _runBlocks: runBlocks,
1818
+
1819
+ /**
1820
+ * @ngdoc property
1821
+ * @name angular.Module#requires
1822
+ * @module ng
1823
+ *
1824
+ * @description
1825
+ * Holds the list of modules which the injector will load before the current module is
1826
+ * loaded.
1827
+ */
1828
+ requires: requires,
1829
+
1830
+ /**
1831
+ * @ngdoc property
1832
+ * @name angular.Module#name
1833
+ * @module ng
1834
+ *
1835
+ * @description
1836
+ * Name of the module.
1837
+ */
1838
+ name: name,
1839
+
1840
+
1841
+ /**
1842
+ * @ngdoc method
1843
+ * @name angular.Module#provider
1844
+ * @module ng
1845
+ * @param {string} name service name
1846
+ * @param {Function} providerType Construction function for creating new instance of the
1847
+ * service.
1848
+ * @description
1849
+ * See {@link auto.$provide#provider $provide.provider()}.
1850
+ */
1851
+ provider: invokeLater('$provide', 'provider'),
1852
+
1853
+ /**
1854
+ * @ngdoc method
1855
+ * @name angular.Module#factory
1856
+ * @module ng
1857
+ * @param {string} name service name
1858
+ * @param {Function} providerFunction Function for creating new instance of the service.
1859
+ * @description
1860
+ * See {@link auto.$provide#factory $provide.factory()}.
1861
+ */
1862
+ factory: invokeLater('$provide', 'factory'),
1863
+
1864
+ /**
1865
+ * @ngdoc method
1866
+ * @name angular.Module#service
1867
+ * @module ng
1868
+ * @param {string} name service name
1869
+ * @param {Function} constructor A constructor function that will be instantiated.
1870
+ * @description
1871
+ * See {@link auto.$provide#service $provide.service()}.
1872
+ */
1873
+ service: invokeLater('$provide', 'service'),
1874
+
1875
+ /**
1876
+ * @ngdoc method
1877
+ * @name angular.Module#value
1878
+ * @module ng
1879
+ * @param {string} name service name
1880
+ * @param {*} object Service instance object.
1881
+ * @description
1882
+ * See {@link auto.$provide#value $provide.value()}.
1883
+ */
1884
+ value: invokeLater('$provide', 'value'),
1885
+
1886
+ /**
1887
+ * @ngdoc method
1888
+ * @name angular.Module#constant
1889
+ * @module ng
1890
+ * @param {string} name constant name
1891
+ * @param {*} object Constant value.
1892
+ * @description
1893
+ * Because the constant are fixed, they get applied before other provide methods.
1894
+ * See {@link auto.$provide#constant $provide.constant()}.
1895
+ */
1896
+ constant: invokeLater('$provide', 'constant', 'unshift'),
1897
+
1898
+ /**
1899
+ * @ngdoc method
1900
+ * @name angular.Module#animation
1901
+ * @module ng
1902
+ * @param {string} name animation name
1903
+ * @param {Function} animationFactory Factory function for creating new instance of an
1904
+ * animation.
1905
+ * @description
1906
+ *
1907
+ * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
1908
+ *
1909
+ *
1910
+ * Defines an animation hook that can be later used with
1911
+ * {@link ngAnimate.$animate $animate} service and directives that use this service.
1912
+ *
1913
+ * ```js
1914
+ * module.animation('.animation-name', function($inject1, $inject2) {
1915
+ * return {
1916
+ * eventName : function(element, done) {
1917
+ * //code to run the animation
1918
+ * //once complete, then run done()
1919
+ * return function cancellationFunction(element) {
1920
+ * //code to cancel the animation
1921
+ * }
1922
+ * }
1923
+ * }
1924
+ * })
1925
+ * ```
1926
+ *
1927
+ * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and
1928
+ * {@link ngAnimate ngAnimate module} for more information.
1929
+ */
1930
+ animation: invokeLater('$animateProvider', 'register'),
1931
+
1932
+ /**
1933
+ * @ngdoc method
1934
+ * @name angular.Module#filter
1935
+ * @module ng
1936
+ * @param {string} name Filter name.
1937
+ * @param {Function} filterFactory Factory function for creating new instance of filter.
1938
+ * @description
1939
+ * See {@link ng.$filterProvider#register $filterProvider.register()}.
1940
+ */
1941
+ filter: invokeLater('$filterProvider', 'register'),
1942
+
1943
+ /**
1944
+ * @ngdoc method
1945
+ * @name angular.Module#controller
1946
+ * @module ng
1947
+ * @param {string|Object} name Controller name, or an object map of controllers where the
1948
+ * keys are the names and the values are the constructors.
1949
+ * @param {Function} constructor Controller constructor function.
1950
+ * @description
1951
+ * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
1952
+ */
1953
+ controller: invokeLater('$controllerProvider', 'register'),
1954
+
1955
+ /**
1956
+ * @ngdoc method
1957
+ * @name angular.Module#directive
1958
+ * @module ng
1959
+ * @param {string|Object} name Directive name, or an object map of directives where the
1960
+ * keys are the names and the values are the factories.
1961
+ * @param {Function} directiveFactory Factory function for creating new instance of
1962
+ * directives.
1963
+ * @description
1964
+ * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
1965
+ */
1966
+ directive: invokeLater('$compileProvider', 'directive'),
1967
+
1968
+ /**
1969
+ * @ngdoc method
1970
+ * @name angular.Module#config
1971
+ * @module ng
1972
+ * @param {Function} configFn Execute this function on module load. Useful for service
1973
+ * configuration.
1974
+ * @description
1975
+ * Use this method to register work which needs to be performed on module loading.
1976
+ * For more about how to configure services, see
1977
+ * {@link providers#providers_provider-recipe Provider Recipe}.
1978
+ */
1979
+ config: config,
1980
+
1981
+ /**
1982
+ * @ngdoc method
1983
+ * @name angular.Module#run
1984
+ * @module ng
1985
+ * @param {Function} initializationFn Execute this function after injector creation.
1986
+ * Useful for application initialization.
1987
+ * @description
1988
+ * Use this method to register work which should be performed when the injector is done
1989
+ * loading all modules.
1990
+ */
1991
+ run: function(block) {
1992
+ runBlocks.push(block);
1993
+ return this;
1994
+ }
1995
+ };
1996
+
1997
+ if (configFn) {
1998
+ config(configFn);
1999
+ }
2000
+
2001
+ return moduleInstance;
2002
+
2003
+ /**
2004
+ * @param {string} provider
2005
+ * @param {string} method
2006
+ * @param {String=} insertMethod
2007
+ * @returns {angular.Module}
2008
+ */
2009
+ function invokeLater(provider, method, insertMethod, queue) {
2010
+ if (!queue) queue = invokeQueue;
2011
+ return function() {
2012
+ queue[insertMethod || 'push']([provider, method, arguments]);
2013
+ return moduleInstance;
2014
+ };
2015
+ }
2016
+ });
2017
+ };
2018
+ });
2019
+
2020
+}
2021
+
2022
+/* global angularModule: true,
2023
+ version: true,
2024
+
2025
+ $LocaleProvider,
2026
+ $CompileProvider,
2027
+
2028
+ htmlAnchorDirective,
2029
+ inputDirective,
2030
+ inputDirective,
2031
+ formDirective,
2032
+ scriptDirective,
2033
+ selectDirective,
2034
+ styleDirective,
2035
+ optionDirective,
2036
+ ngBindDirective,
2037
+ ngBindHtmlDirective,
2038
+ ngBindTemplateDirective,
2039
+ ngClassDirective,
2040
+ ngClassEvenDirective,
2041
+ ngClassOddDirective,
2042
+ ngCspDirective,
2043
+ ngCloakDirective,
2044
+ ngControllerDirective,
2045
+ ngFormDirective,
2046
+ ngHideDirective,
2047
+ ngIfDirective,
2048
+ ngIncludeDirective,
2049
+ ngIncludeFillContentDirective,
2050
+ ngInitDirective,
2051
+ ngNonBindableDirective,
2052
+ ngPluralizeDirective,
2053
+ ngRepeatDirective,
2054
+ ngShowDirective,
2055
+ ngStyleDirective,
2056
+ ngSwitchDirective,
2057
+ ngSwitchWhenDirective,
2058
+ ngSwitchDefaultDirective,
2059
+ ngOptionsDirective,
2060
+ ngTranscludeDirective,
2061
+ ngModelDirective,
2062
+ ngListDirective,
2063
+ ngChangeDirective,
2064
+ patternDirective,
2065
+ patternDirective,
2066
+ requiredDirective,
2067
+ requiredDirective,
2068
+ minlengthDirective,
2069
+ minlengthDirective,
2070
+ maxlengthDirective,
2071
+ maxlengthDirective,
2072
+ ngValueDirective,
2073
+ ngModelOptionsDirective,
2074
+ ngAttributeAliasDirectives,
2075
+ ngEventDirectives,
2076
+
2077
+ $AnchorScrollProvider,
2078
+ $AnimateProvider,
2079
+ $BrowserProvider,
2080
+ $CacheFactoryProvider,
2081
+ $ControllerProvider,
2082
+ $DocumentProvider,
2083
+ $ExceptionHandlerProvider,
2084
+ $FilterProvider,
2085
+ $InterpolateProvider,
2086
+ $IntervalProvider,
2087
+ $HttpProvider,
2088
+ $HttpBackendProvider,
2089
+ $LocationProvider,
2090
+ $LogProvider,
2091
+ $ParseProvider,
2092
+ $RootScopeProvider,
2093
+ $QProvider,
2094
+ $$QProvider,
2095
+ $$SanitizeUriProvider,
2096
+ $SceProvider,
2097
+ $SceDelegateProvider,
2098
+ $SnifferProvider,
2099
+ $TemplateCacheProvider,
2100
+ $TemplateRequestProvider,
2101
+ $$TestabilityProvider,
2102
+ $TimeoutProvider,
2103
+ $$RAFProvider,
2104
+ $$AsyncCallbackProvider,
2105
+ $WindowProvider
2106
+*/
2107
+
2108
+
2109
+/**
2110
+ * @ngdoc object
2111
+ * @name angular.version
2112
+ * @module ng
2113
+ * @description
2114
+ * An object that contains information about the current AngularJS version. This object has the
2115
+ * following properties:
2116
+ *
2117
+ * - `full` – `{string}` – Full version string, such as "0.9.18".
2118
+ * - `major` – `{number}` – Major version number, such as "0".
2119
+ * - `minor` – `{number}` – Minor version number, such as "9".
2120
+ * - `dot` – `{number}` – Dot version number, such as "18".
2121
+ * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
2122
+ */
2123
+var version = {
2124
+ full: '1.3.0-rc.5', // all of these placeholder strings will be replaced by grunt's
2125
+ major: 1, // package task
2126
+ minor: 3,
2127
+ dot: 0,
2128
+ codeName: 'impossible-choreography'
2129
+};
2130
+
2131
+
2132
+function publishExternalAPI(angular){
2133
+ extend(angular, {
2134
+ 'bootstrap': bootstrap,
2135
+ 'copy': copy,
2136
+ 'extend': extend,
2137
+ 'equals': equals,
2138
+ 'element': jqLite,
2139
+ 'forEach': forEach,
2140
+ 'injector': createInjector,
2141
+ 'noop': noop,
2142
+ 'bind': bind,
2143
+ 'toJson': toJson,
2144
+ 'fromJson': fromJson,
2145
+ 'identity': identity,
2146
+ 'isUndefined': isUndefined,
2147
+ 'isDefined': isDefined,
2148
+ 'isString': isString,
2149
+ 'isFunction': isFunction,
2150
+ 'isObject': isObject,
2151
+ 'isNumber': isNumber,
2152
+ 'isElement': isElement,
2153
+ 'isArray': isArray,
2154
+ 'version': version,
2155
+ 'isDate': isDate,
2156
+ 'lowercase': lowercase,
2157
+ 'uppercase': uppercase,
2158
+ 'callbacks': {counter: 0},
2159
+ 'getTestability': getTestability,
2160
+ '$$minErr': minErr,
2161
+ '$$csp': csp,
2162
+ 'reloadWithDebugInfo': reloadWithDebugInfo
2163
+ });
2164
+
2165
+ angularModule = setupModuleLoader(window);
2166
+ try {
2167
+ angularModule('ngLocale');
2168
+ } catch (e) {
2169
+ angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
2170
+ }
2171
+
2172
+ angularModule('ng', ['ngLocale'], ['$provide',
2173
+ function ngModule($provide) {
2174
+ // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
2175
+ $provide.provider({
2176
+ $$sanitizeUri: $$SanitizeUriProvider
2177
+ });
2178
+ $provide.provider('$compile', $CompileProvider).
2179
+ directive({
2180
+ a: htmlAnchorDirective,
2181
+ input: inputDirective,
2182
+ textarea: inputDirective,
2183
+ form: formDirective,
2184
+ script: scriptDirective,
2185
+ select: selectDirective,
2186
+ style: styleDirective,
2187
+ option: optionDirective,
2188
+ ngBind: ngBindDirective,
2189
+ ngBindHtml: ngBindHtmlDirective,
2190
+ ngBindTemplate: ngBindTemplateDirective,
2191
+ ngClass: ngClassDirective,
2192
+ ngClassEven: ngClassEvenDirective,
2193
+ ngClassOdd: ngClassOddDirective,
2194
+ ngCloak: ngCloakDirective,
2195
+ ngController: ngControllerDirective,
2196
+ ngForm: ngFormDirective,
2197
+ ngHide: ngHideDirective,
2198
+ ngIf: ngIfDirective,
2199
+ ngInclude: ngIncludeDirective,
2200
+ ngInit: ngInitDirective,
2201
+ ngNonBindable: ngNonBindableDirective,
2202
+ ngPluralize: ngPluralizeDirective,
2203
+ ngRepeat: ngRepeatDirective,
2204
+ ngShow: ngShowDirective,
2205
+ ngStyle: ngStyleDirective,
2206
+ ngSwitch: ngSwitchDirective,
2207
+ ngSwitchWhen: ngSwitchWhenDirective,
2208
+ ngSwitchDefault: ngSwitchDefaultDirective,
2209
+ ngOptions: ngOptionsDirective,
2210
+ ngTransclude: ngTranscludeDirective,
2211
+ ngModel: ngModelDirective,
2212
+ ngList: ngListDirective,
2213
+ ngChange: ngChangeDirective,
2214
+ pattern: patternDirective,
2215
+ ngPattern: patternDirective,
2216
+ required: requiredDirective,
2217
+ ngRequired: requiredDirective,
2218
+ minlength: minlengthDirective,
2219
+ ngMinlength: minlengthDirective,
2220
+ maxlength: maxlengthDirective,
2221
+ ngMaxlength: maxlengthDirective,
2222
+ ngValue: ngValueDirective,
2223
+ ngModelOptions: ngModelOptionsDirective
2224
+ }).
2225
+ directive({
2226
+ ngInclude: ngIncludeFillContentDirective
2227
+ }).
2228
+ directive(ngAttributeAliasDirectives).
2229
+ directive(ngEventDirectives);
2230
+ $provide.provider({
2231
+ $anchorScroll: $AnchorScrollProvider,
2232
+ $animate: $AnimateProvider,
2233
+ $browser: $BrowserProvider,
2234
+ $cacheFactory: $CacheFactoryProvider,
2235
+ $controller: $ControllerProvider,
2236
+ $document: $DocumentProvider,
2237
+ $exceptionHandler: $ExceptionHandlerProvider,
2238
+ $filter: $FilterProvider,
2239
+ $interpolate: $InterpolateProvider,
2240
+ $interval: $IntervalProvider,
2241
+ $http: $HttpProvider,
2242
+ $httpBackend: $HttpBackendProvider,
2243
+ $location: $LocationProvider,
2244
+ $log: $LogProvider,
2245
+ $parse: $ParseProvider,
2246
+ $rootScope: $RootScopeProvider,
2247
+ $q: $QProvider,
2248
+ $$q: $$QProvider,
2249
+ $sce: $SceProvider,
2250
+ $sceDelegate: $SceDelegateProvider,
2251
+ $sniffer: $SnifferProvider,
2252
+ $templateCache: $TemplateCacheProvider,
2253
+ $templateRequest: $TemplateRequestProvider,
2254
+ $$testability: $$TestabilityProvider,
2255
+ $timeout: $TimeoutProvider,
2256
+ $window: $WindowProvider,
2257
+ $$rAF: $$RAFProvider,
2258
+ $$asyncCallback : $$AsyncCallbackProvider
2259
+ });
2260
+ }
2261
+ ]);
2262
+}
2263
+
2264
+/* global JQLitePrototype: true,
2265
+ addEventListenerFn: true,
2266
+ removeEventListenerFn: true,
2267
+ BOOLEAN_ATTR: true,
2268
+ ALIASED_ATTR: true,
2269
+*/
2270
+
2271
+//////////////////////////////////
2272
+//JQLite
2273
+//////////////////////////////////
2274
+
2275
+/**
2276
+ * @ngdoc function
2277
+ * @name angular.element
2278
+ * @module ng
2279
+ * @kind function
2280
+ *
2281
+ * @description
2282
+ * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
2283
+ *
2284
+ * If jQuery is available, `angular.element` is an alias for the
2285
+ * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
2286
+ * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
2287
+ *
2288
+ * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows
2289
+ * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
2290
+ * commonly needed functionality with the goal of having a very small footprint.</div>
2291
+ *
2292
+ * To use jQuery, simply load it before `DOMContentLoaded` event fired.
2293
+ *
2294
+ * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or
2295
+ * jqLite; they are never raw DOM references.</div>
2296
+ *
2297
+ * ## Angular's jqLite
2298
+ * jqLite provides only the following jQuery methods:
2299
+ *
2300
+ * - [`addClass()`](http://api.jquery.com/addClass/)
2301
+ * - [`after()`](http://api.jquery.com/after/)
2302
+ * - [`append()`](http://api.jquery.com/append/)
2303
+ * - [`attr()`](http://api.jquery.com/attr/)
2304
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
2305
+ * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
2306
+ * - [`clone()`](http://api.jquery.com/clone/)
2307
+ * - [`contents()`](http://api.jquery.com/contents/)
2308
+ * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyles()`
2309
+ * - [`data()`](http://api.jquery.com/data/)
2310
+ * - [`detach()`](http://api.jquery.com/detach/)
2311
+ * - [`empty()`](http://api.jquery.com/empty/)
2312
+ * - [`eq()`](http://api.jquery.com/eq/)
2313
+ * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
2314
+ * - [`hasClass()`](http://api.jquery.com/hasClass/)
2315
+ * - [`html()`](http://api.jquery.com/html/)
2316
+ * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
2317
+ * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
2318
+ * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors
2319
+ * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
2320
+ * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
2321
+ * - [`prepend()`](http://api.jquery.com/prepend/)
2322
+ * - [`prop()`](http://api.jquery.com/prop/)
2323
+ * - [`ready()`](http://api.jquery.com/ready/)
2324
+ * - [`remove()`](http://api.jquery.com/remove/)
2325
+ * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
2326
+ * - [`removeClass()`](http://api.jquery.com/removeClass/)
2327
+ * - [`removeData()`](http://api.jquery.com/removeData/)
2328
+ * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
2329
+ * - [`text()`](http://api.jquery.com/text/)
2330
+ * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
2331
+ * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
2332
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces
2333
+ * - [`val()`](http://api.jquery.com/val/)
2334
+ * - [`wrap()`](http://api.jquery.com/wrap/)
2335
+ *
2336
+ * ## jQuery/jqLite Extras
2337
+ * Angular also provides the following additional methods and events to both jQuery and jqLite:
2338
+ *
2339
+ * ### Events
2340
+ * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
2341
+ * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM
2342
+ * element before it is removed.
2343
+ *
2344
+ * ### Methods
2345
+ * - `controller(name)` - retrieves the controller of the current element or its parent. By default
2346
+ * retrieves controller associated with the `ngController` directive. If `name` is provided as
2347
+ * camelCase directive name, then the controller for this directive will be retrieved (e.g.
2348
+ * `'ngModel'`).
2349
+ * - `injector()` - retrieves the injector of the current element or its parent.
2350
+ * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
2351
+ * element or its parent.
2352
+ * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
2353
+ * current element. This getter should be used only on elements that contain a directive which starts a new isolate
2354
+ * scope. Calling `scope()` on this element always returns the original non-isolate scope.
2355
+ * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
2356
+ * parent element is reached.
2357
+ *
2358
+ * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
2359
+ * @returns {Object} jQuery object.
2360
+ */
2361
+
2362
+JQLite.expando = 'ng339';
2363
+
2364
+var jqCache = JQLite.cache = {},
2365
+ jqId = 1,
2366
+ addEventListenerFn = function(element, type, fn) {
2367
+ element.addEventListener(type, fn, false);
2368
+ },
2369
+ removeEventListenerFn = function(element, type, fn) {
2370
+ element.removeEventListener(type, fn, false);
2371
+ };
2372
+
2373
+/*
2374
+ * !!! This is an undocumented "private" function !!!
2375
+ */
2376
+JQLite._data = function(node) {
2377
+ //jQuery always returns an object on cache miss
2378
+ return this.cache[node[this.expando]] || {};
2379
+};
2380
+
2381
+function jqNextId() { return ++jqId; }
2382
+
2383
+
2384
+var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
2385
+var MOZ_HACK_REGEXP = /^moz([A-Z])/;
2386
+var MOUSE_EVENT_MAP= { mouseleave : "mouseout", mouseenter : "mouseover"};
2387
+var jqLiteMinErr = minErr('jqLite');
2388
+
2389
+/**
2390
+ * Converts snake_case to camelCase.
2391
+ * Also there is special case for Moz prefix starting with upper case letter.
2392
+ * @param name Name to normalize
2393
+ */
2394
+function camelCase(name) {
2395
+ return name.
2396
+ replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
2397
+ return offset ? letter.toUpperCase() : letter;
2398
+ }).
2399
+ replace(MOZ_HACK_REGEXP, 'Moz$1');
2400
+}
2401
+
2402
+var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
2403
+var HTML_REGEXP = /<|&#?\w+;/;
2404
+var TAG_NAME_REGEXP = /<([\w:]+)/;
2405
+var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi;
2406
+
2407
+var wrapMap = {
2408
+ 'option': [1, '<select multiple="multiple">', '</select>'],
2409
+
2410
+ 'thead': [1, '<table>', '</table>'],
2411
+ 'col': [2, '<table><colgroup>', '</colgroup></table>'],
2412
+ 'tr': [2, '<table><tbody>', '</tbody></table>'],
2413
+ 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
2414
+ '_default': [0, "", ""]
2415
+};
2416
+
2417
+wrapMap.optgroup = wrapMap.option;
2418
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
2419
+wrapMap.th = wrapMap.td;
2420
+
2421
+
2422
+function jqLiteIsTextNode(html) {
2423
+ return !HTML_REGEXP.test(html);
2424
+}
2425
+
2426
+function jqLiteAcceptsData(node) {
2427
+ // The window object can accept data but has no nodeType
2428
+ // Otherwise we are only interested in elements (1) and documents (9)
2429
+ var nodeType = node.nodeType;
2430
+ return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
2431
+}
2432
+
2433
+function jqLiteBuildFragment(html, context) {
2434
+ var tmp, tag, wrap,
2435
+ fragment = context.createDocumentFragment(),
2436
+ nodes = [], i;
2437
+
2438
+ if (jqLiteIsTextNode(html)) {
2439
+ // Convert non-html into a text node
2440
+ nodes.push(context.createTextNode(html));
2441
+ } else {
2442
+ // Convert html into DOM nodes
2443
+ tmp = tmp || fragment.appendChild(context.createElement("div"));
2444
+ tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
2445
+ wrap = wrapMap[tag] || wrapMap._default;
2446
+ tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
2447
+
2448
+ // Descend through wrappers to the right content
2449
+ i = wrap[0];
2450
+ while (i--) {
2451
+ tmp = tmp.lastChild;
2452
+ }
2453
+
2454
+ nodes = concat(nodes, tmp.childNodes);
2455
+
2456
+ tmp = fragment.firstChild;
2457
+ tmp.textContent = "";
2458
+ }
2459
+
2460
+ // Remove wrapper from fragment
2461
+ fragment.textContent = "";
2462
+ fragment.innerHTML = ""; // Clear inner HTML
2463
+ forEach(nodes, function(node) {
2464
+ fragment.appendChild(node);
2465
+ });
2466
+
2467
+ return fragment;
2468
+}
2469
+
2470
+function jqLiteParseHTML(html, context) {
2471
+ context = context || document;
2472
+ var parsed;
2473
+
2474
+ if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
2475
+ return [context.createElement(parsed[1])];
2476
+ }
2477
+
2478
+ if ((parsed = jqLiteBuildFragment(html, context))) {
2479
+ return parsed.childNodes;
2480
+ }
2481
+
2482
+ return [];
2483
+}
2484
+
2485
+/////////////////////////////////////////////
2486
+function JQLite(element) {
2487
+ if (element instanceof JQLite) {
2488
+ return element;
2489
+ }
2490
+
2491
+ var argIsString;
2492
+
2493
+ if (isString(element)) {
2494
+ element = trim(element);
2495
+ argIsString = true;
2496
+ }
2497
+ if (!(this instanceof JQLite)) {
2498
+ if (argIsString && element.charAt(0) != '<') {
2499
+ throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
2500
+ }
2501
+ return new JQLite(element);
2502
+ }
2503
+
2504
+ if (argIsString) {
2505
+ jqLiteAddNodes(this, jqLiteParseHTML(element));
2506
+ } else {
2507
+ jqLiteAddNodes(this, element);
2508
+ }
2509
+}
2510
+
2511
+function jqLiteClone(element) {
2512
+ return element.cloneNode(true);
2513
+}
2514
+
2515
+function jqLiteDealoc(element, onlyDescendants){
2516
+ if (!onlyDescendants) jqLiteRemoveData(element);
2517
+
2518
+ if (element.querySelectorAll) {
2519
+ var descendants = element.querySelectorAll('*');
2520
+ for (var i = 0, l = descendants.length; i < l; i++) {
2521
+ jqLiteRemoveData(descendants[i]);
2522
+ }
2523
+ }
2524
+}
2525
+
2526
+function jqLiteOff(element, type, fn, unsupported) {
2527
+ if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
2528
+
2529
+ var expandoStore = jqLiteExpandoStore(element);
2530
+ var events = expandoStore && expandoStore.events;
2531
+ var handle = expandoStore && expandoStore.handle;
2532
+
2533
+ if (!handle) return; //no listeners registered
2534
+
2535
+ if (!type) {
2536
+ for (type in events) {
2537
+ if (type !== '$destroy') {
2538
+ removeEventListenerFn(element, type, events[type]);
2539
+ }
2540
+ delete events[type];
2541
+ }
2542
+ } else {
2543
+ forEach(type.split(' '), function(type) {
2544
+ if (isUndefined(fn)) {
2545
+ removeEventListenerFn(element, type, events[type]);
2546
+ delete events[type];
2547
+ } else {
2548
+ arrayRemove(events[type] || [], fn);
2549
+ }
2550
+ });
2551
+ }
2552
+}
2553
+
2554
+function jqLiteRemoveData(element, name) {
2555
+ var expandoId = element.ng339;
2556
+ var expandoStore = expandoId && jqCache[expandoId];
2557
+
2558
+ if (expandoStore) {
2559
+ if (name) {
2560
+ delete expandoStore.data[name];
2561
+ return;
2562
+ }
2563
+
2564
+ if (expandoStore.handle) {
2565
+ if (expandoStore.events.$destroy) {
2566
+ expandoStore.handle({}, '$destroy');
2567
+ }
2568
+ jqLiteOff(element);
2569
+ }
2570
+ delete jqCache[expandoId];
2571
+ element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
2572
+ }
2573
+}
2574
+
2575
+
2576
+function jqLiteExpandoStore(element, createIfNecessary) {
2577
+ var expandoId = element.ng339,
2578
+ expandoStore = expandoId && jqCache[expandoId];
2579
+
2580
+ if (createIfNecessary && !expandoStore) {
2581
+ element.ng339 = expandoId = jqNextId();
2582
+ expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
2583
+ }
2584
+
2585
+ return expandoStore;
2586
+}
2587
+
2588
+
2589
+function jqLiteData(element, key, value) {
2590
+ if (jqLiteAcceptsData(element)) {
2591
+
2592
+ var isSimpleSetter = isDefined(value);
2593
+ var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
2594
+ var massGetter = !key;
2595
+ var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
2596
+ var data = expandoStore && expandoStore.data;
2597
+
2598
+ if (isSimpleSetter) { // data('key', value)
2599
+ data[key] = value;
2600
+ } else {
2601
+ if (massGetter) { // data()
2602
+ return data;
2603
+ } else {
2604
+ if (isSimpleGetter) { // data('key')
2605
+ // don't force creation of expandoStore if it doesn't exist yet
2606
+ return data && data[key];
2607
+ } else { // mass-setter: data({key1: val1, key2: val2})
2608
+ extend(data, key);
2609
+ }
2610
+ }
2611
+ }
2612
+ }
2613
+}
2614
+
2615
+function jqLiteHasClass(element, selector) {
2616
+ if (!element.getAttribute) return false;
2617
+ return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
2618
+ indexOf( " " + selector + " " ) > -1);
2619
+}
2620
+
2621
+function jqLiteRemoveClass(element, cssClasses) {
2622
+ if (cssClasses && element.setAttribute) {
2623
+ forEach(cssClasses.split(' '), function(cssClass) {
2624
+ element.setAttribute('class', trim(
2625
+ (" " + (element.getAttribute('class') || '') + " ")
2626
+ .replace(/[\n\t]/g, " ")
2627
+ .replace(" " + trim(cssClass) + " ", " "))
2628
+ );
2629
+ });
2630
+ }
2631
+}
2632
+
2633
+function jqLiteAddClass(element, cssClasses) {
2634
+ if (cssClasses && element.setAttribute) {
2635
+ var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
2636
+ .replace(/[\n\t]/g, " ");
2637
+
2638
+ forEach(cssClasses.split(' '), function(cssClass) {
2639
+ cssClass = trim(cssClass);
2640
+ if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
2641
+ existingClasses += cssClass + ' ';
2642
+ }
2643
+ });
2644
+
2645
+ element.setAttribute('class', trim(existingClasses));
2646
+ }
2647
+}
2648
+
2649
+
2650
+function jqLiteAddNodes(root, elements) {
2651
+ // THIS CODE IS VERY HOT. Don't make changes without benchmarking.
2652
+
2653
+ if (elements) {
2654
+
2655
+ // if a Node (the most common case)
2656
+ if (elements.nodeType) {
2657
+ root[root.length++] = elements;
2658
+ } else {
2659
+ var length = elements.length;
2660
+
2661
+ // if an Array or NodeList and not a Window
2662
+ if (typeof length === 'number' && elements.window !== elements) {
2663
+ if (length) {
2664
+ for (var i = 0; i < length; i++) {
2665
+ root[root.length++] = elements[i];
2666
+ }
2667
+ }
2668
+ } else {
2669
+ root[root.length++] = elements;
2670
+ }
2671
+ }
2672
+ }
2673
+}
2674
+
2675
+
2676
+function jqLiteController(element, name) {
2677
+ return jqLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller');
2678
+}
2679
+
2680
+function jqLiteInheritedData(element, name, value) {
2681
+ // if element is the document object work with the html element instead
2682
+ // this makes $(document).scope() possible
2683
+ if(element.nodeType == NODE_TYPE_DOCUMENT) {
2684
+ element = element.documentElement;
2685
+ }
2686
+ var names = isArray(name) ? name : [name];
2687
+
2688
+ while (element) {
2689
+ for (var i = 0, ii = names.length; i < ii; i++) {
2690
+ if ((value = jqLite.data(element, names[i])) !== undefined) return value;
2691
+ }
2692
+
2693
+ // If dealing with a document fragment node with a host element, and no parent, use the host
2694
+ // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
2695
+ // to lookup parent controllers.
2696
+ element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
2697
+ }
2698
+}
2699
+
2700
+function jqLiteEmpty(element) {
2701
+ jqLiteDealoc(element, true);
2702
+ while (element.firstChild) {
2703
+ element.removeChild(element.firstChild);
2704
+ }
2705
+}
2706
+
2707
+function jqLiteRemove(element, keepData) {
2708
+ if (!keepData) jqLiteDealoc(element);
2709
+ var parent = element.parentNode;
2710
+ if (parent) parent.removeChild(element);
2711
+}
2712
+
2713
+//////////////////////////////////////////
2714
+// Functions which are declared directly.
2715
+//////////////////////////////////////////
2716
+var JQLitePrototype = JQLite.prototype = {
2717
+ ready: function(fn) {
2718
+ var fired = false;
2719
+
2720
+ function trigger() {
2721
+ if (fired) return;
2722
+ fired = true;
2723
+ fn();
2724
+ }
2725
+
2726
+ // check if document is already loaded
2727
+ if (document.readyState === 'complete'){
2728
+ setTimeout(trigger);
2729
+ } else {
2730
+ this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
2731
+ // we can not use jqLite since we are not done loading and jQuery could be loaded later.
2732
+ // jshint -W064
2733
+ JQLite(window).on('load', trigger); // fallback to window.onload for others
2734
+ // jshint +W064
2735
+ this.on('DOMContentLoaded', trigger);
2736
+ }
2737
+ },
2738
+ toString: function() {
2739
+ var value = [];
2740
+ forEach(this, function(e){ value.push('' + e);});
2741
+ return '[' + value.join(', ') + ']';
2742
+ },
2743
+
2744
+ eq: function(index) {
2745
+ return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
2746
+ },
2747
+
2748
+ length: 0,
2749
+ push: push,
2750
+ sort: [].sort,
2751
+ splice: [].splice
2752
+};
2753
+
2754
+//////////////////////////////////////////
2755
+// Functions iterating getter/setters.
2756
+// these functions return self on setter and
2757
+// value on get.
2758
+//////////////////////////////////////////
2759
+var BOOLEAN_ATTR = {};
2760
+forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
2761
+ BOOLEAN_ATTR[lowercase(value)] = value;
2762
+});
2763
+var BOOLEAN_ELEMENTS = {};
2764
+forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
2765
+ BOOLEAN_ELEMENTS[value] = true;
2766
+});
2767
+var ALIASED_ATTR = {
2768
+ 'ngMinlength' : 'minlength',
2769
+ 'ngMaxlength' : 'maxlength',
2770
+ 'ngMin' : 'min',
2771
+ 'ngMax' : 'max',
2772
+ 'ngPattern' : 'pattern'
2773
+};
2774
+
2775
+function getBooleanAttrName(element, name) {
2776
+ // check dom last since we will most likely fail on name
2777
+ var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
2778
+
2779
+ // booleanAttr is here twice to minimize DOM access
2780
+ return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
2781
+}
2782
+
2783
+function getAliasedAttrName(element, name) {
2784
+ var nodeName = element.nodeName;
2785
+ return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name];
2786
+}
2787
+
2788
+forEach({
2789
+ data: jqLiteData,
2790
+ removeData: jqLiteRemoveData
2791
+}, function(fn, name) {
2792
+ JQLite[name] = fn;
2793
+});
2794
+
2795
+forEach({
2796
+ data: jqLiteData,
2797
+ inheritedData: jqLiteInheritedData,
2798
+
2799
+ scope: function(element) {
2800
+ // Can't use jqLiteData here directly so we stay compatible with jQuery!
2801
+ return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
2802
+ },
2803
+
2804
+ isolateScope: function(element) {
2805
+ // Can't use jqLiteData here directly so we stay compatible with jQuery!
2806
+ return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
2807
+ },
2808
+
2809
+ controller: jqLiteController,
2810
+
2811
+ injector: function(element) {
2812
+ return jqLiteInheritedData(element, '$injector');
2813
+ },
2814
+
2815
+ removeAttr: function(element, name) {
2816
+ element.removeAttribute(name);
2817
+ },
2818
+
2819
+ hasClass: jqLiteHasClass,
2820
+
2821
+ css: function(element, name, value) {
2822
+ name = camelCase(name);
2823
+
2824
+ if (isDefined(value)) {
2825
+ element.style[name] = value;
2826
+ } else {
2827
+ return element.style[name];
2828
+ }
2829
+ },
2830
+
2831
+ attr: function(element, name, value){
2832
+ var lowercasedName = lowercase(name);
2833
+ if (BOOLEAN_ATTR[lowercasedName]) {
2834
+ if (isDefined(value)) {
2835
+ if (!!value) {
2836
+ element[name] = true;
2837
+ element.setAttribute(name, lowercasedName);
2838
+ } else {
2839
+ element[name] = false;
2840
+ element.removeAttribute(lowercasedName);
2841
+ }
2842
+ } else {
2843
+ return (element[name] ||
2844
+ (element.attributes.getNamedItem(name)|| noop).specified)
2845
+ ? lowercasedName
2846
+ : undefined;
2847
+ }
2848
+ } else if (isDefined(value)) {
2849
+ element.setAttribute(name, value);
2850
+ } else if (element.getAttribute) {
2851
+ // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
2852
+ // some elements (e.g. Document) don't have get attribute, so return undefined
2853
+ var ret = element.getAttribute(name, 2);
2854
+ // normalize non-existing attributes to undefined (as jQuery)
2855
+ return ret === null ? undefined : ret;
2856
+ }
2857
+ },
2858
+
2859
+ prop: function(element, name, value) {
2860
+ if (isDefined(value)) {
2861
+ element[name] = value;
2862
+ } else {
2863
+ return element[name];
2864
+ }
2865
+ },
2866
+
2867
+ text: (function() {
2868
+ getText.$dv = '';
2869
+ return getText;
2870
+
2871
+ function getText(element, value) {
2872
+ if (isUndefined(value)) {
2873
+ var nodeType = element.nodeType;
2874
+ return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
2875
+ }
2876
+ element.textContent = value;
2877
+ }
2878
+ })(),
2879
+
2880
+ val: function(element, value) {
2881
+ if (isUndefined(value)) {
2882
+ if (element.multiple && nodeName_(element) === 'select') {
2883
+ var result = [];
2884
+ forEach(element.options, function (option) {
2885
+ if (option.selected) {
2886
+ result.push(option.value || option.text);
2887
+ }
2888
+ });
2889
+ return result.length === 0 ? null : result;
2890
+ }
2891
+ return element.value;
2892
+ }
2893
+ element.value = value;
2894
+ },
2895
+
2896
+ html: function(element, value) {
2897
+ if (isUndefined(value)) {
2898
+ return element.innerHTML;
2899
+ }
2900
+ jqLiteDealoc(element, true);
2901
+ element.innerHTML = value;
2902
+ },
2903
+
2904
+ empty: jqLiteEmpty
2905
+}, function(fn, name){
2906
+ /**
2907
+ * Properties: writes return selection, reads return first value
2908
+ */
2909
+ JQLite.prototype[name] = function(arg1, arg2) {
2910
+ var i, key;
2911
+ var nodeCount = this.length;
2912
+
2913
+ // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
2914
+ // in a way that survives minification.
2915
+ // jqLiteEmpty takes no arguments but is a setter.
2916
+ if (fn !== jqLiteEmpty &&
2917
+ (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) {
2918
+ if (isObject(arg1)) {
2919
+
2920
+ // we are a write, but the object properties are the key/values
2921
+ for (i = 0; i < nodeCount; i++) {
2922
+ if (fn === jqLiteData) {
2923
+ // data() takes the whole object in jQuery
2924
+ fn(this[i], arg1);
2925
+ } else {
2926
+ for (key in arg1) {
2927
+ fn(this[i], key, arg1[key]);
2928
+ }
2929
+ }
2930
+ }
2931
+ // return self for chaining
2932
+ return this;
2933
+ } else {
2934
+ // we are a read, so read the first child.
2935
+ // TODO: do we still need this?
2936
+ var value = fn.$dv;
2937
+ // Only if we have $dv do we iterate over all, otherwise it is just the first element.
2938
+ var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount;
2939
+ for (var j = 0; j < jj; j++) {
2940
+ var nodeValue = fn(this[j], arg1, arg2);
2941
+ value = value ? value + nodeValue : nodeValue;
2942
+ }
2943
+ return value;
2944
+ }
2945
+ } else {
2946
+ // we are a write, so apply to all children
2947
+ for (i = 0; i < nodeCount; i++) {
2948
+ fn(this[i], arg1, arg2);
2949
+ }
2950
+ // return self for chaining
2951
+ return this;
2952
+ }
2953
+ };
2954
+});
2955
+
2956
+function createEventHandler(element, events) {
2957
+ var eventHandler = function (event, type) {
2958
+ // jQuery specific api
2959
+ event.isDefaultPrevented = function() {
2960
+ return event.defaultPrevented;
2961
+ };
2962
+
2963
+ var eventFns = events[type || event.type];
2964
+ var eventFnsLength = eventFns ? eventFns.length : 0;
2965
+
2966
+ if (!eventFnsLength) return;
2967
+
2968
+ if (isUndefined(event.immediatePropagationStopped)) {
2969
+ var originalStopImmediatePropagation = event.stopImmediatePropagation;
2970
+ event.stopImmediatePropagation = function() {
2971
+ event.immediatePropagationStopped = true;
2972
+
2973
+ if (event.stopPropagation) {
2974
+ event.stopPropagation();
2975
+ }
2976
+
2977
+ if (originalStopImmediatePropagation) {
2978
+ originalStopImmediatePropagation.call(event);
2979
+ }
2980
+ };
2981
+ }
2982
+
2983
+ event.isImmediatePropagationStopped = function() {
2984
+ return event.immediatePropagationStopped === true;
2985
+ };
2986
+
2987
+ // Copy event handlers in case event handlers array is modified during execution.
2988
+ if ((eventFnsLength > 1)) {
2989
+ eventFns = shallowCopy(eventFns);
2990
+ }
2991
+
2992
+ for (var i = 0; i < eventFnsLength; i++) {
2993
+ if (!event.isImmediatePropagationStopped()) {
2994
+ eventFns[i].call(element, event);
2995
+ }
2996
+ }
2997
+ };
2998
+
2999
+ // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
3000
+ // events on `element`
3001
+ eventHandler.elem = element;
3002
+ return eventHandler;
3003
+}
3004
+
3005
+//////////////////////////////////////////
3006
+// Functions iterating traversal.
3007
+// These functions chain results into a single
3008
+// selector.
3009
+//////////////////////////////////////////
3010
+forEach({
3011
+ removeData: jqLiteRemoveData,
3012
+
3013
+ on: function jqLiteOn(element, type, fn, unsupported){
3014
+ if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
3015
+
3016
+ // Do not add event handlers to non-elements because they will not be cleaned up.
3017
+ if (!jqLiteAcceptsData(element)) {
3018
+ return;
3019
+ }
3020
+
3021
+ var expandoStore = jqLiteExpandoStore(element, true);
3022
+ var events = expandoStore.events;
3023
+ var handle = expandoStore.handle;
3024
+
3025
+ if (!handle) {
3026
+ handle = expandoStore.handle = createEventHandler(element, events);
3027
+ }
3028
+
3029
+ // http://jsperf.com/string-indexof-vs-split
3030
+ var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
3031
+ var i = types.length;
3032
+
3033
+ while (i--) {
3034
+ type = types[i];
3035
+ var eventFns = events[type];
3036
+
3037
+ if (!eventFns) {
3038
+ events[type] = [];
3039
+
3040
+ if (type === 'mouseenter' || type === 'mouseleave') {
3041
+ // Refer to jQuery's implementation of mouseenter & mouseleave
3042
+ // Read about mouseenter and mouseleave:
3043
+ // http://www.quirksmode.org/js/events_mouse.html#link8
3044
+
3045
+ jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) {
3046
+ var target = this, related = event.relatedTarget;
3047
+ // For mousenter/leave call the handler if related is outside the target.
3048
+ // NB: No relatedTarget if the mouse left/entered the browser window
3049
+ if ( !related || (related !== target && !target.contains(related)) ){
3050
+ handle(event, type);
3051
+ }
3052
+ });
3053
+
3054
+ } else {
3055
+ if (type !== '$destroy') {
3056
+ addEventListenerFn(element, type, handle);
3057
+ }
3058
+ }
3059
+ eventFns = events[type];
3060
+ }
3061
+ eventFns.push(fn);
3062
+ }
3063
+ },
3064
+
3065
+ off: jqLiteOff,
3066
+
3067
+ one: function(element, type, fn) {
3068
+ element = jqLite(element);
3069
+
3070
+ //add the listener twice so that when it is called
3071
+ //you can remove the original function and still be
3072
+ //able to call element.off(ev, fn) normally
3073
+ element.on(type, function onFn() {
3074
+ element.off(type, fn);
3075
+ element.off(type, onFn);
3076
+ });
3077
+ element.on(type, fn);
3078
+ },
3079
+
3080
+ replaceWith: function(element, replaceNode) {
3081
+ var index, parent = element.parentNode;
3082
+ jqLiteDealoc(element);
3083
+ forEach(new JQLite(replaceNode), function(node){
3084
+ if (index) {
3085
+ parent.insertBefore(node, index.nextSibling);
3086
+ } else {
3087
+ parent.replaceChild(node, element);
3088
+ }
3089
+ index = node;
3090
+ });
3091
+ },
3092
+
3093
+ children: function(element) {
3094
+ var children = [];
3095
+ forEach(element.childNodes, function(element){
3096
+ if (element.nodeType === NODE_TYPE_ELEMENT)
3097
+ children.push(element);
3098
+ });
3099
+ return children;
3100
+ },
3101
+
3102
+ contents: function(element) {
3103
+ return element.contentDocument || element.childNodes || [];
3104
+ },
3105
+
3106
+ append: function(element, node) {
3107
+ var nodeType = element.nodeType;
3108
+ if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
3109
+
3110
+ node = new JQLite(node);
3111
+
3112
+ for (var i = 0, ii = node.length; i < ii; i++) {
3113
+ var child = node[i];
3114
+ element.appendChild(child);
3115
+ }
3116
+ },
3117
+
3118
+ prepend: function(element, node) {
3119
+ if (element.nodeType === NODE_TYPE_ELEMENT) {
3120
+ var index = element.firstChild;
3121
+ forEach(new JQLite(node), function(child){
3122
+ element.insertBefore(child, index);
3123
+ });
3124
+ }
3125
+ },
3126
+
3127
+ wrap: function(element, wrapNode) {
3128
+ wrapNode = jqLite(wrapNode).eq(0).clone()[0];
3129
+ var parent = element.parentNode;
3130
+ if (parent) {
3131
+ parent.replaceChild(wrapNode, element);
3132
+ }
3133
+ wrapNode.appendChild(element);
3134
+ },
3135
+
3136
+ remove: jqLiteRemove,
3137
+
3138
+ detach: function(element) {
3139
+ jqLiteRemove(element, true);
3140
+ },
3141
+
3142
+ after: function(element, newElement) {
3143
+ var index = element, parent = element.parentNode;
3144
+ newElement = new JQLite(newElement);
3145
+
3146
+ for (var i = 0, ii = newElement.length; i < ii; i++) {
3147
+ var node = newElement[i];
3148
+ parent.insertBefore(node, index.nextSibling);
3149
+ index = node;
3150
+ }
3151
+ },
3152
+
3153
+ addClass: jqLiteAddClass,
3154
+ removeClass: jqLiteRemoveClass,
3155
+
3156
+ toggleClass: function(element, selector, condition) {
3157
+ if (selector) {
3158
+ forEach(selector.split(' '), function(className){
3159
+ var classCondition = condition;
3160
+ if (isUndefined(classCondition)) {
3161
+ classCondition = !jqLiteHasClass(element, className);
3162
+ }
3163
+ (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
3164
+ });
3165
+ }
3166
+ },
3167
+
3168
+ parent: function(element) {
3169
+ var parent = element.parentNode;
3170
+ return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
3171
+ },
3172
+
3173
+ next: function(element) {
3174
+ return element.nextElementSibling;
3175
+ },
3176
+
3177
+ find: function(element, selector) {
3178
+ if (element.getElementsByTagName) {
3179
+ return element.getElementsByTagName(selector);
3180
+ } else {
3181
+ return [];
3182
+ }
3183
+ },
3184
+
3185
+ clone: jqLiteClone,
3186
+
3187
+ triggerHandler: function(element, event, extraParameters) {
3188
+
3189
+ var dummyEvent, eventFnsCopy, handlerArgs;
3190
+ var eventName = event.type || event;
3191
+ var expandoStore = jqLiteExpandoStore(element);
3192
+ var events = expandoStore && expandoStore.events;
3193
+ var eventFns = events && events[eventName];
3194
+
3195
+ if (eventFns) {
3196
+ // Create a dummy event to pass to the handlers
3197
+ dummyEvent = {
3198
+ preventDefault: function() { this.defaultPrevented = true; },
3199
+ isDefaultPrevented: function() { return this.defaultPrevented === true; },
3200
+ stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
3201
+ isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
3202
+ stopPropagation: noop,
3203
+ type: eventName,
3204
+ target: element
3205
+ };
3206
+
3207
+ // If a custom event was provided then extend our dummy event with it
3208
+ if (event.type) {
3209
+ dummyEvent = extend(dummyEvent, event);
3210
+ }
3211
+
3212
+ // Copy event handlers in case event handlers array is modified during execution.
3213
+ eventFnsCopy = shallowCopy(eventFns);
3214
+ handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
3215
+
3216
+ forEach(eventFnsCopy, function(fn) {
3217
+ if (!dummyEvent.isImmediatePropagationStopped()) {
3218
+ fn.apply(element, handlerArgs);
3219
+ }
3220
+ });
3221
+ }
3222
+ }
3223
+}, function(fn, name){
3224
+ /**
3225
+ * chaining functions
3226
+ */
3227
+ JQLite.prototype[name] = function(arg1, arg2, arg3) {
3228
+ var value;
3229
+
3230
+ for(var i = 0, ii = this.length; i < ii; i++) {
3231
+ if (isUndefined(value)) {
3232
+ value = fn(this[i], arg1, arg2, arg3);
3233
+ if (isDefined(value)) {
3234
+ // any function which returns a value needs to be wrapped
3235
+ value = jqLite(value);
3236
+ }
3237
+ } else {
3238
+ jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
3239
+ }
3240
+ }
3241
+ return isDefined(value) ? value : this;
3242
+ };
3243
+
3244
+ // bind legacy bind/unbind to on/off
3245
+ JQLite.prototype.bind = JQLite.prototype.on;
3246
+ JQLite.prototype.unbind = JQLite.prototype.off;
3247
+});
3248
+
3249
+/**
3250
+ * Computes a hash of an 'obj'.
3251
+ * Hash of a:
3252
+ * string is string
3253
+ * number is number as string
3254
+ * object is either result of calling $$hashKey function on the object or uniquely generated id,
3255
+ * that is also assigned to the $$hashKey property of the object.
3256
+ *
3257
+ * @param obj
3258
+ * @returns {string} hash string such that the same input will have the same hash string.
3259
+ * The resulting string key is in 'type:hashKey' format.
3260
+ */
3261
+function hashKey(obj, nextUidFn) {
3262
+ var key = obj && obj.$$hashKey;
3263
+
3264
+ if (key) {
3265
+ if (typeof key === 'function') {
3266
+ key = obj.$$hashKey();
3267
+ }
3268
+ return key;
3269
+ }
3270
+
3271
+ var objType = typeof obj;
3272
+ if (objType == 'function' || (objType == 'object' && obj !== null)) {
3273
+ key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
3274
+ } else {
3275
+ key = objType + ':' + obj;
3276
+ }
3277
+
3278
+ return key;
3279
+}
3280
+
3281
+/**
3282
+ * HashMap which can use objects as keys
3283
+ */
3284
+function HashMap(array, isolatedUid) {
3285
+ if (isolatedUid) {
3286
+ var uid = 0;
3287
+ this.nextUid = function() {
3288
+ return ++uid;
3289
+ };
3290
+ }
3291
+ forEach(array, this.put, this);
3292
+}
3293
+HashMap.prototype = {
3294
+ /**
3295
+ * Store key value pair
3296
+ * @param key key to store can be any type
3297
+ * @param value value to store can be any type
3298
+ */
3299
+ put: function(key, value) {
3300
+ this[hashKey(key, this.nextUid)] = value;
3301
+ },
3302
+
3303
+ /**
3304
+ * @param key
3305
+ * @returns {Object} the value for the key
3306
+ */
3307
+ get: function(key) {
3308
+ return this[hashKey(key, this.nextUid)];
3309
+ },
3310
+
3311
+ /**
3312
+ * Remove the key/value pair
3313
+ * @param key
3314
+ */
3315
+ remove: function(key) {
3316
+ var value = this[key = hashKey(key, this.nextUid)];
3317
+ delete this[key];
3318
+ return value;
3319
+ }
3320
+};
3321
+
3322
+/**
3323
+ * @ngdoc function
3324
+ * @module ng
3325
+ * @name angular.injector
3326
+ * @kind function
3327
+ *
3328
+ * @description
3329
+ * Creates an injector object that can be used for retrieving services as well as for
3330
+ * dependency injection (see {@link guide/di dependency injection}).
3331
+ *
3332
+
3333
+ * @param {Array.<string|Function>} modules A list of module functions or their aliases. See
3334
+ * {@link angular.module}. The `ng` module must be explicitly added.
3335
+ * @returns {function()} Injector object. See {@link auto.$injector $injector}.
3336
+ *
3337
+ * @example
3338
+ * Typical usage
3339
+ * ```js
3340
+ * // create an injector
3341
+ * var $injector = angular.injector(['ng']);
3342
+ *
3343
+ * // use the injector to kick off your application
3344
+ * // use the type inference to auto inject arguments, or use implicit injection
3345
+ * $injector.invoke(function($rootScope, $compile, $document) {
3346
+ * $compile($document)($rootScope);
3347
+ * $rootScope.$digest();
3348
+ * });
3349
+ * ```
3350
+ *
3351
+ * Sometimes you want to get access to the injector of a currently running Angular app
3352
+ * from outside Angular. Perhaps, you want to inject and compile some markup after the
3353
+ * application has been bootstrapped. You can do this using the extra `injector()` added
3354
+ * to JQuery/jqLite elements. See {@link angular.element}.
3355
+ *
3356
+ * *This is fairly rare but could be the case if a third party library is injecting the
3357
+ * markup.*
3358
+ *
3359
+ * In the following example a new block of HTML containing a `ng-controller`
3360
+ * directive is added to the end of the document body by JQuery. We then compile and link
3361
+ * it into the current AngularJS scope.
3362
+ *
3363
+ * ```js
3364
+ * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
3365
+ * $(document.body).append($div);
3366
+ *
3367
+ * angular.element(document).injector().invoke(function($compile) {
3368
+ * var scope = angular.element($div).scope();
3369
+ * $compile($div)(scope);
3370
+ * });
3371
+ * ```
3372
+ */
3373
+
3374
+
3375
+/**
3376
+ * @ngdoc module
3377
+ * @name auto
3378
+ * @description
3379
+ *
3380
+ * Implicit module which gets automatically added to each {@link auto.$injector $injector}.
3381
+ */
3382
+
3383
+var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
3384
+var FN_ARG_SPLIT = /,/;
3385
+var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
3386
+var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
3387
+var $injectorMinErr = minErr('$injector');
3388
+
3389
+function anonFn(fn) {
3390
+ // For anonymous functions, showing at the very least the function signature can help in
3391
+ // debugging.
3392
+ var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
3393
+ args = fnText.match(FN_ARGS);
3394
+ if (args) {
3395
+ return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
3396
+ }
3397
+ return 'fn';
3398
+}
3399
+
3400
+function annotate(fn, strictDi, name) {
3401
+ var $inject,
3402
+ fnText,
3403
+ argDecl,
3404
+ last;
3405
+
3406
+ if (typeof fn === 'function') {
3407
+ if (!($inject = fn.$inject)) {
3408
+ $inject = [];
3409
+ if (fn.length) {
3410
+ if (strictDi) {
3411
+ if (!isString(name) || !name) {
3412
+ name = fn.name || anonFn(fn);
3413
+ }
3414
+ throw $injectorMinErr('strictdi',
3415
+ '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
3416
+ }
3417
+ fnText = fn.toString().replace(STRIP_COMMENTS, '');
3418
+ argDecl = fnText.match(FN_ARGS);
3419
+ forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
3420
+ arg.replace(FN_ARG, function(all, underscore, name) {
3421
+ $inject.push(name);
3422
+ });
3423
+ });
3424
+ }
3425
+ fn.$inject = $inject;
3426
+ }
3427
+ } else if (isArray(fn)) {
3428
+ last = fn.length - 1;
3429
+ assertArgFn(fn[last], 'fn');
3430
+ $inject = fn.slice(0, last);
3431
+ } else {
3432
+ assertArgFn(fn, 'fn', true);
3433
+ }
3434
+ return $inject;
3435
+}
3436
+
3437
+///////////////////////////////////////
3438
+
3439
+/**
3440
+ * @ngdoc service
3441
+ * @name $injector
3442
+ *
3443
+ * @description
3444
+ *
3445
+ * `$injector` is used to retrieve object instances as defined by
3446
+ * {@link auto.$provide provider}, instantiate types, invoke methods,
3447
+ * and load modules.
3448
+ *
3449
+ * The following always holds true:
3450
+ *
3451
+ * ```js
3452
+ * var $injector = angular.injector();
3453
+ * expect($injector.get('$injector')).toBe($injector);
3454
+ * expect($injector.invoke(function($injector) {
3455
+ * return $injector;
3456
+ * })).toBe($injector);
3457
+ * ```
3458
+ *
3459
+ * # Injection Function Annotation
3460
+ *
3461
+ * JavaScript does not have annotations, and annotations are needed for dependency injection. The
3462
+ * following are all valid ways of annotating function with injection arguments and are equivalent.
3463
+ *
3464
+ * ```js
3465
+ * // inferred (only works if code not minified/obfuscated)
3466
+ * $injector.invoke(function(serviceA){});
3467
+ *
3468
+ * // annotated
3469
+ * function explicit(serviceA) {};
3470
+ * explicit.$inject = ['serviceA'];
3471
+ * $injector.invoke(explicit);
3472
+ *
3473
+ * // inline
3474
+ * $injector.invoke(['serviceA', function(serviceA){}]);
3475
+ * ```
3476
+ *
3477
+ * ## Inference
3478
+ *
3479
+ * In JavaScript calling `toString()` on a function returns the function definition. The definition
3480
+ * can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with
3481
+ * minification, and obfuscation tools since these tools change the argument names.
3482
+ *
3483
+ * ## `$inject` Annotation
3484
+ * By adding an `$inject` property onto a function the injection parameters can be specified.
3485
+ *
3486
+ * ## Inline
3487
+ * As an array of injection names, where the last item in the array is the function to call.
3488
+ */
3489
+
3490
+/**
3491
+ * @ngdoc method
3492
+ * @name $injector#get
3493
+ *
3494
+ * @description
3495
+ * Return an instance of the service.
3496
+ *
3497
+ * @param {string} name The name of the instance to retrieve.
3498
+ * @return {*} The instance.
3499
+ */
3500
+
3501
+/**
3502
+ * @ngdoc method
3503
+ * @name $injector#invoke
3504
+ *
3505
+ * @description
3506
+ * Invoke the method and supply the method arguments from the `$injector`.
3507
+ *
3508
+ * @param {!Function} fn The function to invoke. Function parameters are injected according to the
3509
+ * {@link guide/di $inject Annotation} rules.
3510
+ * @param {Object=} self The `this` for the invoked method.
3511
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
3512
+ * object first, before the `$injector` is consulted.
3513
+ * @returns {*} the value returned by the invoked `fn` function.
3514
+ */
3515
+
3516
+/**
3517
+ * @ngdoc method
3518
+ * @name $injector#has
3519
+ *
3520
+ * @description
3521
+ * Allows the user to query if the particular service exists.
3522
+ *
3523
+ * @param {string} name Name of the service to query.
3524
+ * @returns {boolean} `true` if injector has given service.
3525
+ */
3526
+
3527
+/**
3528
+ * @ngdoc method
3529
+ * @name $injector#instantiate
3530
+ * @description
3531
+ * Create a new instance of JS type. The method takes a constructor function, invokes the new
3532
+ * operator, and supplies all of the arguments to the constructor function as specified by the
3533
+ * constructor annotation.
3534
+ *
3535
+ * @param {Function} Type Annotated constructor function.
3536
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
3537
+ * object first, before the `$injector` is consulted.
3538
+ * @returns {Object} new instance of `Type`.
3539
+ */
3540
+
3541
+/**
3542
+ * @ngdoc method
3543
+ * @name $injector#annotate
3544
+ *
3545
+ * @description
3546
+ * Returns an array of service names which the function is requesting for injection. This API is
3547
+ * used by the injector to determine which services need to be injected into the function when the
3548
+ * function is invoked. There are three ways in which the function can be annotated with the needed
3549
+ * dependencies.
3550
+ *
3551
+ * # Argument names
3552
+ *
3553
+ * The simplest form is to extract the dependencies from the arguments of the function. This is done
3554
+ * by converting the function into a string using `toString()` method and extracting the argument
3555
+ * names.
3556
+ * ```js
3557
+ * // Given
3558
+ * function MyController($scope, $route) {
3559
+ * // ...
3560
+ * }
3561
+ *
3562
+ * // Then
3563
+ * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
3564
+ * ```
3565
+ *
3566
+ * This method does not work with code minification / obfuscation. For this reason the following
3567
+ * annotation strategies are supported.
3568
+ *
3569
+ * # The `$inject` property
3570
+ *
3571
+ * If a function has an `$inject` property and its value is an array of strings, then the strings
3572
+ * represent names of services to be injected into the function.
3573
+ * ```js
3574
+ * // Given
3575
+ * var MyController = function(obfuscatedScope, obfuscatedRoute) {
3576
+ * // ...
3577
+ * }
3578
+ * // Define function dependencies
3579
+ * MyController['$inject'] = ['$scope', '$route'];
3580
+ *
3581
+ * // Then
3582
+ * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
3583
+ * ```
3584
+ *
3585
+ * # The array notation
3586
+ *
3587
+ * It is often desirable to inline Injected functions and that's when setting the `$inject` property
3588
+ * is very inconvenient. In these situations using the array notation to specify the dependencies in
3589
+ * a way that survives minification is a better choice:
3590
+ *
3591
+ * ```js
3592
+ * // We wish to write this (not minification / obfuscation safe)
3593
+ * injector.invoke(function($compile, $rootScope) {
3594
+ * // ...
3595
+ * });
3596
+ *
3597
+ * // We are forced to write break inlining
3598
+ * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
3599
+ * // ...
3600
+ * };
3601
+ * tmpFn.$inject = ['$compile', '$rootScope'];
3602
+ * injector.invoke(tmpFn);
3603
+ *
3604
+ * // To better support inline function the inline annotation is supported
3605
+ * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
3606
+ * // ...
3607
+ * }]);
3608
+ *
3609
+ * // Therefore
3610
+ * expect(injector.annotate(
3611
+ * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
3612
+ * ).toEqual(['$compile', '$rootScope']);
3613
+ * ```
3614
+ *
3615
+ * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
3616
+ * be retrieved as described above.
3617
+ *
3618
+ * @returns {Array.<string>} The names of the services which the function requires.
3619
+ */
3620
+
3621
+
3622
+
3623
+
3624
+/**
3625
+ * @ngdoc service
3626
+ * @name $provide
3627
+ *
3628
+ * @description
3629
+ *
3630
+ * The {@link auto.$provide $provide} service has a number of methods for registering components
3631
+ * with the {@link auto.$injector $injector}. Many of these functions are also exposed on
3632
+ * {@link angular.Module}.
3633
+ *
3634
+ * An Angular **service** is a singleton object created by a **service factory**. These **service
3635
+ * factories** are functions which, in turn, are created by a **service provider**.
3636
+ * The **service providers** are constructor functions. When instantiated they must contain a
3637
+ * property called `$get`, which holds the **service factory** function.
3638
+ *
3639
+ * When you request a service, the {@link auto.$injector $injector} is responsible for finding the
3640
+ * correct **service provider**, instantiating it and then calling its `$get` **service factory**
3641
+ * function to get the instance of the **service**.
3642
+ *
3643
+ * Often services have no configuration options and there is no need to add methods to the service
3644
+ * provider. The provider will be no more than a constructor function with a `$get` property. For
3645
+ * these cases the {@link auto.$provide $provide} service has additional helper methods to register
3646
+ * services without specifying a provider.
3647
+ *
3648
+ * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
3649
+ * {@link auto.$injector $injector}
3650
+ * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
3651
+ * providers and services.
3652
+ * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
3653
+ * services, not providers.
3654
+ * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
3655
+ * that will be wrapped in a **service provider** object, whose `$get` property will contain the
3656
+ * given factory function.
3657
+ * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
3658
+ * that will be wrapped in a **service provider** object, whose `$get` property will instantiate
3659
+ * a new object using the given constructor function.
3660
+ *
3661
+ * See the individual methods for more information and examples.
3662
+ */
3663
+
3664
+/**
3665
+ * @ngdoc method
3666
+ * @name $provide#provider
3667
+ * @description
3668
+ *
3669
+ * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
3670
+ * are constructor functions, whose instances are responsible for "providing" a factory for a
3671
+ * service.
3672
+ *
3673
+ * Service provider names start with the name of the service they provide followed by `Provider`.
3674
+ * For example, the {@link ng.$log $log} service has a provider called
3675
+ * {@link ng.$logProvider $logProvider}.
3676
+ *
3677
+ * Service provider objects can have additional methods which allow configuration of the provider
3678
+ * and its service. Importantly, you can configure what kind of service is created by the `$get`
3679
+ * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
3680
+ * method {@link ng.$logProvider#debugEnabled debugEnabled}
3681
+ * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
3682
+ * console or not.
3683
+ *
3684
+ * @param {string} name The name of the instance. NOTE: the provider will be available under `name +
3685
+ 'Provider'` key.
3686
+ * @param {(Object|function())} provider If the provider is:
3687
+ *
3688
+ * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
3689
+ * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
3690
+ * - `Constructor`: a new instance of the provider will be created using
3691
+ * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
3692
+ *
3693
+ * @returns {Object} registered provider instance
3694
+
3695
+ * @example
3696
+ *
3697
+ * The following example shows how to create a simple event tracking service and register it using
3698
+ * {@link auto.$provide#provider $provide.provider()}.
3699
+ *
3700
+ * ```js
3701
+ * // Define the eventTracker provider
3702
+ * function EventTrackerProvider() {
3703
+ * var trackingUrl = '/track';
3704
+ *
3705
+ * // A provider method for configuring where the tracked events should been saved
3706
+ * this.setTrackingUrl = function(url) {
3707
+ * trackingUrl = url;
3708
+ * };
3709
+ *
3710
+ * // The service factory function
3711
+ * this.$get = ['$http', function($http) {
3712
+ * var trackedEvents = {};
3713
+ * return {
3714
+ * // Call this to track an event
3715
+ * event: function(event) {
3716
+ * var count = trackedEvents[event] || 0;
3717
+ * count += 1;
3718
+ * trackedEvents[event] = count;
3719
+ * return count;
3720
+ * },
3721
+ * // Call this to save the tracked events to the trackingUrl
3722
+ * save: function() {
3723
+ * $http.post(trackingUrl, trackedEvents);
3724
+ * }
3725
+ * };
3726
+ * }];
3727
+ * }
3728
+ *
3729
+ * describe('eventTracker', function() {
3730
+ * var postSpy;
3731
+ *
3732
+ * beforeEach(module(function($provide) {
3733
+ * // Register the eventTracker provider
3734
+ * $provide.provider('eventTracker', EventTrackerProvider);
3735
+ * }));
3736
+ *
3737
+ * beforeEach(module(function(eventTrackerProvider) {
3738
+ * // Configure eventTracker provider
3739
+ * eventTrackerProvider.setTrackingUrl('/custom-track');
3740
+ * }));
3741
+ *
3742
+ * it('tracks events', inject(function(eventTracker) {
3743
+ * expect(eventTracker.event('login')).toEqual(1);
3744
+ * expect(eventTracker.event('login')).toEqual(2);
3745
+ * }));
3746
+ *
3747
+ * it('saves to the tracking url', inject(function(eventTracker, $http) {
3748
+ * postSpy = spyOn($http, 'post');
3749
+ * eventTracker.event('login');
3750
+ * eventTracker.save();
3751
+ * expect(postSpy).toHaveBeenCalled();
3752
+ * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
3753
+ * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
3754
+ * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
3755
+ * }));
3756
+ * });
3757
+ * ```
3758
+ */
3759
+
3760
+/**
3761
+ * @ngdoc method
3762
+ * @name $provide#factory
3763
+ * @description
3764
+ *
3765
+ * Register a **service factory**, which will be called to return the service instance.
3766
+ * This is short for registering a service where its provider consists of only a `$get` property,
3767
+ * which is the given service factory function.
3768
+ * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
3769
+ * configure your service in a provider.
3770
+ *
3771
+ * @param {string} name The name of the instance.
3772
+ * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand
3773
+ * for `$provide.provider(name, {$get: $getFn})`.
3774
+ * @returns {Object} registered provider instance
3775
+ *
3776
+ * @example
3777
+ * Here is an example of registering a service
3778
+ * ```js
3779
+ * $provide.factory('ping', ['$http', function($http) {
3780
+ * return function ping() {
3781
+ * return $http.send('/ping');
3782
+ * };
3783
+ * }]);
3784
+ * ```
3785
+ * You would then inject and use this service like this:
3786
+ * ```js
3787
+ * someModule.controller('Ctrl', ['ping', function(ping) {
3788
+ * ping();
3789
+ * }]);
3790
+ * ```
3791
+ */
3792
+
3793
+
3794
+/**
3795
+ * @ngdoc method
3796
+ * @name $provide#service
3797
+ * @description
3798
+ *
3799
+ * Register a **service constructor**, which will be invoked with `new` to create the service
3800
+ * instance.
3801
+ * This is short for registering a service where its provider's `$get` property is the service
3802
+ * constructor function that will be used to instantiate the service instance.
3803
+ *
3804
+ * You should use {@link auto.$provide#service $provide.service(class)} if you define your service
3805
+ * as a type/class.
3806
+ *
3807
+ * @param {string} name The name of the instance.
3808
+ * @param {Function} constructor A class (constructor function) that will be instantiated.
3809
+ * @returns {Object} registered provider instance
3810
+ *
3811
+ * @example
3812
+ * Here is an example of registering a service using
3813
+ * {@link auto.$provide#service $provide.service(class)}.
3814
+ * ```js
3815
+ * var Ping = function($http) {
3816
+ * this.$http = $http;
3817
+ * };
3818
+ *
3819
+ * Ping.$inject = ['$http'];
3820
+ *
3821
+ * Ping.prototype.send = function() {
3822
+ * return this.$http.get('/ping');
3823
+ * };
3824
+ * $provide.service('ping', Ping);
3825
+ * ```
3826
+ * You would then inject and use this service like this:
3827
+ * ```js
3828
+ * someModule.controller('Ctrl', ['ping', function(ping) {
3829
+ * ping.send();
3830
+ * }]);
3831
+ * ```
3832
+ */
3833
+
3834
+
3835
+/**
3836
+ * @ngdoc method
3837
+ * @name $provide#value
3838
+ * @description
3839
+ *
3840
+ * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
3841
+ * number, an array, an object or a function. This is short for registering a service where its
3842
+ * provider's `$get` property is a factory function that takes no arguments and returns the **value
3843
+ * service**.
3844
+ *
3845
+ * Value services are similar to constant services, except that they cannot be injected into a
3846
+ * module configuration function (see {@link angular.Module#config}) but they can be overridden by
3847
+ * an Angular
3848
+ * {@link auto.$provide#decorator decorator}.
3849
+ *
3850
+ * @param {string} name The name of the instance.
3851
+ * @param {*} value The value.
3852
+ * @returns {Object} registered provider instance
3853
+ *
3854
+ * @example
3855
+ * Here are some examples of creating value services.
3856
+ * ```js
3857
+ * $provide.value('ADMIN_USER', 'admin');
3858
+ *
3859
+ * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
3860
+ *
3861
+ * $provide.value('halfOf', function(value) {
3862
+ * return value / 2;
3863
+ * });
3864
+ * ```
3865
+ */
3866
+
3867
+
3868
+/**
3869
+ * @ngdoc method
3870
+ * @name $provide#constant
3871
+ * @description
3872
+ *
3873
+ * Register a **constant service**, such as a string, a number, an array, an object or a function,
3874
+ * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
3875
+ * injected into a module configuration function (see {@link angular.Module#config}) and it cannot
3876
+ * be overridden by an Angular {@link auto.$provide#decorator decorator}.
3877
+ *
3878
+ * @param {string} name The name of the constant.
3879
+ * @param {*} value The constant value.
3880
+ * @returns {Object} registered instance
3881
+ *
3882
+ * @example
3883
+ * Here a some examples of creating constants:
3884
+ * ```js
3885
+ * $provide.constant('SHARD_HEIGHT', 306);
3886
+ *
3887
+ * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
3888
+ *
3889
+ * $provide.constant('double', function(value) {
3890
+ * return value * 2;
3891
+ * });
3892
+ * ```
3893
+ */
3894
+
3895
+
3896
+/**
3897
+ * @ngdoc method
3898
+ * @name $provide#decorator
3899
+ * @description
3900
+ *
3901
+ * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
3902
+ * intercepts the creation of a service, allowing it to override or modify the behaviour of the
3903
+ * service. The object returned by the decorator may be the original service, or a new service
3904
+ * object which replaces or wraps and delegates to the original service.
3905
+ *
3906
+ * @param {string} name The name of the service to decorate.
3907
+ * @param {function()} decorator This function will be invoked when the service needs to be
3908
+ * instantiated and should return the decorated service instance. The function is called using
3909
+ * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
3910
+ * Local injection arguments:
3911
+ *
3912
+ * * `$delegate` - The original service instance, which can be monkey patched, configured,
3913
+ * decorated or delegated to.
3914
+ *
3915
+ * @example
3916
+ * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
3917
+ * calls to {@link ng.$log#error $log.warn()}.
3918
+ * ```js
3919
+ * $provide.decorator('$log', ['$delegate', function($delegate) {
3920
+ * $delegate.warn = $delegate.error;
3921
+ * return $delegate;
3922
+ * }]);
3923
+ * ```
3924
+ */
3925
+
3926
+
3927
+function createInjector(modulesToLoad, strictDi) {
3928
+ strictDi = (strictDi === true);
3929
+ var INSTANTIATING = {},
3930
+ providerSuffix = 'Provider',
3931
+ path = [],
3932
+ loadedModules = new HashMap([], true),
3933
+ providerCache = {
3934
+ $provide: {
3935
+ provider: supportObject(provider),
3936
+ factory: supportObject(factory),
3937
+ service: supportObject(service),
3938
+ value: supportObject(value),
3939
+ constant: supportObject(constant),
3940
+ decorator: decorator
3941
+ }
3942
+ },
3943
+ providerInjector = (providerCache.$injector =
3944
+ createInternalInjector(providerCache, function() {
3945
+ throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
3946
+ })),
3947
+ instanceCache = {},
3948
+ instanceInjector = (instanceCache.$injector =
3949
+ createInternalInjector(instanceCache, function(servicename) {
3950
+ var provider = providerInjector.get(servicename + providerSuffix);
3951
+ return instanceInjector.invoke(provider.$get, provider, undefined, servicename);
3952
+ }));
3953
+
3954
+
3955
+ forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); });
3956
+
3957
+ return instanceInjector;
3958
+
3959
+ ////////////////////////////////////
3960
+ // $provider
3961
+ ////////////////////////////////////
3962
+
3963
+ function supportObject(delegate) {
3964
+ return function(key, value) {
3965
+ if (isObject(key)) {
3966
+ forEach(key, reverseParams(delegate));
3967
+ } else {
3968
+ return delegate(key, value);
3969
+ }
3970
+ };
3971
+ }
3972
+
3973
+ function provider(name, provider_) {
3974
+ assertNotHasOwnProperty(name, 'service');
3975
+ if (isFunction(provider_) || isArray(provider_)) {
3976
+ provider_ = providerInjector.instantiate(provider_);
3977
+ }
3978
+ if (!provider_.$get) {
3979
+ throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
3980
+ }
3981
+ return providerCache[name + providerSuffix] = provider_;
3982
+ }
3983
+
3984
+ function enforceReturnValue(name, factory) {
3985
+ return function enforcedReturnValue() {
3986
+ var result = instanceInjector.invoke(factory);
3987
+ if (isUndefined(result)) {
3988
+ throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
3989
+ }
3990
+ return result;
3991
+ };
3992
+ }
3993
+
3994
+ function factory(name, factoryFn, enforce) {
3995
+ return provider(name, {
3996
+ $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
3997
+ });
3998
+ }
3999
+
4000
+ function service(name, constructor) {
4001
+ return factory(name, ['$injector', function($injector) {
4002
+ return $injector.instantiate(constructor);
4003
+ }]);
4004
+ }
4005
+
4006
+ function value(name, val) { return factory(name, valueFn(val), false); }
4007
+
4008
+ function constant(name, value) {
4009
+ assertNotHasOwnProperty(name, 'constant');
4010
+ providerCache[name] = value;
4011
+ instanceCache[name] = value;
4012
+ }
4013
+
4014
+ function decorator(serviceName, decorFn) {
4015
+ var origProvider = providerInjector.get(serviceName + providerSuffix),
4016
+ orig$get = origProvider.$get;
4017
+
4018
+ origProvider.$get = function() {
4019
+ var origInstance = instanceInjector.invoke(orig$get, origProvider);
4020
+ return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
4021
+ };
4022
+ }
4023
+
4024
+ ////////////////////////////////////
4025
+ // Module Loading
4026
+ ////////////////////////////////////
4027
+ function loadModules(modulesToLoad){
4028
+ var runBlocks = [], moduleFn;
4029
+ forEach(modulesToLoad, function(module) {
4030
+ if (loadedModules.get(module)) return;
4031
+ loadedModules.put(module, true);
4032
+
4033
+ function runInvokeQueue(queue) {
4034
+ var i, ii;
4035
+ for(i = 0, ii = queue.length; i < ii; i++) {
4036
+ var invokeArgs = queue[i],
4037
+ provider = providerInjector.get(invokeArgs[0]);
4038
+
4039
+ provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
4040
+ }
4041
+ }
4042
+
4043
+ try {
4044
+ if (isString(module)) {
4045
+ moduleFn = angularModule(module);
4046
+ runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
4047
+ runInvokeQueue(moduleFn._invokeQueue);
4048
+ runInvokeQueue(moduleFn._configBlocks);
4049
+ } else if (isFunction(module)) {
4050
+ runBlocks.push(providerInjector.invoke(module));
4051
+ } else if (isArray(module)) {
4052
+ runBlocks.push(providerInjector.invoke(module));
4053
+ } else {
4054
+ assertArgFn(module, 'module');
4055
+ }
4056
+ } catch (e) {
4057
+ if (isArray(module)) {
4058
+ module = module[module.length - 1];
4059
+ }
4060
+ if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
4061
+ // Safari & FF's stack traces don't contain error.message content
4062
+ // unlike those of Chrome and IE
4063
+ // So if stack doesn't contain message, we create a new string that contains both.
4064
+ // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
4065
+ /* jshint -W022 */
4066
+ e = e.message + '\n' + e.stack;
4067
+ }
4068
+ throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
4069
+ module, e.stack || e.message || e);
4070
+ }
4071
+ });
4072
+ return runBlocks;
4073
+ }
4074
+
4075
+ ////////////////////////////////////
4076
+ // internal Injector
4077
+ ////////////////////////////////////
4078
+
4079
+ function createInternalInjector(cache, factory) {
4080
+
4081
+ function getService(serviceName) {
4082
+ if (cache.hasOwnProperty(serviceName)) {
4083
+ if (cache[serviceName] === INSTANTIATING) {
4084
+ throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
4085
+ serviceName + ' <- ' + path.join(' <- '));
4086
+ }
4087
+ return cache[serviceName];
4088
+ } else {
4089
+ try {
4090
+ path.unshift(serviceName);
4091
+ cache[serviceName] = INSTANTIATING;
4092
+ return cache[serviceName] = factory(serviceName);
4093
+ } catch (err) {
4094
+ if (cache[serviceName] === INSTANTIATING) {
4095
+ delete cache[serviceName];
4096
+ }
4097
+ throw err;
4098
+ } finally {
4099
+ path.shift();
4100
+ }
4101
+ }
4102
+ }
4103
+
4104
+ function invoke(fn, self, locals, serviceName) {
4105
+ if (typeof locals === 'string') {
4106
+ serviceName = locals;
4107
+ locals = null;
4108
+ }
4109
+
4110
+ var args = [],
4111
+ $inject = annotate(fn, strictDi, serviceName),
4112
+ length, i,
4113
+ key;
4114
+
4115
+ for(i = 0, length = $inject.length; i < length; i++) {
4116
+ key = $inject[i];
4117
+ if (typeof key !== 'string') {
4118
+ throw $injectorMinErr('itkn',
4119
+ 'Incorrect injection token! Expected service name as string, got {0}', key);
4120
+ }
4121
+ args.push(
4122
+ locals && locals.hasOwnProperty(key)
4123
+ ? locals[key]
4124
+ : getService(key)
4125
+ );
4126
+ }
4127
+ if (isArray(fn)) {
4128
+ fn = fn[length];
4129
+ }
4130
+
4131
+ // http://jsperf.com/angularjs-invoke-apply-vs-switch
4132
+ // #5388
4133
+ return fn.apply(self, args);
4134
+ }
4135
+
4136
+ function instantiate(Type, locals, serviceName) {
4137
+ var Constructor = function() {},
4138
+ instance, returnedValue;
4139
+
4140
+ // Check if Type is annotated and use just the given function at n-1 as parameter
4141
+ // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
4142
+ Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype;
4143
+ instance = new Constructor();
4144
+ returnedValue = invoke(Type, instance, locals, serviceName);
4145
+
4146
+ return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
4147
+ }
4148
+
4149
+ return {
4150
+ invoke: invoke,
4151
+ instantiate: instantiate,
4152
+ get: getService,
4153
+ annotate: annotate,
4154
+ has: function(name) {
4155
+ return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
4156
+ }
4157
+ };
4158
+ }
4159
+}
4160
+
4161
+createInjector.$$annotate = annotate;
4162
+
4163
+/**
4164
+ * @ngdoc service
4165
+ * @name $anchorScroll
4166
+ * @kind function
4167
+ * @requires $window
4168
+ * @requires $location
4169
+ * @requires $rootScope
4170
+ *
4171
+ * @description
4172
+ * When called, it checks current value of `$location.hash()` and scrolls to the related element,
4173
+ * according to rules specified in
4174
+ * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document).
4175
+ *
4176
+ * It also watches the `$location.hash()` and scrolls whenever it changes to match any anchor.
4177
+ * This can be disabled by calling `$anchorScrollProvider.disableAutoScrolling()`.
4178
+ *
4179
+ * @example
4180
+ <example module="anchorScrollExample">
4181
+ <file name="index.html">
4182
+ <div id="scrollArea" ng-controller="ScrollController">
4183
+ <a ng-click="gotoBottom()">Go to bottom</a>
4184
+ <a id="bottom"></a> You're at the bottom!
4185
+ </div>
4186
+ </file>
4187
+ <file name="script.js">
4188
+ angular.module('anchorScrollExample', [])
4189
+ .controller('ScrollController', ['$scope', '$location', '$anchorScroll',
4190
+ function ($scope, $location, $anchorScroll) {
4191
+ $scope.gotoBottom = function() {
4192
+ // set the location.hash to the id of
4193
+ // the element you wish to scroll to.
4194
+ $location.hash('bottom');
4195
+
4196
+ // call $anchorScroll()
4197
+ $anchorScroll();
4198
+ };
4199
+ }]);
4200
+ </file>
4201
+ <file name="style.css">
4202
+ #scrollArea {
4203
+ height: 350px;
4204
+ overflow: auto;
4205
+ }
4206
+
4207
+ #bottom {
4208
+ display: block;
4209
+ margin-top: 2000px;
4210
+ }
4211
+ </file>
4212
+ </example>
4213
+ */
4214
+function $AnchorScrollProvider() {
4215
+
4216
+ var autoScrollingEnabled = true;
4217
+
4218
+ this.disableAutoScrolling = function() {
4219
+ autoScrollingEnabled = false;
4220
+ };
4221
+
4222
+ this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
4223
+ var document = $window.document;
4224
+
4225
+ // helper function to get first anchor from a NodeList
4226
+ // can't use filter.filter, as it accepts only instances of Array
4227
+ // and IE can't convert NodeList to an array using [].slice
4228
+ // TODO(vojta): use filter if we change it to accept lists as well
4229
+ function getFirstAnchor(list) {
4230
+ var result = null;
4231
+ forEach(list, function(element) {
4232
+ if (!result && nodeName_(element) === 'a') result = element;
4233
+ });
4234
+ return result;
4235
+ }
4236
+
4237
+ function scroll() {
4238
+ var hash = $location.hash(), elm;
4239
+
4240
+ // empty hash, scroll to the top of the page
4241
+ if (!hash) $window.scrollTo(0, 0);
4242
+
4243
+ // element with given id
4244
+ else if ((elm = document.getElementById(hash))) elm.scrollIntoView();
4245
+
4246
+ // first anchor with given name :-D
4247
+ else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) elm.scrollIntoView();
4248
+
4249
+ // no element and hash == 'top', scroll to the top of the page
4250
+ else if (hash === 'top') $window.scrollTo(0, 0);
4251
+ }
4252
+
4253
+ // does not scroll when user clicks on anchor link that is currently on
4254
+ // (no url change, no $location.hash() change), browser native does scroll
4255
+ if (autoScrollingEnabled) {
4256
+ $rootScope.$watch(function autoScrollWatch() {return $location.hash();},
4257
+ function autoScrollWatchAction(newVal, oldVal) {
4258
+ // skip the initial scroll if $location.hash is empty
4259
+ if (newVal === oldVal && newVal === '') return;
4260
+
4261
+ $rootScope.$evalAsync(scroll);
4262
+ });
4263
+ }
4264
+
4265
+ return scroll;
4266
+ }];
4267
+}
4268
+
4269
+var $animateMinErr = minErr('$animate');
4270
+
4271
+/**
4272
+ * @ngdoc provider
4273
+ * @name $animateProvider
4274
+ *
4275
+ * @description
4276
+ * Default implementation of $animate that doesn't perform any animations, instead just
4277
+ * synchronously performs DOM
4278
+ * updates and calls done() callbacks.
4279
+ *
4280
+ * In order to enable animations the ngAnimate module has to be loaded.
4281
+ *
4282
+ * To see the functional implementation check out src/ngAnimate/animate.js
4283
+ */
4284
+var $AnimateProvider = ['$provide', function($provide) {
4285
+
4286
+
4287
+ this.$$selectors = {};
4288
+
4289
+
4290
+ /**
4291
+ * @ngdoc method
4292
+ * @name $animateProvider#register
4293
+ *
4294
+ * @description
4295
+ * Registers a new injectable animation factory function. The factory function produces the
4296
+ * animation object which contains callback functions for each event that is expected to be
4297
+ * animated.
4298
+ *
4299
+ * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction`
4300
+ * must be called once the element animation is complete. If a function is returned then the
4301
+ * animation service will use this function to cancel the animation whenever a cancel event is
4302
+ * triggered.
4303
+ *
4304
+ *
4305
+ * ```js
4306
+ * return {
4307
+ * eventFn : function(element, done) {
4308
+ * //code to run the animation
4309
+ * //once complete, then run done()
4310
+ * return function cancellationFunction() {
4311
+ * //code to cancel the animation
4312
+ * }
4313
+ * }
4314
+ * }
4315
+ * ```
4316
+ *
4317
+ * @param {string} name The name of the animation.
4318
+ * @param {Function} factory The factory function that will be executed to return the animation
4319
+ * object.
4320
+ */
4321
+ this.register = function(name, factory) {
4322
+ var key = name + '-animation';
4323
+ if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel',
4324
+ "Expecting class selector starting with '.' got '{0}'.", name);
4325
+ this.$$selectors[name.substr(1)] = key;
4326
+ $provide.factory(key, factory);
4327
+ };
4328
+
4329
+ /**
4330
+ * @ngdoc method
4331
+ * @name $animateProvider#classNameFilter
4332
+ *
4333
+ * @description
4334
+ * Sets and/or returns the CSS class regular expression that is checked when performing
4335
+ * an animation. Upon bootstrap the classNameFilter value is not set at all and will
4336
+ * therefore enable $animate to attempt to perform an animation on any element.
4337
+ * When setting the classNameFilter value, animations will only be performed on elements
4338
+ * that successfully match the filter expression. This in turn can boost performance
4339
+ * for low-powered devices as well as applications containing a lot of structural operations.
4340
+ * @param {RegExp=} expression The className expression which will be checked against all animations
4341
+ * @return {RegExp} The current CSS className expression value. If null then there is no expression value
4342
+ */
4343
+ this.classNameFilter = function(expression) {
4344
+ if(arguments.length === 1) {
4345
+ this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
4346
+ }
4347
+ return this.$$classNameFilter;
4348
+ };
4349
+
4350
+ this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) {
4351
+
4352
+ var currentDefer;
4353
+
4354
+ function runAnimationPostDigest(fn) {
4355
+ var cancelFn, defer = $$q.defer();
4356
+ defer.promise.$$cancelFn = function ngAnimateMaybeCancel() {
4357
+ cancelFn && cancelFn();
4358
+ };
4359
+
4360
+ $rootScope.$$postDigest(function ngAnimatePostDigest() {
4361
+ cancelFn = fn(function ngAnimateNotifyComplete() {
4362
+ defer.resolve();
4363
+ });
4364
+ });
4365
+
4366
+ return defer.promise;
4367
+ }
4368
+
4369
+ function resolveElementClasses(element, cache) {
4370
+ var toAdd = [], toRemove = [];
4371
+
4372
+ var hasClasses = createMap();
4373
+ forEach((element.attr('class') || '').split(/\s+/), function(className) {
4374
+ hasClasses[className] = true;
4375
+ });
4376
+
4377
+ forEach(cache.classes, function(status, className) {
4378
+ var hasClass = hasClasses[className];
4379
+
4380
+ // If the most recent class manipulation (via $animate) was to remove the class, and the
4381
+ // element currently has the class, the class is scheduled for removal. Otherwise, if
4382
+ // the most recent class manipulation (via $animate) was to add the class, and the
4383
+ // element does not currently have the class, the class is scheduled to be added.
4384
+ if (status === false && hasClass) {
4385
+ toRemove.push(className);
4386
+ } else if (status === true && !hasClass) {
4387
+ toAdd.push(className);
4388
+ }
4389
+ });
4390
+
4391
+ return (toAdd.length + toRemove.length) > 0 && [toAdd.length && toAdd, toRemove.length && toRemove];
4392
+ }
4393
+
4394
+ function cachedClassManipulation(cache, classes, op) {
4395
+ for (var i=0, ii = classes.length; i < ii; ++i) {
4396
+ var className = classes[i];
4397
+ cache[className] = op;
4398
+ }
4399
+ }
4400
+
4401
+ function asyncPromise() {
4402
+ // only serve one instance of a promise in order to save CPU cycles
4403
+ if (!currentDefer) {
4404
+ currentDefer = $$q.defer();
4405
+ $$asyncCallback(function() {
4406
+ currentDefer.resolve();
4407
+ currentDefer = null;
4408
+ });
4409
+ }
4410
+ return currentDefer.promise;
4411
+ }
4412
+
4413
+ /**
4414
+ *
4415
+ * @ngdoc service
4416
+ * @name $animate
4417
+ * @description The $animate service provides rudimentary DOM manipulation functions to
4418
+ * insert, remove and move elements within the DOM, as well as adding and removing classes.
4419
+ * This service is the core service used by the ngAnimate $animator service which provides
4420
+ * high-level animation hooks for CSS and JavaScript.
4421
+ *
4422
+ * $animate is available in the AngularJS core, however, the ngAnimate module must be included
4423
+ * to enable full out animation support. Otherwise, $animate will only perform simple DOM
4424
+ * manipulation operations.
4425
+ *
4426
+ * To learn more about enabling animation support, click here to visit the {@link ngAnimate
4427
+ * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service
4428
+ * page}.
4429
+ */
4430
+ return {
4431
+
4432
+ /**
4433
+ *
4434
+ * @ngdoc method
4435
+ * @name $animate#enter
4436
+ * @kind function
4437
+ * @description Inserts the element into the DOM either after the `after` element or
4438
+ * as the first child within the `parent` element. When the function is called a promise
4439
+ * is returned that will be resolved at a later time.
4440
+ * @param {DOMElement} element the element which will be inserted into the DOM
4441
+ * @param {DOMElement} parent the parent element which will append the element as
4442
+ * a child (if the after element is not present)
4443
+ * @param {DOMElement} after the sibling element which will append the element
4444
+ * after itself
4445
+ * @return {Promise} the animation callback promise
4446
+ */
4447
+ enter : function(element, parent, after) {
4448
+ after ? after.after(element)
4449
+ : parent.prepend(element);
4450
+ return asyncPromise();
4451
+ },
4452
+
4453
+ /**
4454
+ *
4455
+ * @ngdoc method
4456
+ * @name $animate#leave
4457
+ * @kind function
4458
+ * @description Removes the element from the DOM. When the function is called a promise
4459
+ * is returned that will be resolved at a later time.
4460
+ * @param {DOMElement} element the element which will be removed from the DOM
4461
+ * @return {Promise} the animation callback promise
4462
+ */
4463
+ leave : function(element) {
4464
+ element.remove();
4465
+ return asyncPromise();
4466
+ },
4467
+
4468
+ /**
4469
+ *
4470
+ * @ngdoc method
4471
+ * @name $animate#move
4472
+ * @kind function
4473
+ * @description Moves the position of the provided element within the DOM to be placed
4474
+ * either after the `after` element or inside of the `parent` element. When the function
4475
+ * is called a promise is returned that will be resolved at a later time.
4476
+ *
4477
+ * @param {DOMElement} element the element which will be moved around within the
4478
+ * DOM
4479
+ * @param {DOMElement} parent the parent element where the element will be
4480
+ * inserted into (if the after element is not present)
4481
+ * @param {DOMElement} after the sibling element where the element will be
4482
+ * positioned next to
4483
+ * @return {Promise} the animation callback promise
4484
+ */
4485
+ move : function(element, parent, after) {
4486
+ // Do not remove element before insert. Removing will cause data associated with the
4487
+ // element to be dropped. Insert will implicitly do the remove.
4488
+ return this.enter(element, parent, after);
4489
+ },
4490
+
4491
+ /**
4492
+ *
4493
+ * @ngdoc method
4494
+ * @name $animate#addClass
4495
+ * @kind function
4496
+ * @description Adds the provided className CSS class value to the provided element.
4497
+ * When the function is called a promise is returned that will be resolved at a later time.
4498
+ * @param {DOMElement} element the element which will have the className value
4499
+ * added to it
4500
+ * @param {string} className the CSS class which will be added to the element
4501
+ * @return {Promise} the animation callback promise
4502
+ */
4503
+ addClass : function(element, className) {
4504
+ return this.setClass(element, className, []);
4505
+ },
4506
+
4507
+ $$addClassImmediately : function addClassImmediately(element, className) {
4508
+ element = jqLite(element);
4509
+ className = !isString(className)
4510
+ ? (isArray(className) ? className.join(' ') : '')
4511
+ : className;
4512
+ forEach(element, function (element) {
4513
+ jqLiteAddClass(element, className);
4514
+ });
4515
+ },
4516
+
4517
+ /**
4518
+ *
4519
+ * @ngdoc method
4520
+ * @name $animate#removeClass
4521
+ * @kind function
4522
+ * @description Removes the provided className CSS class value from the provided element.
4523
+ * When the function is called a promise is returned that will be resolved at a later time.
4524
+ * @param {DOMElement} element the element which will have the className value
4525
+ * removed from it
4526
+ * @param {string} className the CSS class which will be removed from the element
4527
+ * @return {Promise} the animation callback promise
4528
+ */
4529
+ removeClass : function(element, className) {
4530
+ return this.setClass(element, [], className);
4531
+ },
4532
+
4533
+ $$removeClassImmediately : function removeClassImmediately(element, className) {
4534
+ element = jqLite(element);
4535
+ className = !isString(className)
4536
+ ? (isArray(className) ? className.join(' ') : '')
4537
+ : className;
4538
+ forEach(element, function (element) {
4539
+ jqLiteRemoveClass(element, className);
4540
+ });
4541
+ return asyncPromise();
4542
+ },
4543
+
4544
+ /**
4545
+ *
4546
+ * @ngdoc method
4547
+ * @name $animate#setClass
4548
+ * @kind function
4549
+ * @description Adds and/or removes the given CSS classes to and from the element.
4550
+ * When the function is called a promise is returned that will be resolved at a later time.
4551
+ * @param {DOMElement} element the element which will have its CSS classes changed
4552
+ * removed from it
4553
+ * @param {string} add the CSS classes which will be added to the element
4554
+ * @param {string} remove the CSS class which will be removed from the element
4555
+ * @return {Promise} the animation callback promise
4556
+ */
4557
+ setClass : function(element, add, remove, runSynchronously) {
4558
+ var self = this;
4559
+ var STORAGE_KEY = '$$animateClasses';
4560
+ var createdCache = false;
4561
+ element = jqLite(element);
4562
+
4563
+ if (runSynchronously) {
4564
+ // TODO(@caitp/@matsko): Remove undocumented `runSynchronously` parameter, and always
4565
+ // perform DOM manipulation asynchronously or in postDigest.
4566
+ self.$$addClassImmediately(element, add);
4567
+ self.$$removeClassImmediately(element, remove);
4568
+ return asyncPromise();
4569
+ }
4570
+
4571
+ var cache = element.data(STORAGE_KEY);
4572
+ if (!cache) {
4573
+ cache = {
4574
+ classes: {}
4575
+ };
4576
+ createdCache = true;
4577
+ }
4578
+
4579
+ var classes = cache.classes;
4580
+
4581
+ add = isArray(add) ? add : add.split(' ');
4582
+ remove = isArray(remove) ? remove : remove.split(' ');
4583
+ cachedClassManipulation(classes, add, true);
4584
+ cachedClassManipulation(classes, remove, false);
4585
+
4586
+ if (createdCache) {
4587
+ cache.promise = runAnimationPostDigest(function(done) {
4588
+ var cache = element.data(STORAGE_KEY);
4589
+ element.removeData(STORAGE_KEY);
4590
+
4591
+ var classes = cache && resolveElementClasses(element, cache);
4592
+
4593
+ if (classes) {
4594
+ if (classes[0]) self.$$addClassImmediately(element, classes[0]);
4595
+ if (classes[1]) self.$$removeClassImmediately(element, classes[1]);
4596
+ }
4597
+
4598
+ done();
4599
+ });
4600
+ element.data(STORAGE_KEY, cache);
4601
+ }
4602
+
4603
+ return cache.promise;
4604
+ },
4605
+
4606
+ enabled : noop,
4607
+ cancel : noop
4608
+ };
4609
+ }];
4610
+}];
4611
+
4612
+function $$AsyncCallbackProvider(){
4613
+ this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
4614
+ return $$rAF.supported
4615
+ ? function(fn) { return $$rAF(fn); }
4616
+ : function(fn) {
4617
+ return $timeout(fn, 0, false);
4618
+ };
4619
+ }];
4620
+}
4621
+
4622
+/* global stripHash: true */
4623
+
4624
+/**
4625
+ * ! This is a private undocumented service !
4626
+ *
4627
+ * @name $browser
4628
+ * @requires $log
4629
+ * @description
4630
+ * This object has two goals:
4631
+ *
4632
+ * - hide all the global state in the browser caused by the window object
4633
+ * - abstract away all the browser specific features and inconsistencies
4634
+ *
4635
+ * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
4636
+ * service, which can be used for convenient testing of the application without the interaction with
4637
+ * the real browser apis.
4638
+ */
4639
+/**
4640
+ * @param {object} window The global window object.
4641
+ * @param {object} document jQuery wrapped document.
4642
+ * @param {function()} XHR XMLHttpRequest constructor.
4643
+ * @param {object} $log console.log or an object with the same interface.
4644
+ * @param {object} $sniffer $sniffer service
4645
+ */
4646
+function Browser(window, document, $log, $sniffer) {
4647
+ var self = this,
4648
+ rawDocument = document[0],
4649
+ location = window.location,
4650
+ history = window.history,
4651
+ setTimeout = window.setTimeout,
4652
+ clearTimeout = window.clearTimeout,
4653
+ pendingDeferIds = {};
4654
+
4655
+ self.isMock = false;
4656
+
4657
+ var outstandingRequestCount = 0;
4658
+ var outstandingRequestCallbacks = [];
4659
+
4660
+ // TODO(vojta): remove this temporary api
4661
+ self.$$completeOutstandingRequest = completeOutstandingRequest;
4662
+ self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
4663
+
4664
+ /**
4665
+ * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
4666
+ * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
4667
+ */
4668
+ function completeOutstandingRequest(fn) {
4669
+ try {
4670
+ fn.apply(null, sliceArgs(arguments, 1));
4671
+ } finally {
4672
+ outstandingRequestCount--;
4673
+ if (outstandingRequestCount === 0) {
4674
+ while(outstandingRequestCallbacks.length) {
4675
+ try {
4676
+ outstandingRequestCallbacks.pop()();
4677
+ } catch (e) {
4678
+ $log.error(e);
4679
+ }
4680
+ }
4681
+ }
4682
+ }
4683
+ }
4684
+
4685
+ /**
4686
+ * @private
4687
+ * Note: this method is used only by scenario runner
4688
+ * TODO(vojta): prefix this method with $$ ?
4689
+ * @param {function()} callback Function that will be called when no outstanding request
4690
+ */
4691
+ self.notifyWhenNoOutstandingRequests = function(callback) {
4692
+ // force browser to execute all pollFns - this is needed so that cookies and other pollers fire
4693
+ // at some deterministic time in respect to the test runner's actions. Leaving things up to the
4694
+ // regular poller would result in flaky tests.
4695
+ forEach(pollFns, function(pollFn){ pollFn(); });
4696
+
4697
+ if (outstandingRequestCount === 0) {
4698
+ callback();
4699
+ } else {
4700
+ outstandingRequestCallbacks.push(callback);
4701
+ }
4702
+ };
4703
+
4704
+ //////////////////////////////////////////////////////////////
4705
+ // Poll Watcher API
4706
+ //////////////////////////////////////////////////////////////
4707
+ var pollFns = [],
4708
+ pollTimeout;
4709
+
4710
+ /**
4711
+ * @name $browser#addPollFn
4712
+ *
4713
+ * @param {function()} fn Poll function to add
4714
+ *
4715
+ * @description
4716
+ * Adds a function to the list of functions that poller periodically executes,
4717
+ * and starts polling if not started yet.
4718
+ *
4719
+ * @returns {function()} the added function
4720
+ */
4721
+ self.addPollFn = function(fn) {
4722
+ if (isUndefined(pollTimeout)) startPoller(100, setTimeout);
4723
+ pollFns.push(fn);
4724
+ return fn;
4725
+ };
4726
+
4727
+ /**
4728
+ * @param {number} interval How often should browser call poll functions (ms)
4729
+ * @param {function()} setTimeout Reference to a real or fake `setTimeout` function.
4730
+ *
4731
+ * @description
4732
+ * Configures the poller to run in the specified intervals, using the specified
4733
+ * setTimeout fn and kicks it off.
4734
+ */
4735
+ function startPoller(interval, setTimeout) {
4736
+ (function check() {
4737
+ forEach(pollFns, function(pollFn){ pollFn(); });
4738
+ pollTimeout = setTimeout(check, interval);
4739
+ })();
4740
+ }
4741
+
4742
+ //////////////////////////////////////////////////////////////
4743
+ // URL API
4744
+ //////////////////////////////////////////////////////////////
4745
+
4746
+ var lastBrowserUrl = location.href,
4747
+ lastHistoryState = history.state,
4748
+ baseElement = document.find('base'),
4749
+ reloadLocation = null;
4750
+
4751
+ /**
4752
+ * @name $browser#url
4753
+ *
4754
+ * @description
4755
+ * GETTER:
4756
+ * Without any argument, this method just returns current value of location.href.
4757
+ *
4758
+ * SETTER:
4759
+ * With at least one argument, this method sets url to new value.
4760
+ * If html5 history api supported, pushState/replaceState is used, otherwise
4761
+ * location.href/location.replace is used.
4762
+ * Returns its own instance to allow chaining
4763
+ *
4764
+ * NOTE: this api is intended for use only by the $location service. Please use the
4765
+ * {@link ng.$location $location service} to change url.
4766
+ *
4767
+ * @param {string} url New url (when used as setter)
4768
+ * @param {boolean=} replace Should new url replace current history record?
4769
+ * @param {object=} state object to use with pushState/replaceState
4770
+ */
4771
+ self.url = function(url, replace, state) {
4772
+ // In modern browsers `history.state` is `null` by default; treating it separately
4773
+ // from `undefined` would cause `$browser.url('/foo')` to change `history.state`
4774
+ // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
4775
+ if (isUndefined(state)) {
4776
+ state = null;
4777
+ }
4778
+
4779
+ // Android Browser BFCache causes location, history reference to become stale.
4780
+ if (location !== window.location) location = window.location;
4781
+ if (history !== window.history) history = window.history;
4782
+
4783
+ // setter
4784
+ if (url) {
4785
+ // Don't change anything if previous and current URLs and states match. This also prevents
4786
+ // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
4787
+ // See https://github.com/angular/angular.js/commit/ffb2701
4788
+ if (lastBrowserUrl === url && (!$sniffer.history || history.state === state)) {
4789
+ return;
4790
+ }
4791
+ var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
4792
+ lastBrowserUrl = url;
4793
+ // Don't use history API if only the hash changed
4794
+ // due to a bug in IE10/IE11 which leads
4795
+ // to not firing a `hashchange` nor `popstate` event
4796
+ // in some cases (see #9143).
4797
+ if ($sniffer.history && (!sameBase || history.state !== state)) {
4798
+ history[replace ? 'replaceState' : 'pushState'](state, '', url);
4799
+ lastHistoryState = history.state;
4800
+ } else {
4801
+ if (!sameBase) {
4802
+ reloadLocation = url;
4803
+ }
4804
+ if (replace) {
4805
+ location.replace(url);
4806
+ } else {
4807
+ location.href = url;
4808
+ }
4809
+ }
4810
+ return self;
4811
+ // getter
4812
+ } else {
4813
+ // - reloadLocation is needed as browsers don't allow to read out
4814
+ // the new location.href if a reload happened.
4815
+ // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
4816
+ return reloadLocation || location.href.replace(/%27/g,"'");
4817
+ }
4818
+ };
4819
+
4820
+ /**
4821
+ * @name $browser#state
4822
+ *
4823
+ * @description
4824
+ * This method is a getter.
4825
+ *
4826
+ * Return history.state or null if history.state is undefined.
4827
+ *
4828
+ * @returns {object} state
4829
+ */
4830
+ self.state = function() {
4831
+ return isUndefined(history.state) ? null : history.state;
4832
+ };
4833
+
4834
+ var urlChangeListeners = [],
4835
+ urlChangeInit = false;
4836
+
4837
+ function fireUrlChange() {
4838
+ if (lastBrowserUrl === self.url() && lastHistoryState === history.state) {
4839
+ return;
4840
+ }
4841
+
4842
+ lastBrowserUrl = self.url();
4843
+ forEach(urlChangeListeners, function(listener) {
4844
+ listener(self.url(), history.state);
4845
+ });
4846
+ }
4847
+
4848
+ /**
4849
+ * @name $browser#onUrlChange
4850
+ *
4851
+ * @description
4852
+ * Register callback function that will be called, when url changes.
4853
+ *
4854
+ * It's only called when the url is changed from outside of angular:
4855
+ * - user types different url into address bar
4856
+ * - user clicks on history (forward/back) button
4857
+ * - user clicks on a link
4858
+ *
4859
+ * It's not called when url is changed by $browser.url() method
4860
+ *
4861
+ * The listener gets called with new url as parameter.
4862
+ *
4863
+ * NOTE: this api is intended for use only by the $location service. Please use the
4864
+ * {@link ng.$location $location service} to monitor url changes in angular apps.
4865
+ *
4866
+ * @param {function(string)} listener Listener function to be called when url changes.
4867
+ * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
4868
+ */
4869
+ self.onUrlChange = function(callback) {
4870
+ // TODO(vojta): refactor to use node's syntax for events
4871
+ if (!urlChangeInit) {
4872
+ // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
4873
+ // don't fire popstate when user change the address bar and don't fire hashchange when url
4874
+ // changed by push/replaceState
4875
+
4876
+ // html5 history api - popstate event
4877
+ if ($sniffer.history) jqLite(window).on('popstate', fireUrlChange);
4878
+ // hashchange event
4879
+ jqLite(window).on('hashchange', fireUrlChange);
4880
+
4881
+ urlChangeInit = true;
4882
+ }
4883
+
4884
+ urlChangeListeners.push(callback);
4885
+ return callback;
4886
+ };
4887
+
4888
+ /**
4889
+ * Checks whether the url has changed outside of Angular.
4890
+ * Needs to be exported to be able to check for changes that have been done in sync,
4891
+ * as hashchange/popstate events fire in async.
4892
+ */
4893
+ self.$$checkUrlChange = fireUrlChange;
4894
+
4895
+ //////////////////////////////////////////////////////////////
4896
+ // Misc API
4897
+ //////////////////////////////////////////////////////////////
4898
+
4899
+ /**
4900
+ * @name $browser#baseHref
4901
+ *
4902
+ * @description
4903
+ * Returns current <base href>
4904
+ * (always relative - without domain)
4905
+ *
4906
+ * @returns {string} The current base href
4907
+ */
4908
+ self.baseHref = function() {
4909
+ var href = baseElement.attr('href');
4910
+ return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
4911
+ };
4912
+
4913
+ //////////////////////////////////////////////////////////////
4914
+ // Cookies API
4915
+ //////////////////////////////////////////////////////////////
4916
+ var lastCookies = {};
4917
+ var lastCookieString = '';
4918
+ var cookiePath = self.baseHref();
4919
+
4920
+ /**
4921
+ * @name $browser#cookies
4922
+ *
4923
+ * @param {string=} name Cookie name
4924
+ * @param {string=} value Cookie value
4925
+ *
4926
+ * @description
4927
+ * The cookies method provides a 'private' low level access to browser cookies.
4928
+ * It is not meant to be used directly, use the $cookie service instead.
4929
+ *
4930
+ * The return values vary depending on the arguments that the method was called with as follows:
4931
+ *
4932
+ * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify
4933
+ * it
4934
+ * - cookies(name, value) -> set name to value, if value is undefined delete the cookie
4935
+ * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that
4936
+ * way)
4937
+ *
4938
+ * @returns {Object} Hash of all cookies (if called without any parameter)
4939
+ */
4940
+ self.cookies = function(name, value) {
4941
+ var cookieLength, cookieArray, cookie, i, index;
4942
+
4943
+ if (name) {
4944
+ if (value === undefined) {
4945
+ rawDocument.cookie = encodeURIComponent(name) + "=;path=" + cookiePath +
4946
+ ";expires=Thu, 01 Jan 1970 00:00:00 GMT";
4947
+ } else {
4948
+ if (isString(value)) {
4949
+ cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) +
4950
+ ';path=' + cookiePath).length + 1;
4951
+
4952
+ // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
4953
+ // - 300 cookies
4954
+ // - 20 cookies per unique domain
4955
+ // - 4096 bytes per cookie
4956
+ if (cookieLength > 4096) {
4957
+ $log.warn("Cookie '"+ name +
4958
+ "' possibly not set or overflowed because it was too large ("+
4959
+ cookieLength + " > 4096 bytes)!");
4960
+ }
4961
+ }
4962
+ }
4963
+ } else {
4964
+ if (rawDocument.cookie !== lastCookieString) {
4965
+ lastCookieString = rawDocument.cookie;
4966
+ cookieArray = lastCookieString.split("; ");
4967
+ lastCookies = {};
4968
+
4969
+ for (i = 0; i < cookieArray.length; i++) {
4970
+ cookie = cookieArray[i];
4971
+ index = cookie.indexOf('=');
4972
+ if (index > 0) { //ignore nameless cookies
4973
+ name = decodeURIComponent(cookie.substring(0, index));
4974
+ // the first value that is seen for a cookie is the most
4975
+ // specific one. values for the same cookie name that
4976
+ // follow are for less specific paths.
4977
+ if (lastCookies[name] === undefined) {
4978
+ lastCookies[name] = decodeURIComponent(cookie.substring(index + 1));
4979
+ }
4980
+ }
4981
+ }
4982
+ }
4983
+ return lastCookies;
4984
+ }
4985
+ };
4986
+
4987
+
4988
+ /**
4989
+ * @name $browser#defer
4990
+ * @param {function()} fn A function, who's execution should be deferred.
4991
+ * @param {number=} [delay=0] of milliseconds to defer the function execution.
4992
+ * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
4993
+ *
4994
+ * @description
4995
+ * Executes a fn asynchronously via `setTimeout(fn, delay)`.
4996
+ *
4997
+ * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
4998
+ * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
4999
+ * via `$browser.defer.flush()`.
5000
+ *
5001
+ */
5002
+ self.defer = function(fn, delay) {
5003
+ var timeoutId;
5004
+ outstandingRequestCount++;
5005
+ timeoutId = setTimeout(function() {
5006
+ delete pendingDeferIds[timeoutId];
5007
+ completeOutstandingRequest(fn);
5008
+ }, delay || 0);
5009
+ pendingDeferIds[timeoutId] = true;
5010
+ return timeoutId;
5011
+ };
5012
+
5013
+
5014
+ /**
5015
+ * @name $browser#defer.cancel
5016
+ *
5017
+ * @description
5018
+ * Cancels a deferred task identified with `deferId`.
5019
+ *
5020
+ * @param {*} deferId Token returned by the `$browser.defer` function.
5021
+ * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
5022
+ * canceled.
5023
+ */
5024
+ self.defer.cancel = function(deferId) {
5025
+ if (pendingDeferIds[deferId]) {
5026
+ delete pendingDeferIds[deferId];
5027
+ clearTimeout(deferId);
5028
+ completeOutstandingRequest(noop);
5029
+ return true;
5030
+ }
5031
+ return false;
5032
+ };
5033
+
5034
+}
5035
+
5036
+function $BrowserProvider(){
5037
+ this.$get = ['$window', '$log', '$sniffer', '$document',
5038
+ function( $window, $log, $sniffer, $document){
5039
+ return new Browser($window, $document, $log, $sniffer);
5040
+ }];
5041
+}
5042
+
5043
+/**
5044
+ * @ngdoc service
5045
+ * @name $cacheFactory
5046
+ *
5047
+ * @description
5048
+ * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
5049
+ * them.
5050
+ *
5051
+ * ```js
5052
+ *
5053
+ * var cache = $cacheFactory('cacheId');
5054
+ * expect($cacheFactory.get('cacheId')).toBe(cache);
5055
+ * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
5056
+ *
5057
+ * cache.put("key", "value");
5058
+ * cache.put("another key", "another value");
5059
+ *
5060
+ * // We've specified no options on creation
5061
+ * expect(cache.info()).toEqual({id: 'cacheId', size: 2});
5062
+ *
5063
+ * ```
5064
+ *
5065
+ *
5066
+ * @param {string} cacheId Name or id of the newly created cache.
5067
+ * @param {object=} options Options object that specifies the cache behavior. Properties:
5068
+ *
5069
+ * - `{number=}` `capacity` — turns the cache into LRU cache.
5070
+ *
5071
+ * @returns {object} Newly created cache object with the following set of methods:
5072
+ *
5073
+ * - `{object}` `info()` — Returns id, size, and options of cache.
5074
+ * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
5075
+ * it.
5076
+ * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
5077
+ * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
5078
+ * - `{void}` `removeAll()` — Removes all cached values.
5079
+ * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
5080
+ *
5081
+ * @example
5082
+ <example module="cacheExampleApp">
5083
+ <file name="index.html">
5084
+ <div ng-controller="CacheController">
5085
+ <input ng-model="newCacheKey" placeholder="Key">
5086
+ <input ng-model="newCacheValue" placeholder="Value">
5087
+ <button ng-click="put(newCacheKey, newCacheValue)">Cache</button>
5088
+
5089
+ <p ng-if="keys.length">Cached Values</p>
5090
+ <div ng-repeat="key in keys">
5091
+ <span ng-bind="key"></span>
5092
+ <span>: </span>
5093
+ <b ng-bind="cache.get(key)"></b>
5094
+ </div>
5095
+
5096
+ <p>Cache Info</p>
5097
+ <div ng-repeat="(key, value) in cache.info()">
5098
+ <span ng-bind="key"></span>
5099
+ <span>: </span>
5100
+ <b ng-bind="value"></b>
5101
+ </div>
5102
+ </div>
5103
+ </file>
5104
+ <file name="script.js">
5105
+ angular.module('cacheExampleApp', []).
5106
+ controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
5107
+ $scope.keys = [];
5108
+ $scope.cache = $cacheFactory('cacheId');
5109
+ $scope.put = function(key, value) {
5110
+ if ($scope.cache.get(key) === undefined) {
5111
+ $scope.keys.push(key);
5112
+ }
5113
+ $scope.cache.put(key, value === undefined ? null : value);
5114
+ };
5115
+ }]);
5116
+ </file>
5117
+ <file name="style.css">
5118
+ p {
5119
+ margin: 10px 0 3px;
5120
+ }
5121
+ </file>
5122
+ </example>
5123
+ */
5124
+function $CacheFactoryProvider() {
5125
+
5126
+ this.$get = function() {
5127
+ var caches = {};
5128
+
5129
+ function cacheFactory(cacheId, options) {
5130
+ if (cacheId in caches) {
5131
+ throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
5132
+ }
5133
+
5134
+ var size = 0,
5135
+ stats = extend({}, options, {id: cacheId}),
5136
+ data = {},
5137
+ capacity = (options && options.capacity) || Number.MAX_VALUE,
5138
+ lruHash = {},
5139
+ freshEnd = null,
5140
+ staleEnd = null;
5141
+
5142
+ /**
5143
+ * @ngdoc type
5144
+ * @name $cacheFactory.Cache
5145
+ *
5146
+ * @description
5147
+ * A cache object used to store and retrieve data, primarily used by
5148
+ * {@link $http $http} and the {@link ng.directive:script script} directive to cache
5149
+ * templates and other data.
5150
+ *
5151
+ * ```js
5152
+ * angular.module('superCache')
5153
+ * .factory('superCache', ['$cacheFactory', function($cacheFactory) {
5154
+ * return $cacheFactory('super-cache');
5155
+ * }]);
5156
+ * ```
5157
+ *
5158
+ * Example test:
5159
+ *
5160
+ * ```js
5161
+ * it('should behave like a cache', inject(function(superCache) {
5162
+ * superCache.put('key', 'value');
5163
+ * superCache.put('another key', 'another value');
5164
+ *
5165
+ * expect(superCache.info()).toEqual({
5166
+ * id: 'super-cache',
5167
+ * size: 2
5168
+ * });
5169
+ *
5170
+ * superCache.remove('another key');
5171
+ * expect(superCache.get('another key')).toBeUndefined();
5172
+ *
5173
+ * superCache.removeAll();
5174
+ * expect(superCache.info()).toEqual({
5175
+ * id: 'super-cache',
5176
+ * size: 0
5177
+ * });
5178
+ * }));
5179
+ * ```
5180
+ */
5181
+ return caches[cacheId] = {
5182
+
5183
+ /**
5184
+ * @ngdoc method
5185
+ * @name $cacheFactory.Cache#put
5186
+ * @kind function
5187
+ *
5188
+ * @description
5189
+ * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
5190
+ * retrieved later, and incrementing the size of the cache if the key was not already
5191
+ * present in the cache. If behaving like an LRU cache, it will also remove stale
5192
+ * entries from the set.
5193
+ *
5194
+ * It will not insert undefined values into the cache.
5195
+ *
5196
+ * @param {string} key the key under which the cached data is stored.
5197
+ * @param {*} value the value to store alongside the key. If it is undefined, the key
5198
+ * will not be stored.
5199
+ * @returns {*} the value stored.
5200
+ */
5201
+ put: function(key, value) {
5202
+ if (capacity < Number.MAX_VALUE) {
5203
+ var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
5204
+
5205
+ refresh(lruEntry);
5206
+ }
5207
+
5208
+ if (isUndefined(value)) return;
5209
+ if (!(key in data)) size++;
5210
+ data[key] = value;
5211
+
5212
+ if (size > capacity) {
5213
+ this.remove(staleEnd.key);
5214
+ }
5215
+
5216
+ return value;
5217
+ },
5218
+
5219
+ /**
5220
+ * @ngdoc method
5221
+ * @name $cacheFactory.Cache#get
5222
+ * @kind function
5223
+ *
5224
+ * @description
5225
+ * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
5226
+ *
5227
+ * @param {string} key the key of the data to be retrieved
5228
+ * @returns {*} the value stored.
5229
+ */
5230
+ get: function(key) {
5231
+ if (capacity < Number.MAX_VALUE) {
5232
+ var lruEntry = lruHash[key];
5233
+
5234
+ if (!lruEntry) return;
5235
+
5236
+ refresh(lruEntry);
5237
+ }
5238
+
5239
+ return data[key];
5240
+ },
5241
+
5242
+
5243
+ /**
5244
+ * @ngdoc method
5245
+ * @name $cacheFactory.Cache#remove
5246
+ * @kind function
5247
+ *
5248
+ * @description
5249
+ * Removes an entry from the {@link $cacheFactory.Cache Cache} object.
5250
+ *
5251
+ * @param {string} key the key of the entry to be removed
5252
+ */
5253
+ remove: function(key) {
5254
+ if (capacity < Number.MAX_VALUE) {
5255
+ var lruEntry = lruHash[key];
5256
+
5257
+ if (!lruEntry) return;
5258
+
5259
+ if (lruEntry == freshEnd) freshEnd = lruEntry.p;
5260
+ if (lruEntry == staleEnd) staleEnd = lruEntry.n;
5261
+ link(lruEntry.n,lruEntry.p);
5262
+
5263
+ delete lruHash[key];
5264
+ }
5265
+
5266
+ delete data[key];
5267
+ size--;
5268
+ },
5269
+
5270
+
5271
+ /**
5272
+ * @ngdoc method
5273
+ * @name $cacheFactory.Cache#removeAll
5274
+ * @kind function
5275
+ *
5276
+ * @description
5277
+ * Clears the cache object of any entries.
5278
+ */
5279
+ removeAll: function() {
5280
+ data = {};
5281
+ size = 0;
5282
+ lruHash = {};
5283
+ freshEnd = staleEnd = null;
5284
+ },
5285
+
5286
+
5287
+ /**
5288
+ * @ngdoc method
5289
+ * @name $cacheFactory.Cache#destroy
5290
+ * @kind function
5291
+ *
5292
+ * @description
5293
+ * Destroys the {@link $cacheFactory.Cache Cache} object entirely,
5294
+ * removing it from the {@link $cacheFactory $cacheFactory} set.
5295
+ */
5296
+ destroy: function() {
5297
+ data = null;
5298
+ stats = null;
5299
+ lruHash = null;
5300
+ delete caches[cacheId];
5301
+ },
5302
+
5303
+
5304
+ /**
5305
+ * @ngdoc method
5306
+ * @name $cacheFactory.Cache#info
5307
+ * @kind function
5308
+ *
5309
+ * @description
5310
+ * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
5311
+ *
5312
+ * @returns {object} an object with the following properties:
5313
+ * <ul>
5314
+ * <li>**id**: the id of the cache instance</li>
5315
+ * <li>**size**: the number of entries kept in the cache instance</li>
5316
+ * <li>**...**: any additional properties from the options object when creating the
5317
+ * cache.</li>
5318
+ * </ul>
5319
+ */
5320
+ info: function() {
5321
+ return extend({}, stats, {size: size});
5322
+ }
5323
+ };
5324
+
5325
+
5326
+ /**
5327
+ * makes the `entry` the freshEnd of the LRU linked list
5328
+ */
5329
+ function refresh(entry) {
5330
+ if (entry != freshEnd) {
5331
+ if (!staleEnd) {
5332
+ staleEnd = entry;
5333
+ } else if (staleEnd == entry) {
5334
+ staleEnd = entry.n;
5335
+ }
5336
+
5337
+ link(entry.n, entry.p);
5338
+ link(entry, freshEnd);
5339
+ freshEnd = entry;
5340
+ freshEnd.n = null;
5341
+ }
5342
+ }
5343
+
5344
+
5345
+ /**
5346
+ * bidirectionally links two entries of the LRU linked list
5347
+ */
5348
+ function link(nextEntry, prevEntry) {
5349
+ if (nextEntry != prevEntry) {
5350
+ if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
5351
+ if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
5352
+ }
5353
+ }
5354
+ }
5355
+
5356
+
5357
+ /**
5358
+ * @ngdoc method
5359
+ * @name $cacheFactory#info
5360
+ *
5361
+ * @description
5362
+ * Get information about all the caches that have been created
5363
+ *
5364
+ * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
5365
+ */
5366
+ cacheFactory.info = function() {
5367
+ var info = {};
5368
+ forEach(caches, function(cache, cacheId) {
5369
+ info[cacheId] = cache.info();
5370
+ });
5371
+ return info;
5372
+ };
5373
+
5374
+
5375
+ /**
5376
+ * @ngdoc method
5377
+ * @name $cacheFactory#get
5378
+ *
5379
+ * @description
5380
+ * Get access to a cache object by the `cacheId` used when it was created.
5381
+ *
5382
+ * @param {string} cacheId Name or id of a cache to access.
5383
+ * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
5384
+ */
5385
+ cacheFactory.get = function(cacheId) {
5386
+ return caches[cacheId];
5387
+ };
5388
+
5389
+
5390
+ return cacheFactory;
5391
+ };
5392
+}
5393
+
5394
+/**
5395
+ * @ngdoc service
5396
+ * @name $templateCache
5397
+ *
5398
+ * @description
5399
+ * The first time a template is used, it is loaded in the template cache for quick retrieval. You
5400
+ * can load templates directly into the cache in a `script` tag, or by consuming the
5401
+ * `$templateCache` service directly.
5402
+ *
5403
+ * Adding via the `script` tag:
5404
+ *
5405
+ * ```html
5406
+ * <script type="text/ng-template" id="templateId.html">
5407
+ * <p>This is the content of the template</p>
5408
+ * </script>
5409
+ * ```
5410
+ *
5411
+ * **Note:** the `script` tag containing the template does not need to be included in the `head` of
5412
+ * the document, but it must be below the `ng-app` definition.
5413
+ *
5414
+ * Adding via the $templateCache service:
5415
+ *
5416
+ * ```js
5417
+ * var myApp = angular.module('myApp', []);
5418
+ * myApp.run(function($templateCache) {
5419
+ * $templateCache.put('templateId.html', 'This is the content of the template');
5420
+ * });
5421
+ * ```
5422
+ *
5423
+ * To retrieve the template later, simply use it in your HTML:
5424
+ * ```html
5425
+ * <div ng-include=" 'templateId.html' "></div>
5426
+ * ```
5427
+ *
5428
+ * or get it via Javascript:
5429
+ * ```js
5430
+ * $templateCache.get('templateId.html')
5431
+ * ```
5432
+ *
5433
+ * See {@link ng.$cacheFactory $cacheFactory}.
5434
+ *
5435
+ */
5436
+function $TemplateCacheProvider() {
5437
+ this.$get = ['$cacheFactory', function($cacheFactory) {
5438
+ return $cacheFactory('templates');
5439
+ }];
5440
+}
5441
+
5442
+/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
5443
+ *
5444
+ * DOM-related variables:
5445
+ *
5446
+ * - "node" - DOM Node
5447
+ * - "element" - DOM Element or Node
5448
+ * - "$node" or "$element" - jqLite-wrapped node or element
5449
+ *
5450
+ *
5451
+ * Compiler related stuff:
5452
+ *
5453
+ * - "linkFn" - linking fn of a single directive
5454
+ * - "nodeLinkFn" - function that aggregates all linking fns for a particular node
5455
+ * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node
5456
+ * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
5457
+ */
5458
+
5459
+
5460
+/**
5461
+ * @ngdoc service
5462
+ * @name $compile
5463
+ * @kind function
5464
+ *
5465
+ * @description
5466
+ * Compiles an HTML string or DOM into a template and produces a template function, which
5467
+ * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
5468
+ *
5469
+ * The compilation is a process of walking the DOM tree and matching DOM elements to
5470
+ * {@link ng.$compileProvider#directive directives}.
5471
+ *
5472
+ * <div class="alert alert-warning">
5473
+ * **Note:** This document is an in-depth reference of all directive options.
5474
+ * For a gentle introduction to directives with examples of common use cases,
5475
+ * see the {@link guide/directive directive guide}.
5476
+ * </div>
5477
+ *
5478
+ * ## Comprehensive Directive API
5479
+ *
5480
+ * There are many different options for a directive.
5481
+ *
5482
+ * The difference resides in the return value of the factory function.
5483
+ * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
5484
+ * or just the `postLink` function (all other properties will have the default values).
5485
+ *
5486
+ * <div class="alert alert-success">
5487
+ * **Best Practice:** It's recommended to use the "directive definition object" form.
5488
+ * </div>
5489
+ *
5490
+ * Here's an example directive declared with a Directive Definition Object:
5491
+ *
5492
+ * ```js
5493
+ * var myModule = angular.module(...);
5494
+ *
5495
+ * myModule.directive('directiveName', function factory(injectables) {
5496
+ * var directiveDefinitionObject = {
5497
+ * priority: 0,
5498
+ * template: '<div></div>', // or // function(tElement, tAttrs) { ... },
5499
+ * // or
5500
+ * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
5501
+ * transclude: false,
5502
+ * restrict: 'A',
5503
+ * scope: false,
5504
+ * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
5505
+ * controllerAs: 'stringAlias',
5506
+ * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
5507
+ * compile: function compile(tElement, tAttrs, transclude) {
5508
+ * return {
5509
+ * pre: function preLink(scope, iElement, iAttrs, controller) { ... },
5510
+ * post: function postLink(scope, iElement, iAttrs, controller) { ... }
5511
+ * }
5512
+ * // or
5513
+ * // return function postLink( ... ) { ... }
5514
+ * },
5515
+ * // or
5516
+ * // link: {
5517
+ * // pre: function preLink(scope, iElement, iAttrs, controller) { ... },
5518
+ * // post: function postLink(scope, iElement, iAttrs, controller) { ... }
5519
+ * // }
5520
+ * // or
5521
+ * // link: function postLink( ... ) { ... }
5522
+ * };
5523
+ * return directiveDefinitionObject;
5524
+ * });
5525
+ * ```
5526
+ *
5527
+ * <div class="alert alert-warning">
5528
+ * **Note:** Any unspecified options will use the default value. You can see the default values below.
5529
+ * </div>
5530
+ *
5531
+ * Therefore the above can be simplified as:
5532
+ *
5533
+ * ```js
5534
+ * var myModule = angular.module(...);
5535
+ *
5536
+ * myModule.directive('directiveName', function factory(injectables) {
5537
+ * var directiveDefinitionObject = {
5538
+ * link: function postLink(scope, iElement, iAttrs) { ... }
5539
+ * };
5540
+ * return directiveDefinitionObject;
5541
+ * // or
5542
+ * // return function postLink(scope, iElement, iAttrs) { ... }
5543
+ * });
5544
+ * ```
5545
+ *
5546
+ *
5547
+ *
5548
+ * ### Directive Definition Object
5549
+ *
5550
+ * The directive definition object provides instructions to the {@link ng.$compile
5551
+ * compiler}. The attributes are:
5552
+ *
5553
+ * #### `multiElement`
5554
+ * When this property is set to true, the HTML compiler will collect DOM nodes between
5555
+ * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
5556
+ * together as the directive elements. It is recomended that this feature be used on directives
5557
+ * which are not strictly behavioural (such as {@link api/ng.directive:ngClick ngClick}), and which
5558
+ * do not manipulate or replace child nodes (such as {@link api/ng.directive:ngInclude ngInclude}).
5559
+ *
5560
+ * #### `priority`
5561
+ * When there are multiple directives defined on a single DOM element, sometimes it
5562
+ * is necessary to specify the order in which the directives are applied. The `priority` is used
5563
+ * to sort the directives before their `compile` functions get called. Priority is defined as a
5564
+ * number. Directives with greater numerical `priority` are compiled first. Pre-link functions
5565
+ * are also run in priority order, but post-link functions are run in reverse order. The order
5566
+ * of directives with the same priority is undefined. The default priority is `0`.
5567
+ *
5568
+ * #### `terminal`
5569
+ * If set to true then the current `priority` will be the last set of directives
5570
+ * which will execute (any directives at the current priority will still execute
5571
+ * as the order of execution on same `priority` is undefined).
5572
+ *
5573
+ * #### `scope`
5574
+ * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the
5575
+ * same element request a new scope, only one new scope is created. The new scope rule does not
5576
+ * apply for the root of the template since the root of the template always gets a new scope.
5577
+ *
5578
+ * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from
5579
+ * normal scope in that it does not prototypically inherit from the parent scope. This is useful
5580
+ * when creating reusable components, which should not accidentally read or modify data in the
5581
+ * parent scope.
5582
+ *
5583
+ * The 'isolate' scope takes an object hash which defines a set of local scope properties
5584
+ * derived from the parent scope. These local properties are useful for aliasing values for
5585
+ * templates. Locals definition is a hash of local scope property to its source:
5586
+ *
5587
+ * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
5588
+ * always a string since DOM attributes are strings. If no `attr` name is specified then the
5589
+ * attribute name is assumed to be the same as the local name.
5590
+ * Given `<widget my-attr="hello {{name}}">` and widget definition
5591
+ * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
5592
+ * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
5593
+ * `localName` property on the widget scope. The `name` is read from the parent scope (not
5594
+ * component scope).
5595
+ *
5596
+ * * `=` or `=attr` - set up bi-directional binding between a local scope property and the
5597
+ * parent scope property of name defined via the value of the `attr` attribute. If no `attr`
5598
+ * name is specified then the attribute name is assumed to be the same as the local name.
5599
+ * Given `<widget my-attr="parentModel">` and widget definition of
5600
+ * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
5601
+ * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
5602
+ * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
5603
+ * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
5604
+ * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional.
5605
+ *
5606
+ * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
5607
+ * If no `attr` name is specified then the attribute name is assumed to be the same as the
5608
+ * local name. Given `<widget my-attr="count = count + value">` and widget definition of
5609
+ * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
5610
+ * a function wrapper for the `count = count + value` expression. Often it's desirable to
5611
+ * pass data from the isolated scope via an expression to the parent scope, this can be
5612
+ * done by passing a map of local variable names and values into the expression wrapper fn.
5613
+ * For example, if the expression is `increment(amount)` then we can specify the amount value
5614
+ * by calling the `localFn` as `localFn({amount: 22})`.
5615
+ *
5616
+ *
5617
+ * #### `bindToController`
5618
+ * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController` will
5619
+ * allow a component to have its properties bound to the controller, rather than to scope. When the controller
5620
+ * is instantiated, the initial values of the isolate scope bindings are already available.
5621
+ *
5622
+ * #### `controller`
5623
+ * Controller constructor function. The controller is instantiated before the
5624
+ * pre-linking phase and it is shared with other directives (see
5625
+ * `require` attribute). This allows the directives to communicate with each other and augment
5626
+ * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
5627
+ *
5628
+ * * `$scope` - Current scope associated with the element
5629
+ * * `$element` - Current element
5630
+ * * `$attrs` - Current attributes object for the element
5631
+ * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
5632
+ * `function([scope], cloneLinkingFn, futureParentElement)`.
5633
+ * * `scope`: optional argument to override the scope.
5634
+ * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
5635
+ * * `futureParentElement`:
5636
+ * * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
5637
+ * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
5638
+ * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
5639
+ * and when the `cloneLinkinFn` is passed,
5640
+ * as those elements need to created and cloned in a special way when they are defined outside their
5641
+ * usual containers (e.g. like `<svg>`).
5642
+ * * See also the `directive.templateNamespace` property.
5643
+ *
5644
+ *
5645
+ * #### `require`
5646
+ * Require another directive and inject its controller as the fourth argument to the linking function. The
5647
+ * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the
5648
+ * injected argument will be an array in corresponding order. If no such directive can be
5649
+ * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:
5650
+ *
5651
+ * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.
5652
+ * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.
5653
+ * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.
5654
+ * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.
5655
+ * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass
5656
+ * `null` to the `link` fn if not found.
5657
+ * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass
5658
+ * `null` to the `link` fn if not found.
5659
+ *
5660
+ *
5661
+ * #### `controllerAs`
5662
+ * Controller alias at the directive scope. An alias for the controller so it
5663
+ * can be referenced at the directive template. The directive needs to define a scope for this
5664
+ * configuration to be used. Useful in the case when directive is used as component.
5665
+ *
5666
+ *
5667
+ * #### `restrict`
5668
+ * String of subset of `EACM` which restricts the directive to a specific directive
5669
+ * declaration style. If omitted, the defaults (elements and attributes) are used.
5670
+ *
5671
+ * * `E` - Element name (default): `<my-directive></my-directive>`
5672
+ * * `A` - Attribute (default): `<div my-directive="exp"></div>`
5673
+ * * `C` - Class: `<div class="my-directive: exp;"></div>`
5674
+ * * `M` - Comment: `<!-- directive: my-directive exp -->`
5675
+ *
5676
+ *
5677
+ * #### `templateNamespace`
5678
+ * String representing the document type used by the markup in the template.
5679
+ * AngularJS needs this information as those elements need to be created and cloned
5680
+ * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.
5681
+ *
5682
+ * * `html` - All root nodes in the template are HTML. Root nodes may also be
5683
+ * top-level elements such as `<svg>` or `<math>`.
5684
+ * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).
5685
+ * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).
5686
+ *
5687
+ * If no `templateNamespace` is specified, then the namespace is considered to be `html`.
5688
+ *
5689
+ * #### `template`
5690
+ * HTML markup that may:
5691
+ * * Replace the contents of the directive's element (default).
5692
+ * * Replace the directive's element itself (if `replace` is true - DEPRECATED).
5693
+ * * Wrap the contents of the directive's element (if `transclude` is true).
5694
+ *
5695
+ * Value may be:
5696
+ *
5697
+ * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.
5698
+ * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`
5699
+ * function api below) and returns a string value.
5700
+ *
5701
+ *
5702
+ * #### `templateUrl`
5703
+ * This is similar to `template` but the template is loaded from the specified URL, asynchronously.
5704
+ *
5705
+ * Because template loading is asynchronous the compiler will suspend compilation of directives on that element
5706
+ * for later when the template has been resolved. In the meantime it will continue to compile and link
5707
+ * sibling and parent elements as though this element had not contained any directives.
5708
+ *
5709
+ * The compiler does not suspend the entire compilation to wait for templates to be loaded because this
5710
+ * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the
5711
+ * case when only one deeply nested directive has `templateUrl`.
5712
+ *
5713
+ * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}
5714
+ *
5715
+ * You can specify `templateUrl` as a string representing the URL or as a function which takes two
5716
+ * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns
5717
+ * a string value representing the url. In either case, the template URL is passed through {@link
5718
+ * api/ng.$sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.
5719
+ *
5720
+ *
5721
+ * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)
5722
+ * specify what the template should replace. Defaults to `false`.
5723
+ *
5724
+ * * `true` - the template will replace the directive's element.
5725
+ * * `false` - the template will replace the contents of the directive's element.
5726
+ *
5727
+ * The replacement process migrates all of the attributes / classes from the old element to the new
5728
+ * one. See the {@link guide/directive#creating-custom-directives_creating-directives_template-expanding-directive
5729
+ * Directives Guide} for an example.
5730
+ *
5731
+ * There are very few scenarios where element replacement is required for the application function,
5732
+ * the main one being reusable custom components that are used within SVG contexts
5733
+ * (because SVG doesn't work with custom elements in the DOM tree).
5734
+ *
5735
+ * #### `transclude`
5736
+ * Extract the contents of the element where the directive appears and make it available to the directive.
5737
+ * The contents are compiled and provided to the directive as a **transclusion function**. See the
5738
+ * {@link $compile#transclusion Transclusion} section below.
5739
+ *
5740
+ * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the
5741
+ * directive's element or the entire element:
5742
+ *
5743
+ * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
5744
+ * * `'element'` - transclude the whole of the directive's element including any directives on this
5745
+ * element that defined at a lower priority than this directive. When used, the `template`
5746
+ * property is ignored.
5747
+ *
5748
+ *
5749
+ * #### `compile`
5750
+ *
5751
+ * ```js
5752
+ * function compile(tElement, tAttrs, transclude) { ... }
5753
+ * ```
5754
+ *
5755
+ * The compile function deals with transforming the template DOM. Since most directives do not do
5756
+ * template transformation, it is not used often. The compile function takes the following arguments:
5757
+ *
5758
+ * * `tElement` - template element - The element where the directive has been declared. It is
5759
+ * safe to do template transformation on the element and child elements only.
5760
+ *
5761
+ * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared
5762
+ * between all directive compile functions.
5763
+ *
5764
+ * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`
5765
+ *
5766
+ * <div class="alert alert-warning">
5767
+ * **Note:** The template instance and the link instance may be different objects if the template has
5768
+ * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that
5769
+ * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration
5770
+ * should be done in a linking function rather than in a compile function.
5771
+ * </div>
5772
+
5773
+ * <div class="alert alert-warning">
5774
+ * **Note:** The compile function cannot handle directives that recursively use themselves in their
5775
+ * own templates or compile functions. Compiling these directives results in an infinite loop and a
5776
+ * stack overflow errors.
5777
+ *
5778
+ * This can be avoided by manually using $compile in the postLink function to imperatively compile
5779
+ * a directive's template instead of relying on automatic template compilation via `template` or
5780
+ * `templateUrl` declaration or manual compilation inside the compile function.
5781
+ * </div>
5782
+ *
5783
+ * <div class="alert alert-error">
5784
+ * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it
5785
+ * e.g. does not know about the right outer scope. Please use the transclude function that is passed
5786
+ * to the link function instead.
5787
+ * </div>
5788
+
5789
+ * A compile function can have a return value which can be either a function or an object.
5790
+ *
5791
+ * * returning a (post-link) function - is equivalent to registering the linking function via the
5792
+ * `link` property of the config object when the compile function is empty.
5793
+ *
5794
+ * * returning an object with function(s) registered via `pre` and `post` properties - allows you to
5795
+ * control when a linking function should be called during the linking phase. See info about
5796
+ * pre-linking and post-linking functions below.
5797
+ *
5798
+ *
5799
+ * #### `link`
5800
+ * This property is used only if the `compile` property is not defined.
5801
+ *
5802
+ * ```js
5803
+ * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }
5804
+ * ```
5805
+ *
5806
+ * The link function is responsible for registering DOM listeners as well as updating the DOM. It is
5807
+ * executed after the template has been cloned. This is where most of the directive logic will be
5808
+ * put.
5809
+ *
5810
+ * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the
5811
+ * directive for registering {@link ng.$rootScope.Scope#$watch watches}.
5812
+ *
5813
+ * * `iElement` - instance element - The element where the directive is to be used. It is safe to
5814
+ * manipulate the children of the element only in `postLink` function since the children have
5815
+ * already been linked.
5816
+ *
5817
+ * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared
5818
+ * between all directive linking functions.
5819
+ *
5820
+ * * `controller` - a controller instance - A controller instance if at least one directive on the
5821
+ * element defines a controller. The controller is shared among all the directives, which allows
5822
+ * the directives to use the controllers as a communication channel.
5823
+ *
5824
+ * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
5825
+ * This is the same as the `$transclude`
5826
+ * parameter of directive controllers, see there for details.
5827
+ * `function([scope], cloneLinkingFn, futureParentElement)`.
5828
+ *
5829
+ * #### Pre-linking function
5830
+ *
5831
+ * Executed before the child elements are linked. Not safe to do DOM transformation since the
5832
+ * compiler linking function will fail to locate the correct elements for linking.
5833
+ *
5834
+ * #### Post-linking function
5835
+ *
5836
+ * Executed after the child elements are linked.
5837
+ *
5838
+ * Note that child elements that contain `templateUrl` directives will not have been compiled
5839
+ * and linked since they are waiting for their template to load asynchronously and their own
5840
+ * compilation and linking has been suspended until that occurs.
5841
+ *
5842
+ * It is safe to do DOM transformation in the post-linking function on elements that are not waiting
5843
+ * for their async templates to be resolved.
5844
+ *
5845
+ *
5846
+ * ### Transclusion
5847
+ *
5848
+ * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and
5849
+ * copying them to another part of the DOM, while maintaining their connection to the original AngularJS
5850
+ * scope from where they were taken.
5851
+ *
5852
+ * Transclusion is used (often with {@link ngTransclude}) to insert the
5853
+ * original contents of a directive's element into a specified place in the template of the directive.
5854
+ * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded
5855
+ * content has access to the properties on the scope from which it was taken, even if the directive
5856
+ * has isolated scope.
5857
+ * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.
5858
+ *
5859
+ * This makes it possible for the widget to have private state for its template, while the transcluded
5860
+ * content has access to its originating scope.
5861
+ *
5862
+ * <div class="alert alert-warning">
5863
+ * **Note:** When testing an element transclude directive you must not place the directive at the root of the
5864
+ * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives
5865
+ * Testing Transclusion Directives}.
5866
+ * </div>
5867
+ *
5868
+ * #### Transclusion Functions
5869
+ *
5870
+ * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion
5871
+ * function** to the directive's `link` function and `controller`. This transclusion function is a special
5872
+ * **linking function** that will return the compiled contents linked to a new transclusion scope.
5873
+ *
5874
+ * <div class="alert alert-info">
5875
+ * If you are just using {@link ngTransclude} then you don't need to worry about this function, since
5876
+ * ngTransclude will deal with it for us.
5877
+ * </div>
5878
+ *
5879
+ * If you want to manually control the insertion and removal of the transcluded content in your directive
5880
+ * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery
5881
+ * object that contains the compiled DOM, which is linked to the correct transclusion scope.
5882
+ *
5883
+ * When you call a transclusion function you can pass in a **clone attach function**. This function is accepts
5884
+ * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded
5885
+ * content and the `scope` is the newly created transclusion scope, to which the clone is bound.
5886
+ *
5887
+ * <div class="alert alert-info">
5888
+ * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function
5889
+ * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.
5890
+ * </div>
5891
+ *
5892
+ * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone
5893
+ * attach function**:
5894
+ *
5895
+ * ```js
5896
+ * var transcludedContent, transclusionScope;
5897
+ *
5898
+ * $transclude(function(clone, scope) {
5899
+ * element.append(clone);
5900
+ * transcludedContent = clone;
5901
+ * transclusionScope = scope;
5902
+ * });
5903
+ * ```
5904
+ *
5905
+ * Later, if you want to remove the transcluded content from your DOM then you should also destroy the
5906
+ * associated transclusion scope:
5907
+ *
5908
+ * ```js
5909
+ * transcludedContent.remove();
5910
+ * transclusionScope.$destroy();
5911
+ * ```
5912
+ *
5913
+ * <div class="alert alert-info">
5914
+ * **Best Practice**: if you intend to add and remove transcluded content manually in your directive
5915
+ * (by calling the transclude function to get the DOM and and calling `element.remove()` to remove it),
5916
+ * then you are also responsible for calling `$destroy` on the transclusion scope.
5917
+ * </div>
5918
+ *
5919
+ * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}
5920
+ * automatically destroy their transluded clones as necessary so you do not need to worry about this if
5921
+ * you are simply using {@link ngTransclude} to inject the transclusion into your directive.
5922
+ *
5923
+ *
5924
+ * #### Transclusion Scopes
5925
+ *
5926
+ * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion
5927
+ * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed
5928
+ * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it
5929
+ * was taken.
5930
+ *
5931
+ * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look
5932
+ * like this:
5933
+ *
5934
+ * ```html
5935
+ * <div ng-app>
5936
+ * <div isolate>
5937
+ * <div transclusion>
5938
+ * </div>
5939
+ * </div>
5940
+ * </div>
5941
+ * ```
5942
+ *
5943
+ * The `$parent` scope hierarchy will look like this:
5944
+ *
5945
+ * ```
5946
+ * - $rootScope
5947
+ * - isolate
5948
+ * - transclusion
5949
+ * ```
5950
+ *
5951
+ * but the scopes will inherit prototypically from different scopes to their `$parent`.
5952
+ *
5953
+ * ```
5954
+ * - $rootScope
5955
+ * - transclusion
5956
+ * - isolate
5957
+ * ```
5958
+ *
5959
+ *
5960
+ * ### Attributes
5961
+ *
5962
+ * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the
5963
+ * `link()` or `compile()` functions. It has a variety of uses.
5964
+ *
5965
+ * accessing *Normalized attribute names:*
5966
+ * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.
5967
+ * the attributes object allows for normalized access to
5968
+ * the attributes.
5969
+ *
5970
+ * * *Directive inter-communication:* All directives share the same instance of the attributes
5971
+ * object which allows the directives to use the attributes object as inter directive
5972
+ * communication.
5973
+ *
5974
+ * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object
5975
+ * allowing other directives to read the interpolated value.
5976
+ *
5977
+ * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes
5978
+ * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also
5979
+ * the only way to easily get the actual value because during the linking phase the interpolation
5980
+ * hasn't been evaluated yet and so the value is at this time set to `undefined`.
5981
+ *
5982
+ * ```js
5983
+ * function linkingFn(scope, elm, attrs, ctrl) {
5984
+ * // get the attribute value
5985
+ * console.log(attrs.ngModel);
5986
+ *
5987
+ * // change the attribute
5988
+ * attrs.$set('ngModel', 'new value');
5989
+ *
5990
+ * // observe changes to interpolated attribute
5991
+ * attrs.$observe('ngModel', function(value) {
5992
+ * console.log('ngModel has changed value to ' + value);
5993
+ * });
5994
+ * }
5995
+ * ```
5996
+ *
5997
+ * ## Example
5998
+ *
5999
+ * <div class="alert alert-warning">
6000
+ * **Note**: Typically directives are registered with `module.directive`. The example below is
6001
+ * to illustrate how `$compile` works.
6002
+ * </div>
6003
+ *
6004
+ <example module="compileExample">
6005
+ <file name="index.html">
6006
+ <script>
6007
+ angular.module('compileExample', [], function($compileProvider) {
6008
+ // configure new 'compile' directive by passing a directive
6009
+ // factory function. The factory function injects the '$compile'
6010
+ $compileProvider.directive('compile', function($compile) {
6011
+ // directive factory creates a link function
6012
+ return function(scope, element, attrs) {
6013
+ scope.$watch(
6014
+ function(scope) {
6015
+ // watch the 'compile' expression for changes
6016
+ return scope.$eval(attrs.compile);
6017
+ },
6018
+ function(value) {
6019
+ // when the 'compile' expression changes
6020
+ // assign it into the current DOM
6021
+ element.html(value);
6022
+
6023
+ // compile the new DOM and link it to the current
6024
+ // scope.
6025
+ // NOTE: we only compile .childNodes so that
6026
+ // we don't get into infinite loop compiling ourselves
6027
+ $compile(element.contents())(scope);
6028
+ }
6029
+ );
6030
+ };
6031
+ });
6032
+ })
6033
+ .controller('GreeterController', ['$scope', function($scope) {
6034
+ $scope.name = 'Angular';
6035
+ $scope.html = 'Hello {{name}}';
6036
+ }]);
6037
+ </script>
6038
+ <div ng-controller="GreeterController">
6039
+ <input ng-model="name"> <br>
6040
+ <textarea ng-model="html"></textarea> <br>
6041
+ <div compile="html"></div>
6042
+ </div>
6043
+ </file>
6044
+ <file name="protractor.js" type="protractor">
6045
+ it('should auto compile', function() {
6046
+ var textarea = $('textarea');
6047
+ var output = $('div[compile]');
6048
+ // The initial state reads 'Hello Angular'.
6049
+ expect(output.getText()).toBe('Hello Angular');
6050
+ textarea.clear();
6051
+ textarea.sendKeys('{{name}}!');
6052
+ expect(output.getText()).toBe('Angular!');
6053
+ });
6054
+ </file>
6055
+ </example>
6056
+
6057
+ *
6058
+ *
6059
+ * @param {string|DOMElement} element Element or HTML string to compile into a template function.
6060
+ * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives.
6061
+ * @param {number} maxPriority only apply directives lower than given priority (Only effects the
6062
+ * root element(s), not their children)
6063
+ * @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template
6064
+ * (a DOM element/tree) to a scope. Where:
6065
+ *
6066
+ * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.
6067
+ * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the
6068
+ * `template` and call the `cloneAttachFn` function allowing the caller to attach the
6069
+ * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is
6070
+ * called as: <br> `cloneAttachFn(clonedElement, scope)` where:
6071
+ *
6072
+ * * `clonedElement` - is a clone of the original `element` passed into the compiler.
6073
+ * * `scope` - is the current scope with which the linking function is working with.
6074
+ *
6075
+ * Calling the linking function returns the element of the template. It is either the original
6076
+ * element passed in, or the clone of the element if the `cloneAttachFn` is provided.
6077
+ *
6078
+ * After linking the view is not updated until after a call to $digest which typically is done by
6079
+ * Angular automatically.
6080
+ *
6081
+ * If you need access to the bound view, there are two ways to do it:
6082
+ *
6083
+ * - If you are not asking the linking function to clone the template, create the DOM element(s)
6084
+ * before you send them to the compiler and keep this reference around.
6085
+ * ```js
6086
+ * var element = $compile('<p>{{total}}</p>')(scope);
6087
+ * ```
6088
+ *
6089
+ * - if on the other hand, you need the element to be cloned, the view reference from the original
6090
+ * example would not point to the clone, but rather to the original template that was cloned. In
6091
+ * this case, you can access the clone via the cloneAttachFn:
6092
+ * ```js
6093
+ * var templateElement = angular.element('<p>{{total}}</p>'),
6094
+ * scope = ....;
6095
+ *
6096
+ * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {
6097
+ * //attach the clone to DOM document at the right place
6098
+ * });
6099
+ *
6100
+ * //now we have reference to the cloned DOM via `clonedElement`
6101
+ * ```
6102
+ *
6103
+ *
6104
+ * For information on how the compiler works, see the
6105
+ * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.
6106
+ */
6107
+
6108
+var $compileMinErr = minErr('$compile');
6109
+
6110
+/**
6111
+ * @ngdoc provider
6112
+ * @name $compileProvider
6113
+ *
6114
+ * @description
6115
+ */
6116
+$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
6117
+function $CompileProvider($provide, $$sanitizeUriProvider) {
6118
+ var hasDirectives = {},
6119
+ Suffix = 'Directive',
6120
+ COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/,
6121
+ CLASS_DIRECTIVE_REGEXP = /(([\d\w_\-]+)(?:\:([^;]+))?;?)/,
6122
+ ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
6123
+ REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
6124
+
6125
+ // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
6126
+ // The assumption is that future DOM event attribute names will begin with
6127
+ // 'on' and be composed of only English letters.
6128
+ var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;
6129
+
6130
+ function parseIsolateBindings(scope, directiveName) {
6131
+ var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/;
6132
+
6133
+ var bindings = {};
6134
+
6135
+ forEach(scope, function(definition, scopeName) {
6136
+ var match = definition.match(LOCAL_REGEXP);
6137
+
6138
+ if (!match) {
6139
+ throw $compileMinErr('iscp',
6140
+ "Invalid isolate scope definition for directive '{0}'." +
6141
+ " Definition: {... {1}: '{2}' ...}",
6142
+ directiveName, scopeName, definition);
6143
+ }
6144
+
6145
+ bindings[scopeName] = {
6146
+ attrName: match[3] || scopeName,
6147
+ mode: match[1],
6148
+ optional: match[2] === '?'
6149
+ };
6150
+ });
6151
+
6152
+ return bindings;
6153
+ }
6154
+
6155
+ /**
6156
+ * @ngdoc method
6157
+ * @name $compileProvider#directive
6158
+ * @kind function
6159
+ *
6160
+ * @description
6161
+ * Register a new directive with the compiler.
6162
+ *
6163
+ * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which
6164
+ * will match as <code>ng-bind</code>), or an object map of directives where the keys are the
6165
+ * names and the values are the factories.
6166
+ * @param {Function|Array} directiveFactory An injectable directive factory function. See
6167
+ * {@link guide/directive} for more info.
6168
+ * @returns {ng.$compileProvider} Self for chaining.
6169
+ */
6170
+ this.directive = function registerDirective(name, directiveFactory) {
6171
+ assertNotHasOwnProperty(name, 'directive');
6172
+ if (isString(name)) {
6173
+ assertArg(directiveFactory, 'directiveFactory');
6174
+ if (!hasDirectives.hasOwnProperty(name)) {
6175
+ hasDirectives[name] = [];
6176
+ $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',
6177
+ function($injector, $exceptionHandler) {
6178
+ var directives = [];
6179
+ forEach(hasDirectives[name], function(directiveFactory, index) {
6180
+ try {
6181
+ var directive = $injector.invoke(directiveFactory);
6182
+ if (isFunction(directive)) {
6183
+ directive = { compile: valueFn(directive) };
6184
+ } else if (!directive.compile && directive.link) {
6185
+ directive.compile = valueFn(directive.link);
6186
+ }
6187
+ directive.priority = directive.priority || 0;
6188
+ directive.index = index;
6189
+ directive.name = directive.name || name;
6190
+ directive.require = directive.require || (directive.controller && directive.name);
6191
+ directive.restrict = directive.restrict || 'EA';
6192
+ if (isObject(directive.scope)) {
6193
+ directive.$$isolateBindings = parseIsolateBindings(directive.scope, directive.name);
6194
+ }
6195
+ directives.push(directive);
6196
+ } catch (e) {
6197
+ $exceptionHandler(e);
6198
+ }
6199
+ });
6200
+ return directives;
6201
+ }]);
6202
+ }
6203
+ hasDirectives[name].push(directiveFactory);
6204
+ } else {
6205
+ forEach(name, reverseParams(registerDirective));
6206
+ }
6207
+ return this;
6208
+ };
6209
+
6210
+
6211
+ /**
6212
+ * @ngdoc method
6213
+ * @name $compileProvider#aHrefSanitizationWhitelist
6214
+ * @kind function
6215
+ *
6216
+ * @description
6217
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
6218
+ * urls during a[href] sanitization.
6219
+ *
6220
+ * The sanitization is a security measure aimed at prevent XSS attacks via html links.
6221
+ *
6222
+ * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
6223
+ * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
6224
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
6225
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
6226
+ *
6227
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
6228
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
6229
+ * chaining otherwise.
6230
+ */
6231
+ this.aHrefSanitizationWhitelist = function(regexp) {
6232
+ if (isDefined(regexp)) {
6233
+ $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);
6234
+ return this;
6235
+ } else {
6236
+ return $$sanitizeUriProvider.aHrefSanitizationWhitelist();
6237
+ }
6238
+ };
6239
+
6240
+
6241
+ /**
6242
+ * @ngdoc method
6243
+ * @name $compileProvider#imgSrcSanitizationWhitelist
6244
+ * @kind function
6245
+ *
6246
+ * @description
6247
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
6248
+ * urls during img[src] sanitization.
6249
+ *
6250
+ * The sanitization is a security measure aimed at prevent XSS attacks via html links.
6251
+ *
6252
+ * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
6253
+ * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
6254
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
6255
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
6256
+ *
6257
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
6258
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
6259
+ * chaining otherwise.
6260
+ */
6261
+ this.imgSrcSanitizationWhitelist = function(regexp) {
6262
+ if (isDefined(regexp)) {
6263
+ $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);
6264
+ return this;
6265
+ } else {
6266
+ return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();
6267
+ }
6268
+ };
6269
+
6270
+ /**
6271
+ * @ngdoc method
6272
+ * @name $compileProvider#debugInfoEnabled
6273
+ *
6274
+ * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the
6275
+ * current debugInfoEnabled state
6276
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
6277
+ *
6278
+ * @kind function
6279
+ *
6280
+ * @description
6281
+ * Call this method to enable/disable various debug runtime information in the compiler such as adding
6282
+ * binding information and a reference to the current scope on to DOM elements.
6283
+ * If enabled, the compiler will add the following to DOM elements that have been bound to the scope
6284
+ * * `ng-binding` CSS class
6285
+ * * `$binding` data property containing an array of the binding expressions
6286
+ *
6287
+ * You may want to use this in production for a significant performance boost. See
6288
+ * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
6289
+ *
6290
+ * The default value is true.
6291
+ */
6292
+ var debugInfoEnabled = true;
6293
+ this.debugInfoEnabled = function(enabled) {
6294
+ if(isDefined(enabled)) {
6295
+ debugInfoEnabled = enabled;
6296
+ return this;
6297
+ }
6298
+ return debugInfoEnabled;
6299
+ };
6300
+
6301
+ this.$get = [
6302
+ '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',
6303
+ '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',
6304
+ function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse,
6305
+ $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) {
6306
+
6307
+ var Attributes = function(element, attributesToCopy) {
6308
+ if (attributesToCopy) {
6309
+ var keys = Object.keys(attributesToCopy);
6310
+ var i, l, key;
6311
+
6312
+ for (i = 0, l = keys.length; i < l; i++) {
6313
+ key = keys[i];
6314
+ this[key] = attributesToCopy[key];
6315
+ }
6316
+ } else {
6317
+ this.$attr = {};
6318
+ }
6319
+
6320
+ this.$$element = element;
6321
+ };
6322
+
6323
+ Attributes.prototype = {
6324
+ $normalize: directiveNormalize,
6325
+
6326
+
6327
+ /**
6328
+ * @ngdoc method
6329
+ * @name $compile.directive.Attributes#$addClass
6330
+ * @kind function
6331
+ *
6332
+ * @description
6333
+ * Adds the CSS class value specified by the classVal parameter to the element. If animations
6334
+ * are enabled then an animation will be triggered for the class addition.
6335
+ *
6336
+ * @param {string} classVal The className value that will be added to the element
6337
+ */
6338
+ $addClass : function(classVal) {
6339
+ if(classVal && classVal.length > 0) {
6340
+ $animate.addClass(this.$$element, classVal);
6341
+ }
6342
+ },
6343
+
6344
+ /**
6345
+ * @ngdoc method
6346
+ * @name $compile.directive.Attributes#$removeClass
6347
+ * @kind function
6348
+ *
6349
+ * @description
6350
+ * Removes the CSS class value specified by the classVal parameter from the element. If
6351
+ * animations are enabled then an animation will be triggered for the class removal.
6352
+ *
6353
+ * @param {string} classVal The className value that will be removed from the element
6354
+ */
6355
+ $removeClass : function(classVal) {
6356
+ if(classVal && classVal.length > 0) {
6357
+ $animate.removeClass(this.$$element, classVal);
6358
+ }
6359
+ },
6360
+
6361
+ /**
6362
+ * @ngdoc method
6363
+ * @name $compile.directive.Attributes#$updateClass
6364
+ * @kind function
6365
+ *
6366
+ * @description
6367
+ * Adds and removes the appropriate CSS class values to the element based on the difference
6368
+ * between the new and old CSS class values (specified as newClasses and oldClasses).
6369
+ *
6370
+ * @param {string} newClasses The current CSS className value
6371
+ * @param {string} oldClasses The former CSS className value
6372
+ */
6373
+ $updateClass : function(newClasses, oldClasses) {
6374
+ var toAdd = tokenDifference(newClasses, oldClasses);
6375
+ if (toAdd && toAdd.length) {
6376
+ $animate.addClass(this.$$element, toAdd);
6377
+ }
6378
+
6379
+ var toRemove = tokenDifference(oldClasses, newClasses);
6380
+ if (toRemove && toRemove.length) {
6381
+ $animate.removeClass(this.$$element, toRemove);
6382
+ }
6383
+ },
6384
+
6385
+ /**
6386
+ * Set a normalized attribute on the element in a way such that all directives
6387
+ * can share the attribute. This function properly handles boolean attributes.
6388
+ * @param {string} key Normalized key. (ie ngAttribute)
6389
+ * @param {string|boolean} value The value to set. If `null` attribute will be deleted.
6390
+ * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.
6391
+ * Defaults to true.
6392
+ * @param {string=} attrName Optional none normalized name. Defaults to key.
6393
+ */
6394
+ $set: function(key, value, writeAttr, attrName) {
6395
+ // TODO: decide whether or not to throw an error if "class"
6396
+ //is set through this function since it may cause $updateClass to
6397
+ //become unstable.
6398
+
6399
+ var node = this.$$element[0],
6400
+ booleanKey = getBooleanAttrName(node, key),
6401
+ aliasedKey = getAliasedAttrName(node, key),
6402
+ observer = key,
6403
+ normalizedVal,
6404
+ nodeName;
6405
+
6406
+ if (booleanKey) {
6407
+ this.$$element.prop(key, value);
6408
+ attrName = booleanKey;
6409
+ } else if(aliasedKey) {
6410
+ this[aliasedKey] = value;
6411
+ observer = aliasedKey;
6412
+ }
6413
+
6414
+ this[key] = value;
6415
+
6416
+ // translate normalized key to actual key
6417
+ if (attrName) {
6418
+ this.$attr[key] = attrName;
6419
+ } else {
6420
+ attrName = this.$attr[key];
6421
+ if (!attrName) {
6422
+ this.$attr[key] = attrName = snake_case(key, '-');
6423
+ }
6424
+ }
6425
+
6426
+ nodeName = nodeName_(this.$$element);
6427
+
6428
+ if ((nodeName === 'a' && key === 'href') ||
6429
+ (nodeName === 'img' && key === 'src')) {
6430
+ // sanitize a[href] and img[src] values
6431
+ this[key] = value = $$sanitizeUri(value, key === 'src');
6432
+ } else if (nodeName === 'img' && key === 'srcset') {
6433
+ // sanitize img[srcset] values
6434
+ var result = "";
6435
+
6436
+ // first check if there are spaces because it's not the same pattern
6437
+ var trimmedSrcset = trim(value);
6438
+ // ( 999x ,| 999w ,| ,|, )
6439
+ var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/;
6440
+ var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/;
6441
+
6442
+ // split srcset into tuple of uri and descriptor except for the last item
6443
+ var rawUris = trimmedSrcset.split(pattern);
6444
+
6445
+ // for each tuples
6446
+ var nbrUrisWith2parts = Math.floor(rawUris.length / 2);
6447
+ for (var i=0; i<nbrUrisWith2parts; i++) {
6448
+ var innerIdx = i*2;
6449
+ // sanitize the uri
6450
+ result += $$sanitizeUri(trim( rawUris[innerIdx]), true);
6451
+ // add the descriptor
6452
+ result += ( " " + trim(rawUris[innerIdx+1]));
6453
+ }
6454
+
6455
+ // split the last item into uri and descriptor
6456
+ var lastTuple = trim(rawUris[i*2]).split(/\s/);
6457
+
6458
+ // sanitize the last uri
6459
+ result += $$sanitizeUri(trim(lastTuple[0]), true);
6460
+
6461
+ // and add the last descriptor if any
6462
+ if( lastTuple.length === 2) {
6463
+ result += (" " + trim(lastTuple[1]));
6464
+ }
6465
+ this[key] = value = result;
6466
+ }
6467
+
6468
+ if (writeAttr !== false) {
6469
+ if (value === null || value === undefined) {
6470
+ this.$$element.removeAttr(attrName);
6471
+ } else {
6472
+ this.$$element.attr(attrName, value);
6473
+ }
6474
+ }
6475
+
6476
+ // fire observers
6477
+ var $$observers = this.$$observers;
6478
+ $$observers && forEach($$observers[observer], function(fn) {
6479
+ try {
6480
+ fn(value);
6481
+ } catch (e) {
6482
+ $exceptionHandler(e);
6483
+ }
6484
+ });
6485
+ },
6486
+
6487
+
6488
+ /**
6489
+ * @ngdoc method
6490
+ * @name $compile.directive.Attributes#$observe
6491
+ * @kind function
6492
+ *
6493
+ * @description
6494
+ * Observes an interpolated attribute.
6495
+ *
6496
+ * The observer function will be invoked once during the next `$digest` following
6497
+ * compilation. The observer is then invoked whenever the interpolated value
6498
+ * changes.
6499
+ *
6500
+ * @param {string} key Normalized key. (ie ngAttribute) .
6501
+ * @param {function(interpolatedValue)} fn Function that will be called whenever
6502
+ the interpolated value of the attribute changes.
6503
+ * See {@link ng.$compile#attributes $compile} for more info.
6504
+ * @returns {function()} Returns a deregistration function for this observer.
6505
+ */
6506
+ $observe: function(key, fn) {
6507
+ var attrs = this,
6508
+ $$observers = (attrs.$$observers || (attrs.$$observers = Object.create(null))),
6509
+ listeners = ($$observers[key] || ($$observers[key] = []));
6510
+
6511
+ listeners.push(fn);
6512
+ $rootScope.$evalAsync(function() {
6513
+ if (!listeners.$$inter) {
6514
+ // no one registered attribute interpolation function, so lets call it manually
6515
+ fn(attrs[key]);
6516
+ }
6517
+ });
6518
+
6519
+ return function() {
6520
+ arrayRemove(listeners, fn);
6521
+ };
6522
+ }
6523
+ };
6524
+
6525
+
6526
+ function safeAddClass($element, className) {
6527
+ try {
6528
+ $element.addClass(className);
6529
+ } catch(e) {
6530
+ // ignore, since it means that we are trying to set class on
6531
+ // SVG element, where class name is read-only.
6532
+ }
6533
+ }
6534
+
6535
+
6536
+ var startSymbol = $interpolate.startSymbol(),
6537
+ endSymbol = $interpolate.endSymbol(),
6538
+ denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}')
6539
+ ? identity
6540
+ : function denormalizeTemplate(template) {
6541
+ return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
6542
+ },
6543
+ NG_ATTR_BINDING = /^ngAttr[A-Z]/;
6544
+
6545
+ compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {
6546
+ var bindings = $element.data('$binding') || [];
6547
+
6548
+ if (isArray(binding)) {
6549
+ bindings = bindings.concat(binding);
6550
+ } else {
6551
+ bindings.push(binding);
6552
+ }
6553
+
6554
+ $element.data('$binding', bindings);
6555
+ } : noop;
6556
+
6557
+ compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {
6558
+ safeAddClass($element, 'ng-binding');
6559
+ } : noop;
6560
+
6561
+ compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
6562
+ var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
6563
+ $element.data(dataName, scope);
6564
+ } : noop;
6565
+
6566
+ compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {
6567
+ safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');
6568
+ } : noop;
6569
+
6570
+ return compile;
6571
+
6572
+ //================================
6573
+
6574
+ function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,
6575
+ previousCompileContext) {
6576
+ if (!($compileNodes instanceof jqLite)) {
6577
+ // jquery always rewraps, whereas we need to preserve the original selector so that we can
6578
+ // modify it.
6579
+ $compileNodes = jqLite($compileNodes);
6580
+ }
6581
+ // We can not compile top level text elements since text nodes can be merged and we will
6582
+ // not be able to attach scope data to them, so we will wrap them in <span>
6583
+ forEach($compileNodes, function(node, index){
6584
+ if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) {
6585
+ $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
6586
+ }
6587
+ });
6588
+ var compositeLinkFn =
6589
+ compileNodes($compileNodes, transcludeFn, $compileNodes,
6590
+ maxPriority, ignoreDirective, previousCompileContext);
6591
+ compile.$$addScopeClass($compileNodes);
6592
+ var namespace = null;
6593
+ return function publicLinkFn(scope, cloneConnectFn, transcludeControllers, parentBoundTranscludeFn, futureParentElement){
6594
+ assertArg(scope, 'scope');
6595
+ if (!namespace) {
6596
+ namespace = detectNamespaceForChildElements(futureParentElement);
6597
+ }
6598
+ var $linkNode;
6599
+ if (namespace !== 'html') {
6600
+ // When using a directive with replace:true and templateUrl the $compileNodes
6601
+ // (or a child element inside of them)
6602
+ // might change, so we need to recreate the namespace adapted compileNodes
6603
+ // for call to the link function.
6604
+ // Note: This will already clone the nodes...
6605
+ $linkNode = jqLite(
6606
+ wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())
6607
+ );
6608
+ } else if (cloneConnectFn) {
6609
+ // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart
6610
+ // and sometimes changes the structure of the DOM.
6611
+ $linkNode = JQLitePrototype.clone.call($compileNodes);
6612
+ } else {
6613
+ $linkNode = $compileNodes;
6614
+ }
6615
+
6616
+ if (transcludeControllers) {
6617
+ for (var controllerName in transcludeControllers) {
6618
+ $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);
6619
+ }
6620
+ }
6621
+
6622
+ compile.$$addScopeInfo($linkNode, scope);
6623
+
6624
+ if (cloneConnectFn) cloneConnectFn($linkNode, scope);
6625
+ if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);
6626
+ return $linkNode;
6627
+ };
6628
+ }
6629
+
6630
+ function detectNamespaceForChildElements(parentElement) {
6631
+ // TODO: Make this detect MathML as well...
6632
+ var node = parentElement && parentElement[0];
6633
+ if (!node) {
6634
+ return 'html';
6635
+ } else {
6636
+ return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg': 'html';
6637
+ }
6638
+ }
6639
+
6640
+ /**
6641
+ * Compile function matches each node in nodeList against the directives. Once all directives
6642
+ * for a particular node are collected their compile functions are executed. The compile
6643
+ * functions return values - the linking functions - are combined into a composite linking
6644
+ * function, which is the a linking function for the node.
6645
+ *
6646
+ * @param {NodeList} nodeList an array of nodes or NodeList to compile
6647
+ * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
6648
+ * scope argument is auto-generated to the new child of the transcluded parent scope.
6649
+ * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then
6650
+ * the rootElement must be set the jqLite collection of the compile root. This is
6651
+ * needed so that the jqLite collection items can be replaced with widgets.
6652
+ * @param {number=} maxPriority Max directive priority.
6653
+ * @returns {Function} A composite linking function of all of the matched directives or null.
6654
+ */
6655
+ function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,
6656
+ previousCompileContext) {
6657
+ var linkFns = [],
6658
+ attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;
6659
+
6660
+ for (var i = 0; i < nodeList.length; i++) {
6661
+ attrs = new Attributes();
6662
+
6663
+ // we must always refer to nodeList[i] since the nodes can be replaced underneath us.
6664
+ directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,
6665
+ ignoreDirective);
6666
+
6667
+ nodeLinkFn = (directives.length)
6668
+ ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,
6669
+ null, [], [], previousCompileContext)
6670
+ : null;
6671
+
6672
+ if (nodeLinkFn && nodeLinkFn.scope) {
6673
+ compile.$$addScopeClass(attrs.$$element);
6674
+ }
6675
+
6676
+ childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||
6677
+ !(childNodes = nodeList[i].childNodes) ||
6678
+ !childNodes.length)
6679
+ ? null
6680
+ : compileNodes(childNodes,
6681
+ nodeLinkFn ? (
6682
+ (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)
6683
+ && nodeLinkFn.transclude) : transcludeFn);
6684
+
6685
+ if (nodeLinkFn || childLinkFn) {
6686
+ linkFns.push(i, nodeLinkFn, childLinkFn);
6687
+ linkFnFound = true;
6688
+ nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;
6689
+ }
6690
+
6691
+ //use the previous context only for the first element in the virtual group
6692
+ previousCompileContext = null;
6693
+ }
6694
+
6695
+ // return a linking function if we have found anything, null otherwise
6696
+ return linkFnFound ? compositeLinkFn : null;
6697
+
6698
+ function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {
6699
+ var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;
6700
+ var stableNodeList;
6701
+
6702
+
6703
+ if (nodeLinkFnFound) {
6704
+ // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our
6705
+ // offsets don't get screwed up
6706
+ var nodeListLength = nodeList.length;
6707
+ stableNodeList = new Array(nodeListLength);
6708
+
6709
+ // create a sparse array by only copying the elements which have a linkFn
6710
+ for (i = 0; i < linkFns.length; i+=3) {
6711
+ idx = linkFns[i];
6712
+ stableNodeList[idx] = nodeList[idx];
6713
+ }
6714
+ } else {
6715
+ stableNodeList = nodeList;
6716
+ }
6717
+
6718
+ for(i = 0, ii = linkFns.length; i < ii;) {
6719
+ node = stableNodeList[linkFns[i++]];
6720
+ nodeLinkFn = linkFns[i++];
6721
+ childLinkFn = linkFns[i++];
6722
+
6723
+ if (nodeLinkFn) {
6724
+ if (nodeLinkFn.scope) {
6725
+ childScope = scope.$new();
6726
+ compile.$$addScopeInfo(jqLite(node), childScope);
6727
+ } else {
6728
+ childScope = scope;
6729
+ }
6730
+
6731
+ if ( nodeLinkFn.transcludeOnThisElement ) {
6732
+ childBoundTranscludeFn = createBoundTranscludeFn(
6733
+ scope, nodeLinkFn.transclude, parentBoundTranscludeFn,
6734
+ nodeLinkFn.elementTranscludeOnThisElement);
6735
+
6736
+ } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {
6737
+ childBoundTranscludeFn = parentBoundTranscludeFn;
6738
+
6739
+ } else if (!parentBoundTranscludeFn && transcludeFn) {
6740
+ childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);
6741
+
6742
+ } else {
6743
+ childBoundTranscludeFn = null;
6744
+ }
6745
+
6746
+ nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);
6747
+
6748
+ } else if (childLinkFn) {
6749
+ childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);
6750
+ }
6751
+ }
6752
+ }
6753
+ }
6754
+
6755
+ function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn, elementTransclusion) {
6756
+
6757
+ var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
6758
+
6759
+ if (!transcludedScope) {
6760
+ transcludedScope = scope.$new(false, containingScope);
6761
+ transcludedScope.$$transcluded = true;
6762
+ }
6763
+
6764
+ return transcludeFn(transcludedScope, cloneFn, controllers, previousBoundTranscludeFn, futureParentElement);
6765
+ };
6766
+
6767
+ return boundTranscludeFn;
6768
+ }
6769
+
6770
+ /**
6771
+ * Looks for directives on the given node and adds them to the directive collection which is
6772
+ * sorted.
6773
+ *
6774
+ * @param node Node to search.
6775
+ * @param directives An array to which the directives are added to. This array is sorted before
6776
+ * the function returns.
6777
+ * @param attrs The shared attrs object which is used to populate the normalized attributes.
6778
+ * @param {number=} maxPriority Max directive priority.
6779
+ */
6780
+ function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
6781
+ var nodeType = node.nodeType,
6782
+ attrsMap = attrs.$attr,
6783
+ match,
6784
+ className;
6785
+
6786
+ switch(nodeType) {
6787
+ case NODE_TYPE_ELEMENT: /* Element */
6788
+ // use the node name: <directive>
6789
+ addDirective(directives,
6790
+ directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);
6791
+
6792
+ // iterate over the attributes
6793
+ for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,
6794
+ j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
6795
+ var attrStartName = false;
6796
+ var attrEndName = false;
6797
+
6798
+ attr = nAttrs[j];
6799
+ name = attr.name;
6800
+ value = trim(attr.value);
6801
+
6802
+ // support ngAttr attribute binding
6803
+ ngAttrName = directiveNormalize(name);
6804
+ if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {
6805
+ name = snake_case(ngAttrName.substr(6), '-');
6806
+ }
6807
+
6808
+ var directiveNName = ngAttrName.replace(/(Start|End)$/, '');
6809
+ if (directiveIsMultiElement(directiveNName)) {
6810
+ if (ngAttrName === directiveNName + 'Start') {
6811
+ attrStartName = name;
6812
+ attrEndName = name.substr(0, name.length - 5) + 'end';
6813
+ name = name.substr(0, name.length - 6);
6814
+ }
6815
+ }
6816
+
6817
+ nName = directiveNormalize(name.toLowerCase());
6818
+ attrsMap[nName] = name;
6819
+ if (isNgAttr || !attrs.hasOwnProperty(nName)) {
6820
+ attrs[nName] = value;
6821
+ if (getBooleanAttrName(node, nName)) {
6822
+ attrs[nName] = true; // presence means true
6823
+ }
6824
+ }
6825
+ addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);
6826
+ addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,
6827
+ attrEndName);
6828
+ }
6829
+
6830
+ // use class as directive
6831
+ className = node.className;
6832
+ if (isString(className) && className !== '') {
6833
+ while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
6834
+ nName = directiveNormalize(match[2]);
6835
+ if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {
6836
+ attrs[nName] = trim(match[3]);
6837
+ }
6838
+ className = className.substr(match.index + match[0].length);
6839
+ }
6840
+ }
6841
+ break;
6842
+ case NODE_TYPE_TEXT: /* Text Node */
6843
+ addTextInterpolateDirective(directives, node.nodeValue);
6844
+ break;
6845
+ case NODE_TYPE_COMMENT: /* Comment */
6846
+ try {
6847
+ match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
6848
+ if (match) {
6849
+ nName = directiveNormalize(match[1]);
6850
+ if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
6851
+ attrs[nName] = trim(match[2]);
6852
+ }
6853
+ }
6854
+ } catch (e) {
6855
+ // turns out that under some circumstances IE9 throws errors when one attempts to read
6856
+ // comment's node value.
6857
+ // Just ignore it and continue. (Can't seem to reproduce in test case.)
6858
+ }
6859
+ break;
6860
+ }
6861
+
6862
+ directives.sort(byPriority);
6863
+ return directives;
6864
+ }
6865
+
6866
+ /**
6867
+ * Given a node with an directive-start it collects all of the siblings until it finds
6868
+ * directive-end.
6869
+ * @param node
6870
+ * @param attrStart
6871
+ * @param attrEnd
6872
+ * @returns {*}
6873
+ */
6874
+ function groupScan(node, attrStart, attrEnd) {
6875
+ var nodes = [];
6876
+ var depth = 0;
6877
+ if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
6878
+ var startNode = node;
6879
+ do {
6880
+ if (!node) {
6881
+ throw $compileMinErr('uterdir',
6882
+ "Unterminated attribute, found '{0}' but no matching '{1}' found.",
6883
+ attrStart, attrEnd);
6884
+ }
6885
+ if (node.nodeType == NODE_TYPE_ELEMENT) {
6886
+ if (node.hasAttribute(attrStart)) depth++;
6887
+ if (node.hasAttribute(attrEnd)) depth--;
6888
+ }
6889
+ nodes.push(node);
6890
+ node = node.nextSibling;
6891
+ } while (depth > 0);
6892
+ } else {
6893
+ nodes.push(node);
6894
+ }
6895
+
6896
+ return jqLite(nodes);
6897
+ }
6898
+
6899
+ /**
6900
+ * Wrapper for linking function which converts normal linking function into a grouped
6901
+ * linking function.
6902
+ * @param linkFn
6903
+ * @param attrStart
6904
+ * @param attrEnd
6905
+ * @returns {Function}
6906
+ */
6907
+ function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {
6908
+ return function(scope, element, attrs, controllers, transcludeFn) {
6909
+ element = groupScan(element[0], attrStart, attrEnd);
6910
+ return linkFn(scope, element, attrs, controllers, transcludeFn);
6911
+ };
6912
+ }
6913
+
6914
+ /**
6915
+ * Once the directives have been collected, their compile functions are executed. This method
6916
+ * is responsible for inlining directive templates as well as terminating the application
6917
+ * of the directives if the terminal directive has been reached.
6918
+ *
6919
+ * @param {Array} directives Array of collected directives to execute their compile function.
6920
+ * this needs to be pre-sorted by priority order.
6921
+ * @param {Node} compileNode The raw DOM node to apply the compile functions to
6922
+ * @param {Object} templateAttrs The shared attribute function
6923
+ * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
6924
+ * scope argument is auto-generated to the new
6925
+ * child of the transcluded parent scope.
6926
+ * @param {JQLite} jqCollection If we are working on the root of the compile tree then this
6927
+ * argument has the root jqLite array so that we can replace nodes
6928
+ * on it.
6929
+ * @param {Object=} originalReplaceDirective An optional directive that will be ignored when
6930
+ * compiling the transclusion.
6931
+ * @param {Array.<Function>} preLinkFns
6932
+ * @param {Array.<Function>} postLinkFns
6933
+ * @param {Object} previousCompileContext Context used for previous compilation of the current
6934
+ * node
6935
+ * @returns {Function} linkFn
6936
+ */
6937
+ function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,
6938
+ jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,
6939
+ previousCompileContext) {
6940
+ previousCompileContext = previousCompileContext || {};
6941
+
6942
+ var terminalPriority = -Number.MAX_VALUE,
6943
+ newScopeDirective,
6944
+ controllerDirectives = previousCompileContext.controllerDirectives,
6945
+ controllers,
6946
+ newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,
6947
+ templateDirective = previousCompileContext.templateDirective,
6948
+ nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
6949
+ hasTranscludeDirective = false,
6950
+ hasTemplate = false,
6951
+ hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
6952
+ $compileNode = templateAttrs.$$element = jqLite(compileNode),
6953
+ directive,
6954
+ directiveName,
6955
+ $template,
6956
+ replaceDirective = originalReplaceDirective,
6957
+ childTranscludeFn = transcludeFn,
6958
+ linkFn,
6959
+ directiveValue;
6960
+
6961
+ // executes all directives on the current element
6962
+ for(var i = 0, ii = directives.length; i < ii; i++) {
6963
+ directive = directives[i];
6964
+ var attrStart = directive.$$start;
6965
+ var attrEnd = directive.$$end;
6966
+
6967
+ // collect multiblock sections
6968
+ if (attrStart) {
6969
+ $compileNode = groupScan(compileNode, attrStart, attrEnd);
6970
+ }
6971
+ $template = undefined;
6972
+
6973
+ if (terminalPriority > directive.priority) {
6974
+ break; // prevent further processing of directives
6975
+ }
6976
+
6977
+ if (directiveValue = directive.scope) {
6978
+
6979
+ // skip the check for directives with async templates, we'll check the derived sync
6980
+ // directive when the template arrives
6981
+ if (!directive.templateUrl) {
6982
+ if (isObject(directiveValue)) {
6983
+ // This directive is trying to add an isolated scope.
6984
+ // Check that there is no scope of any kind already
6985
+ assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,
6986
+ directive, $compileNode);
6987
+ newIsolateScopeDirective = directive;
6988
+ } else {
6989
+ // This directive is trying to add a child scope.
6990
+ // Check that there is no isolated scope already
6991
+ assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,
6992
+ $compileNode);
6993
+ }
6994
+ }
6995
+
6996
+ newScopeDirective = newScopeDirective || directive;
6997
+ }
6998
+
6999
+ directiveName = directive.name;
7000
+
7001
+ if (!directive.templateUrl && directive.controller) {
7002
+ directiveValue = directive.controller;
7003
+ controllerDirectives = controllerDirectives || {};
7004
+ assertNoDuplicate("'" + directiveName + "' controller",
7005
+ controllerDirectives[directiveName], directive, $compileNode);
7006
+ controllerDirectives[directiveName] = directive;
7007
+ }
7008
+
7009
+ if (directiveValue = directive.transclude) {
7010
+ hasTranscludeDirective = true;
7011
+
7012
+ // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.
7013
+ // This option should only be used by directives that know how to safely handle element transclusion,
7014
+ // where the transcluded nodes are added or replaced after linking.
7015
+ if (!directive.$$tlb) {
7016
+ assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);
7017
+ nonTlbTranscludeDirective = directive;
7018
+ }
7019
+
7020
+ if (directiveValue == 'element') {
7021
+ hasElementTranscludeDirective = true;
7022
+ terminalPriority = directive.priority;
7023
+ $template = $compileNode;
7024
+ $compileNode = templateAttrs.$$element =
7025
+ jqLite(document.createComment(' ' + directiveName + ': ' +
7026
+ templateAttrs[directiveName] + ' '));
7027
+ compileNode = $compileNode[0];
7028
+ replaceWith(jqCollection, sliceArgs($template), compileNode);
7029
+
7030
+ childTranscludeFn = compile($template, transcludeFn, terminalPriority,
7031
+ replaceDirective && replaceDirective.name, {
7032
+ // Don't pass in:
7033
+ // - controllerDirectives - otherwise we'll create duplicates controllers
7034
+ // - newIsolateScopeDirective or templateDirective - combining templates with
7035
+ // element transclusion doesn't make sense.
7036
+ //
7037
+ // We need only nonTlbTranscludeDirective so that we prevent putting transclusion
7038
+ // on the same element more than once.
7039
+ nonTlbTranscludeDirective: nonTlbTranscludeDirective
7040
+ });
7041
+ } else {
7042
+ $template = jqLite(jqLiteClone(compileNode)).contents();
7043
+ $compileNode.empty(); // clear contents
7044
+ childTranscludeFn = compile($template, transcludeFn);
7045
+ }
7046
+ }
7047
+
7048
+ if (directive.template) {
7049
+ hasTemplate = true;
7050
+ assertNoDuplicate('template', templateDirective, directive, $compileNode);
7051
+ templateDirective = directive;
7052
+
7053
+ directiveValue = (isFunction(directive.template))
7054
+ ? directive.template($compileNode, templateAttrs)
7055
+ : directive.template;
7056
+
7057
+ directiveValue = denormalizeTemplate(directiveValue);
7058
+
7059
+ if (directive.replace) {
7060
+ replaceDirective = directive;
7061
+ if (jqLiteIsTextNode(directiveValue)) {
7062
+ $template = [];
7063
+ } else {
7064
+ $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));
7065
+ }
7066
+ compileNode = $template[0];
7067
+
7068
+ if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
7069
+ throw $compileMinErr('tplrt',
7070
+ "Template for directive '{0}' must have exactly one root element. {1}",
7071
+ directiveName, '');
7072
+ }
7073
+
7074
+ replaceWith(jqCollection, $compileNode, compileNode);
7075
+
7076
+ var newTemplateAttrs = {$attr: {}};
7077
+
7078
+ // combine directives from the original node and from the template:
7079
+ // - take the array of directives for this element
7080
+ // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)
7081
+ // - collect directives from the template and sort them by priority
7082
+ // - combine directives as: processed + template + unprocessed
7083
+ var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);
7084
+ var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));
7085
+
7086
+ if (newIsolateScopeDirective) {
7087
+ markDirectivesAsIsolate(templateDirectives);
7088
+ }
7089
+ directives = directives.concat(templateDirectives).concat(unprocessedDirectives);
7090
+ mergeTemplateAttributes(templateAttrs, newTemplateAttrs);
7091
+
7092
+ ii = directives.length;
7093
+ } else {
7094
+ $compileNode.html(directiveValue);
7095
+ }
7096
+ }
7097
+
7098
+ if (directive.templateUrl) {
7099
+ hasTemplate = true;
7100
+ assertNoDuplicate('template', templateDirective, directive, $compileNode);
7101
+ templateDirective = directive;
7102
+
7103
+ if (directive.replace) {
7104
+ replaceDirective = directive;
7105
+ }
7106
+
7107
+ nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,
7108
+ templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {
7109
+ controllerDirectives: controllerDirectives,
7110
+ newIsolateScopeDirective: newIsolateScopeDirective,
7111
+ templateDirective: templateDirective,
7112
+ nonTlbTranscludeDirective: nonTlbTranscludeDirective
7113
+ });
7114
+ ii = directives.length;
7115
+ } else if (directive.compile) {
7116
+ try {
7117
+ linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
7118
+ if (isFunction(linkFn)) {
7119
+ addLinkFns(null, linkFn, attrStart, attrEnd);
7120
+ } else if (linkFn) {
7121
+ addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);
7122
+ }
7123
+ } catch (e) {
7124
+ $exceptionHandler(e, startingTag($compileNode));
7125
+ }
7126
+ }
7127
+
7128
+ if (directive.terminal) {
7129
+ nodeLinkFn.terminal = true;
7130
+ terminalPriority = Math.max(terminalPriority, directive.priority);
7131
+ }
7132
+
7133
+ }
7134
+
7135
+ nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
7136
+ nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;
7137
+ nodeLinkFn.elementTranscludeOnThisElement = hasElementTranscludeDirective;
7138
+ nodeLinkFn.templateOnThisElement = hasTemplate;
7139
+ nodeLinkFn.transclude = childTranscludeFn;
7140
+
7141
+ previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
7142
+
7143
+ // might be normal or delayed nodeLinkFn depending on if templateUrl is present
7144
+ return nodeLinkFn;
7145
+
7146
+ ////////////////////
7147
+
7148
+ function addLinkFns(pre, post, attrStart, attrEnd) {
7149
+ if (pre) {
7150
+ if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);
7151
+ pre.require = directive.require;
7152
+ pre.directiveName = directiveName;
7153
+ if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
7154
+ pre = cloneAndAnnotateFn(pre, {isolateScope: true});
7155
+ }
7156
+ preLinkFns.push(pre);
7157
+ }
7158
+ if (post) {
7159
+ if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);
7160
+ post.require = directive.require;
7161
+ post.directiveName = directiveName;
7162
+ if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
7163
+ post = cloneAndAnnotateFn(post, {isolateScope: true});
7164
+ }
7165
+ postLinkFns.push(post);
7166
+ }
7167
+ }
7168
+
7169
+
7170
+ function getControllers(directiveName, require, $element, elementControllers) {
7171
+ var value, retrievalMethod = 'data', optional = false;
7172
+ var $searchElement = $element;
7173
+ var match;
7174
+ if (isString(require)) {
7175
+ match = require.match(REQUIRE_PREFIX_REGEXP);
7176
+ require = require.substring(match[0].length);
7177
+
7178
+ if (match[3]) {
7179
+ if (match[1]) match[3] = null;
7180
+ else match[1] = match[3];
7181
+ }
7182
+ if (match[1] === '^') {
7183
+ retrievalMethod = 'inheritedData';
7184
+ } else if (match[1] === '^^') {
7185
+ retrievalMethod = 'inheritedData';
7186
+ $searchElement = $element.parent();
7187
+ }
7188
+ if (match[2] === '?') {
7189
+ optional = true;
7190
+ }
7191
+
7192
+ value = null;
7193
+
7194
+ if (elementControllers && retrievalMethod === 'data') {
7195
+ if (value = elementControllers[require]) {
7196
+ value = value.instance;
7197
+ }
7198
+ }
7199
+ value = value || $searchElement[retrievalMethod]('$' + require + 'Controller');
7200
+
7201
+ if (!value && !optional) {
7202
+ throw $compileMinErr('ctreq',
7203
+ "Controller '{0}', required by directive '{1}', can't be found!",
7204
+ require, directiveName);
7205
+ }
7206
+ return value;
7207
+ } else if (isArray(require)) {
7208
+ value = [];
7209
+ forEach(require, function(require) {
7210
+ value.push(getControllers(directiveName, require, $element, elementControllers));
7211
+ });
7212
+ }
7213
+ return value;
7214
+ }
7215
+
7216
+
7217
+ function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {
7218
+ var i, ii, linkFn, controller, isolateScope, elementControllers, transcludeFn, $element,
7219
+ attrs;
7220
+
7221
+ if (compileNode === linkNode) {
7222
+ attrs = templateAttrs;
7223
+ $element = templateAttrs.$$element;
7224
+ } else {
7225
+ $element = jqLite(linkNode);
7226
+ attrs = new Attributes($element, templateAttrs);
7227
+ }
7228
+
7229
+ if (newIsolateScopeDirective) {
7230
+ isolateScope = scope.$new(true);
7231
+ }
7232
+
7233
+ transcludeFn = boundTranscludeFn && controllersBoundTransclude;
7234
+ if (controllerDirectives) {
7235
+ // TODO: merge `controllers` and `elementControllers` into single object.
7236
+ controllers = {};
7237
+ elementControllers = {};
7238
+ forEach(controllerDirectives, function(directive) {
7239
+ var locals = {
7240
+ $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
7241
+ $element: $element,
7242
+ $attrs: attrs,
7243
+ $transclude: transcludeFn
7244
+ }, controllerInstance;
7245
+
7246
+ controller = directive.controller;
7247
+ if (controller == '@') {
7248
+ controller = attrs[directive.name];
7249
+ }
7250
+
7251
+ controllerInstance = $controller(controller, locals, true, directive.controllerAs);
7252
+
7253
+ // For directives with element transclusion the element is a comment,
7254
+ // but jQuery .data doesn't support attaching data to comment nodes as it's hard to
7255
+ // clean up (http://bugs.jquery.com/ticket/8335).
7256
+ // Instead, we save the controllers for the element in a local hash and attach to .data
7257
+ // later, once we have the actual element.
7258
+ elementControllers[directive.name] = controllerInstance;
7259
+ if (!hasElementTranscludeDirective) {
7260
+ $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
7261
+ }
7262
+
7263
+ controllers[directive.name] = controllerInstance;
7264
+ });
7265
+ }
7266
+
7267
+ if (newIsolateScopeDirective) {
7268
+ var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/;
7269
+
7270
+ compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||
7271
+ templateDirective === newIsolateScopeDirective.$$originalDirective)));
7272
+ compile.$$addScopeClass($element, true);
7273
+
7274
+ var isolateScopeController = controllers && controllers[newIsolateScopeDirective.name];
7275
+ var isolateBindingContext = isolateScope;
7276
+ if (isolateScopeController && isolateScopeController.identifier &&
7277
+ newIsolateScopeDirective.bindToController === true) {
7278
+ isolateBindingContext = isolateScopeController.instance;
7279
+ }
7280
+
7281
+ forEach(isolateScope.$$isolateBindings = newIsolateScopeDirective.$$isolateBindings, function(definition, scopeName) {
7282
+ var attrName = definition.attrName,
7283
+ optional = definition.optional,
7284
+ mode = definition.mode, // @, =, or &
7285
+ lastValue,
7286
+ parentGet, parentSet, compare;
7287
+
7288
+ switch (mode) {
7289
+
7290
+ case '@':
7291
+ attrs.$observe(attrName, function(value) {
7292
+ isolateBindingContext[scopeName] = value;
7293
+ });
7294
+ attrs.$$observers[attrName].$$scope = scope;
7295
+ if( attrs[attrName] ) {
7296
+ // If the attribute has been provided then we trigger an interpolation to ensure
7297
+ // the value is there for use in the link fn
7298
+ isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope);
7299
+ }
7300
+ break;
7301
+
7302
+ case '=':
7303
+ if (optional && !attrs[attrName]) {
7304
+ return;
7305
+ }
7306
+ parentGet = $parse(attrs[attrName]);
7307
+ if (parentGet.literal) {
7308
+ compare = equals;
7309
+ } else {
7310
+ compare = function(a,b) { return a === b || (a !== a && b !== b); };
7311
+ }
7312
+ parentSet = parentGet.assign || function() {
7313
+ // reset the change, or we will throw this exception on every $digest
7314
+ lastValue = isolateBindingContext[scopeName] = parentGet(scope);
7315
+ throw $compileMinErr('nonassign',
7316
+ "Expression '{0}' used with directive '{1}' is non-assignable!",
7317
+ attrs[attrName], newIsolateScopeDirective.name);
7318
+ };
7319
+ lastValue = isolateBindingContext[scopeName] = parentGet(scope);
7320
+ var parentValueWatch = function parentValueWatch(parentValue) {
7321
+ if (!compare(parentValue, isolateBindingContext[scopeName])) {
7322
+ // we are out of sync and need to copy
7323
+ if (!compare(parentValue, lastValue)) {
7324
+ // parent changed and it has precedence
7325
+ isolateBindingContext[scopeName] = parentValue;
7326
+ } else {
7327
+ // if the parent can be assigned then do so
7328
+ parentSet(scope, parentValue = isolateBindingContext[scopeName]);
7329
+ }
7330
+ }
7331
+ return lastValue = parentValue;
7332
+ };
7333
+ parentValueWatch.$stateful = true;
7334
+ var unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
7335
+ isolateScope.$on('$destroy', unwatch);
7336
+ break;
7337
+
7338
+ case '&':
7339
+ parentGet = $parse(attrs[attrName]);
7340
+ isolateBindingContext[scopeName] = function(locals) {
7341
+ return parentGet(scope, locals);
7342
+ };
7343
+ break;
7344
+ }
7345
+ });
7346
+ }
7347
+ if (controllers) {
7348
+ forEach(controllers, function(controller) {
7349
+ controller();
7350
+ });
7351
+ controllers = null;
7352
+ }
7353
+
7354
+ // PRELINKING
7355
+ for(i = 0, ii = preLinkFns.length; i < ii; i++) {
7356
+ linkFn = preLinkFns[i];
7357
+ invokeLinkFn(linkFn,
7358
+ linkFn.isolateScope ? isolateScope : scope,
7359
+ $element,
7360
+ attrs,
7361
+ linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
7362
+ transcludeFn
7363
+ );
7364
+ }
7365
+
7366
+ // RECURSION
7367
+ // We only pass the isolate scope, if the isolate directive has a template,
7368
+ // otherwise the child elements do not belong to the isolate directive.
7369
+ var scopeToChild = scope;
7370
+ if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
7371
+ scopeToChild = isolateScope;
7372
+ }
7373
+ childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
7374
+
7375
+ // POSTLINKING
7376
+ for(i = postLinkFns.length - 1; i >= 0; i--) {
7377
+ linkFn = postLinkFns[i];
7378
+ invokeLinkFn(linkFn,
7379
+ linkFn.isolateScope ? isolateScope : scope,
7380
+ $element,
7381
+ attrs,
7382
+ linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
7383
+ transcludeFn
7384
+ );
7385
+ }
7386
+
7387
+ // This is the function that is injected as `$transclude`.
7388
+ // Note: all arguments are optional!
7389
+ function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {
7390
+ var transcludeControllers;
7391
+
7392
+ // No scope passed in:
7393
+ if (!isScope(scope)) {
7394
+ futureParentElement = cloneAttachFn;
7395
+ cloneAttachFn = scope;
7396
+ scope = undefined;
7397
+ }
7398
+
7399
+ if (hasElementTranscludeDirective) {
7400
+ transcludeControllers = elementControllers;
7401
+ }
7402
+ if (!futureParentElement) {
7403
+ futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;
7404
+ }
7405
+ return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
7406
+ }
7407
+ }
7408
+ }
7409
+
7410
+ function markDirectivesAsIsolate(directives) {
7411
+ // mark all directives as needing isolate scope.
7412
+ for (var j = 0, jj = directives.length; j < jj; j++) {
7413
+ directives[j] = inherit(directives[j], {$$isolateScope: true});
7414
+ }
7415
+ }
7416
+
7417
+ /**
7418
+ * looks up the directive and decorates it with exception handling and proper parameters. We
7419
+ * call this the boundDirective.
7420
+ *
7421
+ * @param {string} name name of the directive to look up.
7422
+ * @param {string} location The directive must be found in specific format.
7423
+ * String containing any of theses characters:
7424
+ *
7425
+ * * `E`: element name
7426
+ * * `A': attribute
7427
+ * * `C`: class
7428
+ * * `M`: comment
7429
+ * @returns {boolean} true if directive was added.
7430
+ */
7431
+ function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,
7432
+ endAttrName) {
7433
+ if (name === ignoreDirective) return null;
7434
+ var match = null;
7435
+ if (hasDirectives.hasOwnProperty(name)) {
7436
+ for(var directive, directives = $injector.get(name + Suffix),
7437
+ i = 0, ii = directives.length; i<ii; i++) {
7438
+ try {
7439
+ directive = directives[i];
7440
+ if ( (maxPriority === undefined || maxPriority > directive.priority) &&
7441
+ directive.restrict.indexOf(location) != -1) {
7442
+ if (startAttrName) {
7443
+ directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
7444
+ }
7445
+ tDirectives.push(directive);
7446
+ match = directive;
7447
+ }
7448
+ } catch(e) { $exceptionHandler(e); }
7449
+ }
7450
+ }
7451
+ return match;
7452
+ }
7453
+
7454
+
7455
+ /**
7456
+ * looks up the directive and returns true if it is a multi-element directive,
7457
+ * and therefore requires DOM nodes between -start and -end markers to be grouped
7458
+ * together.
7459
+ *
7460
+ * @param {string} name name of the directive to look up.
7461
+ * @returns true if directive was registered as multi-element.
7462
+ */
7463
+ function directiveIsMultiElement(name) {
7464
+ if (hasDirectives.hasOwnProperty(name)) {
7465
+ for(var directive, directives = $injector.get(name + Suffix),
7466
+ i = 0, ii = directives.length; i<ii; i++) {
7467
+ directive = directives[i];
7468
+ if (directive.multiElement) {
7469
+ return true;
7470
+ }
7471
+ }
7472
+ }
7473
+ return false;
7474
+ }
7475
+
7476
+ /**
7477
+ * When the element is replaced with HTML template then the new attributes
7478
+ * on the template need to be merged with the existing attributes in the DOM.
7479
+ * The desired effect is to have both of the attributes present.
7480
+ *
7481
+ * @param {object} dst destination attributes (original DOM)
7482
+ * @param {object} src source attributes (from the directive template)
7483
+ */
7484
+ function mergeTemplateAttributes(dst, src) {
7485
+ var srcAttr = src.$attr,
7486
+ dstAttr = dst.$attr,
7487
+ $element = dst.$$element;
7488
+
7489
+ // reapply the old attributes to the new element
7490
+ forEach(dst, function(value, key) {
7491
+ if (key.charAt(0) != '$') {
7492
+ if (src[key] && src[key] !== value) {
7493
+ value += (key === 'style' ? ';' : ' ') + src[key];
7494
+ }
7495
+ dst.$set(key, value, true, srcAttr[key]);
7496
+ }
7497
+ });
7498
+
7499
+ // copy the new attributes on the old attrs object
7500
+ forEach(src, function(value, key) {
7501
+ if (key == 'class') {
7502
+ safeAddClass($element, value);
7503
+ dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
7504
+ } else if (key == 'style') {
7505
+ $element.attr('style', $element.attr('style') + ';' + value);
7506
+ dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;
7507
+ // `dst` will never contain hasOwnProperty as DOM parser won't let it.
7508
+ // You will get an "InvalidCharacterError: DOM Exception 5" error if you
7509
+ // have an attribute like "has-own-property" or "data-has-own-property", etc.
7510
+ } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {
7511
+ dst[key] = value;
7512
+ dstAttr[key] = srcAttr[key];
7513
+ }
7514
+ });
7515
+ }
7516
+
7517
+
7518
+ function compileTemplateUrl(directives, $compileNode, tAttrs,
7519
+ $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
7520
+ var linkQueue = [],
7521
+ afterTemplateNodeLinkFn,
7522
+ afterTemplateChildLinkFn,
7523
+ beforeTemplateCompileNode = $compileNode[0],
7524
+ origAsyncDirective = directives.shift(),
7525
+ // The fact that we have to copy and patch the directive seems wrong!
7526
+ derivedSyncDirective = extend({}, origAsyncDirective, {
7527
+ templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective
7528
+ }),
7529
+ templateUrl = (isFunction(origAsyncDirective.templateUrl))
7530
+ ? origAsyncDirective.templateUrl($compileNode, tAttrs)
7531
+ : origAsyncDirective.templateUrl,
7532
+ templateNamespace = origAsyncDirective.templateNamespace;
7533
+
7534
+ $compileNode.empty();
7535
+
7536
+ $templateRequest($sce.getTrustedResourceUrl(templateUrl))
7537
+ .then(function(content) {
7538
+ var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;
7539
+
7540
+ content = denormalizeTemplate(content);
7541
+
7542
+ if (origAsyncDirective.replace) {
7543
+ if (jqLiteIsTextNode(content)) {
7544
+ $template = [];
7545
+ } else {
7546
+ $template = removeComments(wrapTemplate(templateNamespace, trim(content)));
7547
+ }
7548
+ compileNode = $template[0];
7549
+
7550
+ if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
7551
+ throw $compileMinErr('tplrt',
7552
+ "Template for directive '{0}' must have exactly one root element. {1}",
7553
+ origAsyncDirective.name, templateUrl);
7554
+ }
7555
+
7556
+ tempTemplateAttrs = {$attr: {}};
7557
+ replaceWith($rootElement, $compileNode, compileNode);
7558
+ var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);
7559
+
7560
+ if (isObject(origAsyncDirective.scope)) {
7561
+ markDirectivesAsIsolate(templateDirectives);
7562
+ }
7563
+ directives = templateDirectives.concat(directives);
7564
+ mergeTemplateAttributes(tAttrs, tempTemplateAttrs);
7565
+ } else {
7566
+ compileNode = beforeTemplateCompileNode;
7567
+ $compileNode.html(content);
7568
+ }
7569
+
7570
+ directives.unshift(derivedSyncDirective);
7571
+
7572
+ afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,
7573
+ childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,
7574
+ previousCompileContext);
7575
+ forEach($rootElement, function(node, i) {
7576
+ if (node == compileNode) {
7577
+ $rootElement[i] = $compileNode[0];
7578
+ }
7579
+ });
7580
+ afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
7581
+
7582
+ while(linkQueue.length) {
7583
+ var scope = linkQueue.shift(),
7584
+ beforeTemplateLinkNode = linkQueue.shift(),
7585
+ linkRootElement = linkQueue.shift(),
7586
+ boundTranscludeFn = linkQueue.shift(),
7587
+ linkNode = $compileNode[0];
7588
+
7589
+ if (scope.$$destroyed) continue;
7590
+
7591
+ if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
7592
+ var oldClasses = beforeTemplateLinkNode.className;
7593
+
7594
+ if (!(previousCompileContext.hasElementTranscludeDirective &&
7595
+ origAsyncDirective.replace)) {
7596
+ // it was cloned therefore we have to clone as well.
7597
+ linkNode = jqLiteClone(compileNode);
7598
+ }
7599
+ replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
7600
+
7601
+ // Copy in CSS classes from original node
7602
+ safeAddClass(jqLite(linkNode), oldClasses);
7603
+ }
7604
+ if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
7605
+ childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
7606
+ } else {
7607
+ childBoundTranscludeFn = boundTranscludeFn;
7608
+ }
7609
+ afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,
7610
+ childBoundTranscludeFn);
7611
+ }
7612
+ linkQueue = null;
7613
+ });
7614
+
7615
+ return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {
7616
+ var childBoundTranscludeFn = boundTranscludeFn;
7617
+ if (scope.$$destroyed) return;
7618
+ if (linkQueue) {
7619
+ linkQueue.push(scope);
7620
+ linkQueue.push(node);
7621
+ linkQueue.push(rootElement);
7622
+ linkQueue.push(childBoundTranscludeFn);
7623
+ } else {
7624
+ if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
7625
+ childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
7626
+ }
7627
+ afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);
7628
+ }
7629
+ };
7630
+ }
7631
+
7632
+
7633
+ /**
7634
+ * Sorting function for bound directives.
7635
+ */
7636
+ function byPriority(a, b) {
7637
+ var diff = b.priority - a.priority;
7638
+ if (diff !== 0) return diff;
7639
+ if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;
7640
+ return a.index - b.index;
7641
+ }
7642
+
7643
+
7644
+ function assertNoDuplicate(what, previousDirective, directive, element) {
7645
+ if (previousDirective) {
7646
+ throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}',
7647
+ previousDirective.name, directive.name, what, startingTag(element));
7648
+ }
7649
+ }
7650
+
7651
+
7652
+ function addTextInterpolateDirective(directives, text) {
7653
+ var interpolateFn = $interpolate(text, true);
7654
+ if (interpolateFn) {
7655
+ directives.push({
7656
+ priority: 0,
7657
+ compile: function textInterpolateCompileFn(templateNode) {
7658
+ var templateNodeParent = templateNode.parent(),
7659
+ hasCompileParent = !!templateNodeParent.length;
7660
+
7661
+ // When transcluding a template that has bindings in the root
7662
+ // we don't have a parent and thus need to add the class during linking fn.
7663
+ if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);
7664
+
7665
+ return function textInterpolateLinkFn(scope, node) {
7666
+ var parent = node.parent();
7667
+ if (!hasCompileParent) compile.$$addBindingClass(parent);
7668
+ compile.$$addBindingInfo(parent, interpolateFn.expressions);
7669
+ scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {
7670
+ node[0].nodeValue = value;
7671
+ });
7672
+ };
7673
+ }
7674
+ });
7675
+ }
7676
+ }
7677
+
7678
+
7679
+ function wrapTemplate(type, template) {
7680
+ type = lowercase(type || 'html');
7681
+ switch(type) {
7682
+ case 'svg':
7683
+ case 'math':
7684
+ var wrapper = document.createElement('div');
7685
+ wrapper.innerHTML = '<'+type+'>'+template+'</'+type+'>';
7686
+ return wrapper.childNodes[0].childNodes;
7687
+ default:
7688
+ return template;
7689
+ }
7690
+ }
7691
+
7692
+
7693
+ function getTrustedContext(node, attrNormalizedName) {
7694
+ if (attrNormalizedName == "srcdoc") {
7695
+ return $sce.HTML;
7696
+ }
7697
+ var tag = nodeName_(node);
7698
+ // maction[xlink:href] can source SVG. It's not limited to <maction>.
7699
+ if (attrNormalizedName == "xlinkHref" ||
7700
+ (tag == "form" && attrNormalizedName == "action") ||
7701
+ (tag != "img" && (attrNormalizedName == "src" ||
7702
+ attrNormalizedName == "ngSrc"))) {
7703
+ return $sce.RESOURCE_URL;
7704
+ }
7705
+ }
7706
+
7707
+
7708
+ function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {
7709
+ var interpolateFn = $interpolate(value, true);
7710
+
7711
+ // no interpolation found -> ignore
7712
+ if (!interpolateFn) return;
7713
+
7714
+
7715
+ if (name === "multiple" && nodeName_(node) === "select") {
7716
+ throw $compileMinErr("selmulti",
7717
+ "Binding to the 'multiple' attribute is not supported. Element: {0}",
7718
+ startingTag(node));
7719
+ }
7720
+
7721
+ directives.push({
7722
+ priority: 100,
7723
+ compile: function() {
7724
+ return {
7725
+ pre: function attrInterpolatePreLinkFn(scope, element, attr) {
7726
+ var $$observers = (attr.$$observers || (attr.$$observers = {}));
7727
+
7728
+ if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
7729
+ throw $compileMinErr('nodomevents',
7730
+ "Interpolations for HTML DOM event attributes are disallowed. Please use the " +
7731
+ "ng- versions (such as ng-click instead of onclick) instead.");
7732
+ }
7733
+
7734
+ // If the attribute was removed, then we are done
7735
+ if (!attr[name]) {
7736
+ return;
7737
+ }
7738
+
7739
+ // we need to interpolate again, in case the attribute value has been updated
7740
+ // (e.g. by another directive's compile function)
7741
+ interpolateFn = $interpolate(attr[name], true, getTrustedContext(node, name),
7742
+ ALL_OR_NOTHING_ATTRS[name] || allOrNothing);
7743
+
7744
+ // if attribute was updated so that there is no interpolation going on we don't want to
7745
+ // register any observers
7746
+ if (!interpolateFn) return;
7747
+
7748
+ // initialize attr object so that it's ready in case we need the value for isolate
7749
+ // scope initialization, otherwise the value would not be available from isolate
7750
+ // directive's linking fn during linking phase
7751
+ attr[name] = interpolateFn(scope);
7752
+
7753
+ ($$observers[name] || ($$observers[name] = [])).$$inter = true;
7754
+ (attr.$$observers && attr.$$observers[name].$$scope || scope).
7755
+ $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {
7756
+ //special case for class attribute addition + removal
7757
+ //so that class changes can tap into the animation
7758
+ //hooks provided by the $animate service. Be sure to
7759
+ //skip animations when the first digest occurs (when
7760
+ //both the new and the old values are the same) since
7761
+ //the CSS classes are the non-interpolated values
7762
+ if(name === 'class' && newValue != oldValue) {
7763
+ attr.$updateClass(newValue, oldValue);
7764
+ } else {
7765
+ attr.$set(name, newValue);
7766
+ }
7767
+ });
7768
+ }
7769
+ };
7770
+ }
7771
+ });
7772
+ }
7773
+
7774
+
7775
+ /**
7776
+ * This is a special jqLite.replaceWith, which can replace items which
7777
+ * have no parents, provided that the containing jqLite collection is provided.
7778
+ *
7779
+ * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes
7780
+ * in the root of the tree.
7781
+ * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep
7782
+ * the shell, but replace its DOM node reference.
7783
+ * @param {Node} newNode The new DOM node.
7784
+ */
7785
+ function replaceWith($rootElement, elementsToRemove, newNode) {
7786
+ var firstElementToRemove = elementsToRemove[0],
7787
+ removeCount = elementsToRemove.length,
7788
+ parent = firstElementToRemove.parentNode,
7789
+ i, ii;
7790
+
7791
+ if ($rootElement) {
7792
+ for(i = 0, ii = $rootElement.length; i < ii; i++) {
7793
+ if ($rootElement[i] == firstElementToRemove) {
7794
+ $rootElement[i++] = newNode;
7795
+ for (var j = i, j2 = j + removeCount - 1,
7796
+ jj = $rootElement.length;
7797
+ j < jj; j++, j2++) {
7798
+ if (j2 < jj) {
7799
+ $rootElement[j] = $rootElement[j2];
7800
+ } else {
7801
+ delete $rootElement[j];
7802
+ }
7803
+ }
7804
+ $rootElement.length -= removeCount - 1;
7805
+
7806
+ // If the replaced element is also the jQuery .context then replace it
7807
+ // .context is a deprecated jQuery api, so we should set it only when jQuery set it
7808
+ // http://api.jquery.com/context/
7809
+ if ($rootElement.context === firstElementToRemove) {
7810
+ $rootElement.context = newNode;
7811
+ }
7812
+ break;
7813
+ }
7814
+ }
7815
+ }
7816
+
7817
+ if (parent) {
7818
+ parent.replaceChild(newNode, firstElementToRemove);
7819
+ }
7820
+
7821
+ // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?
7822
+ var fragment = document.createDocumentFragment();
7823
+ fragment.appendChild(firstElementToRemove);
7824
+
7825
+ // Copy over user data (that includes Angular's $scope etc.). Don't copy private
7826
+ // data here because there's no public interface in jQuery to do that and copying over
7827
+ // event listeners (which is the main use of private data) wouldn't work anyway.
7828
+ jqLite(newNode).data(jqLite(firstElementToRemove).data());
7829
+
7830
+ // Remove data of the replaced element. We cannot just call .remove()
7831
+ // on the element it since that would deallocate scope that is needed
7832
+ // for the new node. Instead, remove the data "manually".
7833
+ if (!jQuery) {
7834
+ delete jqLite.cache[firstElementToRemove[jqLite.expando]];
7835
+ } else {
7836
+ // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after
7837
+ // the replaced element. The cleanData version monkey-patched by Angular would cause
7838
+ // the scope to be trashed and we do need the very same scope to work with the new
7839
+ // element. However, we cannot just cache the non-patched version and use it here as
7840
+ // that would break if another library patches the method after Angular does (one
7841
+ // example is jQuery UI). Instead, set a flag indicating scope destroying should be
7842
+ // skipped this one time.
7843
+ skipDestroyOnNextJQueryCleanData = true;
7844
+ jQuery.cleanData([firstElementToRemove]);
7845
+ }
7846
+
7847
+ for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {
7848
+ var element = elementsToRemove[k];
7849
+ jqLite(element).remove(); // must do this way to clean up expando
7850
+ fragment.appendChild(element);
7851
+ delete elementsToRemove[k];
7852
+ }
7853
+
7854
+ elementsToRemove[0] = newNode;
7855
+ elementsToRemove.length = 1;
7856
+ }
7857
+
7858
+
7859
+ function cloneAndAnnotateFn(fn, annotation) {
7860
+ return extend(function() { return fn.apply(null, arguments); }, fn, annotation);
7861
+ }
7862
+
7863
+
7864
+ function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {
7865
+ try {
7866
+ linkFn(scope, $element, attrs, controllers, transcludeFn);
7867
+ } catch(e) {
7868
+ $exceptionHandler(e, startingTag($element));
7869
+ }
7870
+ }
7871
+ }];
7872
+}
7873
+
7874
+var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i;
7875
+/**
7876
+ * Converts all accepted directives format into proper directive name.
7877
+ * All of these will become 'myDirective':
7878
+ * my:Directive
7879
+ * my-directive
7880
+ * x-my-directive
7881
+ * data-my:directive
7882
+ *
7883
+ * Also there is special case for Moz prefix starting with upper case letter.
7884
+ * @param name Name to normalize
7885
+ */
7886
+function directiveNormalize(name) {
7887
+ return camelCase(name.replace(PREFIX_REGEXP, ''));
7888
+}
7889
+
7890
+/**
7891
+ * @ngdoc type
7892
+ * @name $compile.directive.Attributes
7893
+ *
7894
+ * @description
7895
+ * A shared object between directive compile / linking functions which contains normalized DOM
7896
+ * element attributes. The values reflect current binding state `{{ }}`. The normalization is
7897
+ * needed since all of these are treated as equivalent in Angular:
7898
+ *
7899
+ * ```
7900
+ * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
7901
+ * ```
7902
+ */
7903
+
7904
+/**
7905
+ * @ngdoc property
7906
+ * @name $compile.directive.Attributes#$attr
7907
+ *
7908
+ * @description
7909
+ * A map of DOM element attribute names to the normalized name. This is
7910
+ * needed to do reverse lookup from normalized name back to actual name.
7911
+ */
7912
+
7913
+
7914
+/**
7915
+ * @ngdoc method
7916
+ * @name $compile.directive.Attributes#$set
7917
+ * @kind function
7918
+ *
7919
+ * @description
7920
+ * Set DOM element attribute value.
7921
+ *
7922
+ *
7923
+ * @param {string} name Normalized element attribute name of the property to modify. The name is
7924
+ * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
7925
+ * property to the original name.
7926
+ * @param {string} value Value to set the attribute to. The value can be an interpolated string.
7927
+ */
7928
+
7929
+
7930
+
7931
+/**
7932
+ * Closure compiler type information
7933
+ */
7934
+
7935
+function nodesetLinkingFn(
7936
+ /* angular.Scope */ scope,
7937
+ /* NodeList */ nodeList,
7938
+ /* Element */ rootElement,
7939
+ /* function(Function) */ boundTranscludeFn
7940
+){}
7941
+
7942
+function directiveLinkingFn(
7943
+ /* nodesetLinkingFn */ nodesetLinkingFn,
7944
+ /* angular.Scope */ scope,
7945
+ /* Node */ node,
7946
+ /* Element */ rootElement,
7947
+ /* function(Function) */ boundTranscludeFn
7948
+){}
7949
+
7950
+function tokenDifference(str1, str2) {
7951
+ var values = '',
7952
+ tokens1 = str1.split(/\s+/),
7953
+ tokens2 = str2.split(/\s+/);
7954
+
7955
+ outer:
7956
+ for(var i = 0; i < tokens1.length; i++) {
7957
+ var token = tokens1[i];
7958
+ for(var j = 0; j < tokens2.length; j++) {
7959
+ if(token == tokens2[j]) continue outer;
7960
+ }
7961
+ values += (values.length > 0 ? ' ' : '') + token;
7962
+ }
7963
+ return values;
7964
+}
7965
+
7966
+function removeComments(jqNodes) {
7967
+ jqNodes = jqLite(jqNodes);
7968
+ var i = jqNodes.length;
7969
+
7970
+ if (i <= 1) {
7971
+ return jqNodes;
7972
+ }
7973
+
7974
+ while (i--) {
7975
+ var node = jqNodes[i];
7976
+ if (node.nodeType === NODE_TYPE_COMMENT) {
7977
+ splice.call(jqNodes, i, 1);
7978
+ }
7979
+ }
7980
+ return jqNodes;
7981
+}
7982
+
7983
+/**
7984
+ * @ngdoc provider
7985
+ * @name $controllerProvider
7986
+ * @description
7987
+ * The {@link ng.$controller $controller service} is used by Angular to create new
7988
+ * controllers.
7989
+ *
7990
+ * This provider allows controller registration via the
7991
+ * {@link ng.$controllerProvider#register register} method.
7992
+ */
7993
+function $ControllerProvider() {
7994
+ var controllers = {},
7995
+ globals = false,
7996
+ CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/;
7997
+
7998
+
7999
+ /**
8000
+ * @ngdoc method
8001
+ * @name $controllerProvider#register
8002
+ * @param {string|Object} name Controller name, or an object map of controllers where the keys are
8003
+ * the names and the values are the constructors.
8004
+ * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI
8005
+ * annotations in the array notation).
8006
+ */
8007
+ this.register = function(name, constructor) {
8008
+ assertNotHasOwnProperty(name, 'controller');
8009
+ if (isObject(name)) {
8010
+ extend(controllers, name);
8011
+ } else {
8012
+ controllers[name] = constructor;
8013
+ }
8014
+ };
8015
+
8016
+ /**
8017
+ * @ngdoc method
8018
+ * @name $controllerProvider#allowGlobals
8019
+ * @description If called, allows `$controller` to find controller constructors on `window`
8020
+ */
8021
+ this.allowGlobals = function() {
8022
+ globals = true;
8023
+ };
8024
+
8025
+
8026
+ this.$get = ['$injector', '$window', function($injector, $window) {
8027
+
8028
+ /**
8029
+ * @ngdoc service
8030
+ * @name $controller
8031
+ * @requires $injector
8032
+ *
8033
+ * @param {Function|string} constructor If called with a function then it's considered to be the
8034
+ * controller constructor function. Otherwise it's considered to be a string which is used
8035
+ * to retrieve the controller constructor using the following steps:
8036
+ *
8037
+ * * check if a controller with given name is registered via `$controllerProvider`
8038
+ * * check if evaluating the string on the current scope returns a constructor
8039
+ * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
8040
+ * `window` object (not recommended)
8041
+ *
8042
+ * @param {Object} locals Injection locals for Controller.
8043
+ * @return {Object} Instance of given controller.
8044
+ *
8045
+ * @description
8046
+ * `$controller` service is responsible for instantiating controllers.
8047
+ *
8048
+ * It's just a simple call to {@link auto.$injector $injector}, but extracted into
8049
+ * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).
8050
+ */
8051
+ return function(expression, locals, later, ident) {
8052
+ // PRIVATE API:
8053
+ // param `later` --- indicates that the controller's constructor is invoked at a later time.
8054
+ // If true, $controller will allocate the object with the correct
8055
+ // prototype chain, but will not invoke the controller until a returned
8056
+ // callback is invoked.
8057
+ // param `ident` --- An optional label which overrides the label parsed from the controller
8058
+ // expression, if any.
8059
+ var instance, match, constructor, identifier;
8060
+ later = later === true;
8061
+ if (ident && isString(ident)) {
8062
+ identifier = ident;
8063
+ }
8064
+
8065
+ if(isString(expression)) {
8066
+ match = expression.match(CNTRL_REG),
8067
+ constructor = match[1],
8068
+ identifier = identifier || match[3];
8069
+ expression = controllers.hasOwnProperty(constructor)
8070
+ ? controllers[constructor]
8071
+ : getter(locals.$scope, constructor, true) ||
8072
+ (globals ? getter($window, constructor, true) : undefined);
8073
+
8074
+ assertArgFn(expression, constructor, true);
8075
+ }
8076
+
8077
+ if (later) {
8078
+ // Instantiate controller later:
8079
+ // This machinery is used to create an instance of the object before calling the
8080
+ // controller's constructor itself.
8081
+ //
8082
+ // This allows properties to be added to the controller before the constructor is
8083
+ // invoked. Primarily, this is used for isolate scope bindings in $compile.
8084
+ //
8085
+ // This feature is not intended for use by applications, and is thus not documented
8086
+ // publicly.
8087
+ var Constructor = function() {};
8088
+ Constructor.prototype = (isArray(expression) ?
8089
+ expression[expression.length - 1] : expression).prototype;
8090
+ instance = new Constructor();
8091
+
8092
+ if (identifier) {
8093
+ addIdentifier(locals, identifier, instance, constructor || expression.name);
8094
+ }
8095
+
8096
+ return extend(function() {
8097
+ $injector.invoke(expression, instance, locals, constructor);
8098
+ return instance;
8099
+ }, {
8100
+ instance: instance,
8101
+ identifier: identifier
8102
+ });
8103
+ }
8104
+
8105
+ instance = $injector.instantiate(expression, locals, constructor);
8106
+
8107
+ if (identifier) {
8108
+ addIdentifier(locals, identifier, instance, constructor || expression.name);
8109
+ }
8110
+
8111
+ return instance;
8112
+ };
8113
+
8114
+ function addIdentifier(locals, identifier, instance, name) {
8115
+ if (!(locals && isObject(locals.$scope))) {
8116
+ throw minErr('$controller')('noscp',
8117
+ "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",
8118
+ name, identifier);
8119
+ }
8120
+
8121
+ locals.$scope[identifier] = instance;
8122
+ }
8123
+ }];
8124
+}
8125
+
8126
+/**
8127
+ * @ngdoc service
8128
+ * @name $document
8129
+ * @requires $window
8130
+ *
8131
+ * @description
8132
+ * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
8133
+ *
8134
+ * @example
8135
+ <example module="documentExample">
8136
+ <file name="index.html">
8137
+ <div ng-controller="ExampleController">
8138
+ <p>$document title: <b ng-bind="title"></b></p>
8139
+ <p>window.document title: <b ng-bind="windowTitle"></b></p>
8140
+ </div>
8141
+ </file>
8142
+ <file name="script.js">
8143
+ angular.module('documentExample', [])
8144
+ .controller('ExampleController', ['$scope', '$document', function($scope, $document) {
8145
+ $scope.title = $document[0].title;
8146
+ $scope.windowTitle = angular.element(window.document)[0].title;
8147
+ }]);
8148
+ </file>
8149
+ </example>
8150
+ */
8151
+function $DocumentProvider(){
8152
+ this.$get = ['$window', function(window){
8153
+ return jqLite(window.document);
8154
+ }];
8155
+}
8156
+
8157
+/**
8158
+ * @ngdoc service
8159
+ * @name $exceptionHandler
8160
+ * @requires ng.$log
8161
+ *
8162
+ * @description
8163
+ * Any uncaught exception in angular expressions is delegated to this service.
8164
+ * The default implementation simply delegates to `$log.error` which logs it into
8165
+ * the browser console.
8166
+ *
8167
+ * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by
8168
+ * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.
8169
+ *
8170
+ * ## Example:
8171
+ *
8172
+ * ```js
8173
+ * angular.module('exceptionOverride', []).factory('$exceptionHandler', function () {
8174
+ * return function (exception, cause) {
8175
+ * exception.message += ' (caused by "' + cause + '")';
8176
+ * throw exception;
8177
+ * };
8178
+ * });
8179
+ * ```
8180
+ *
8181
+ * This example will override the normal action of `$exceptionHandler`, to make angular
8182
+ * exceptions fail hard when they happen, instead of just logging to the console.
8183
+ *
8184
+ * @param {Error} exception Exception associated with the error.
8185
+ * @param {string=} cause optional information about the context in which
8186
+ * the error was thrown.
8187
+ *
8188
+ */
8189
+function $ExceptionHandlerProvider() {
8190
+ this.$get = ['$log', function($log) {
8191
+ return function(exception, cause) {
8192
+ $log.error.apply($log, arguments);
8193
+ };
8194
+ }];
8195
+}
8196
+
8197
+/**
8198
+ * Parse headers into key value object
8199
+ *
8200
+ * @param {string} headers Raw headers as a string
8201
+ * @returns {Object} Parsed headers as key value object
8202
+ */
8203
+function parseHeaders(headers) {
8204
+ var parsed = {}, key, val, i;
8205
+
8206
+ if (!headers) return parsed;
8207
+
8208
+ forEach(headers.split('\n'), function(line) {
8209
+ i = line.indexOf(':');
8210
+ key = lowercase(trim(line.substr(0, i)));
8211
+ val = trim(line.substr(i + 1));
8212
+
8213
+ if (key) {
8214
+ parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
8215
+ }
8216
+ });
8217
+
8218
+ return parsed;
8219
+}
8220
+
8221
+
8222
+/**
8223
+ * Returns a function that provides access to parsed headers.
8224
+ *
8225
+ * Headers are lazy parsed when first requested.
8226
+ * @see parseHeaders
8227
+ *
8228
+ * @param {(string|Object)} headers Headers to provide access to.
8229
+ * @returns {function(string=)} Returns a getter function which if called with:
8230
+ *
8231
+ * - if called with single an argument returns a single header value or null
8232
+ * - if called with no arguments returns an object containing all headers.
8233
+ */
8234
+function headersGetter(headers) {
8235
+ var headersObj = isObject(headers) ? headers : undefined;
8236
+
8237
+ return function(name) {
8238
+ if (!headersObj) headersObj = parseHeaders(headers);
8239
+
8240
+ if (name) {
8241
+ return headersObj[lowercase(name)] || null;
8242
+ }
8243
+
8244
+ return headersObj;
8245
+ };
8246
+}
8247
+
8248
+
8249
+/**
8250
+ * Chain all given functions
8251
+ *
8252
+ * This function is used for both request and response transforming
8253
+ *
8254
+ * @param {*} data Data to transform.
8255
+ * @param {function(string=)} headers Http headers getter fn.
8256
+ * @param {(Function|Array.<Function>)} fns Function or an array of functions.
8257
+ * @returns {*} Transformed data.
8258
+ */
8259
+function transformData(data, headers, fns) {
8260
+ if (isFunction(fns))
8261
+ return fns(data, headers);
8262
+
8263
+ forEach(fns, function(fn) {
8264
+ data = fn(data, headers);
8265
+ });
8266
+
8267
+ return data;
8268
+}
8269
+
8270
+
8271
+function isSuccess(status) {
8272
+ return 200 <= status && status < 300;
8273
+}
8274
+
8275
+
8276
+/**
8277
+ * @ngdoc provider
8278
+ * @name $httpProvider
8279
+ * @description
8280
+ * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
8281
+ * */
8282
+function $HttpProvider() {
8283
+ var JSON_START = /^\s*(\[|\{[^\{])/,
8284
+ JSON_END = /[\}\]]\s*$/,
8285
+ PROTECTION_PREFIX = /^\)\]\}',?\n/,
8286
+ APPLICATION_JSON = 'application/json',
8287
+ CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
8288
+
8289
+ /**
8290
+ * @ngdoc property
8291
+ * @name $httpProvider#defaults
8292
+ * @description
8293
+ *
8294
+ * Object containing default values for all {@link ng.$http $http} requests.
8295
+ *
8296
+ * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
8297
+ * Defaults value is `'XSRF-TOKEN'`.
8298
+ *
8299
+ * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
8300
+ * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
8301
+ *
8302
+ * - **`defaults.headers`** - {Object} - Default headers for all $http requests.
8303
+ * Refer to {@link ng.$http#setting-http-headers $http} for documentation on
8304
+ * setting default headers.
8305
+ * - **`defaults.headers.common`**
8306
+ * - **`defaults.headers.post`**
8307
+ * - **`defaults.headers.put`**
8308
+ * - **`defaults.headers.patch`**
8309
+ **/
8310
+ var defaults = this.defaults = {
8311
+ // transform incoming response data
8312
+ transformResponse: [function defaultHttpResponseTransform(data, headers) {
8313
+ if (isString(data)) {
8314
+ // strip json vulnerability protection prefix
8315
+ data = data.replace(PROTECTION_PREFIX, '');
8316
+ var contentType = headers('Content-Type');
8317
+ if ((contentType && contentType.indexOf(APPLICATION_JSON) === 0) ||
8318
+ (JSON_START.test(data) && JSON_END.test(data))) {
8319
+ data = fromJson(data);
8320
+ }
8321
+ }
8322
+ return data;
8323
+ }],
8324
+
8325
+ // transform outgoing request data
8326
+ transformRequest: [function(d) {
8327
+ return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d;
8328
+ }],
8329
+
8330
+ // default headers
8331
+ headers: {
8332
+ common: {
8333
+ 'Accept': 'application/json, text/plain, */*'
8334
+ },
8335
+ post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
8336
+ put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
8337
+ patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON)
8338
+ },
8339
+
8340
+ xsrfCookieName: 'XSRF-TOKEN',
8341
+ xsrfHeaderName: 'X-XSRF-TOKEN'
8342
+ };
8343
+
8344
+ var useApplyAsync = false;
8345
+ /**
8346
+ * @ngdoc method
8347
+ * @name $httpProvider#useApplyAsync
8348
+ * @description
8349
+ *
8350
+ * Configure $http service to combine processing of multiple http responses received at around
8351
+ * the same time via {@link ng.$rootScope#applyAsync $rootScope.$applyAsync}. This can result in
8352
+ * significant performance improvement for bigger applications that make many HTTP requests
8353
+ * concurrently (common during application bootstrap).
8354
+ *
8355
+ * Defaults to false. If no value is specifed, returns the current configured value.
8356
+ *
8357
+ * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred
8358
+ * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window
8359
+ * to load and share the same digest cycle.
8360
+ *
8361
+ * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
8362
+ * otherwise, returns the current configured value.
8363
+ **/
8364
+ this.useApplyAsync = function(value) {
8365
+ if (isDefined(value)) {
8366
+ useApplyAsync = !!value;
8367
+ return this;
8368
+ }
8369
+ return useApplyAsync;
8370
+ };
8371
+
8372
+ /**
8373
+ * Are ordered by request, i.e. they are applied in the same order as the
8374
+ * array, on request, but reverse order, on response.
8375
+ */
8376
+ var interceptorFactories = this.interceptors = [];
8377
+
8378
+ this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',
8379
+ function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) {
8380
+
8381
+ var defaultCache = $cacheFactory('$http');
8382
+
8383
+ /**
8384
+ * Interceptors stored in reverse order. Inner interceptors before outer interceptors.
8385
+ * The reversal is needed so that we can build up the interception chain around the
8386
+ * server request.
8387
+ */
8388
+ var reversedInterceptors = [];
8389
+
8390
+ forEach(interceptorFactories, function(interceptorFactory) {
8391
+ reversedInterceptors.unshift(isString(interceptorFactory)
8392
+ ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));
8393
+ });
8394
+
8395
+ /**
8396
+ * @ngdoc service
8397
+ * @kind function
8398
+ * @name $http
8399
+ * @requires ng.$httpBackend
8400
+ * @requires $cacheFactory
8401
+ * @requires $rootScope
8402
+ * @requires $q
8403
+ * @requires $injector
8404
+ *
8405
+ * @description
8406
+ * The `$http` service is a core Angular service that facilitates communication with the remote
8407
+ * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)
8408
+ * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).
8409
+ *
8410
+ * For unit testing applications that use `$http` service, see
8411
+ * {@link ngMock.$httpBackend $httpBackend mock}.
8412
+ *
8413
+ * For a higher level of abstraction, please check out the {@link ngResource.$resource
8414
+ * $resource} service.
8415
+ *
8416
+ * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by
8417
+ * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage
8418
+ * it is important to familiarize yourself with these APIs and the guarantees they provide.
8419
+ *
8420
+ *
8421
+ * ## General usage
8422
+ * The `$http` service is a function which takes a single argument — a configuration object —
8423
+ * that is used to generate an HTTP request and returns a {@link ng.$q promise}
8424
+ * with two $http specific methods: `success` and `error`.
8425
+ *
8426
+ * ```js
8427
+ * $http({method: 'GET', url: '/someUrl'}).
8428
+ * success(function(data, status, headers, config) {
8429
+ * // this callback will be called asynchronously
8430
+ * // when the response is available
8431
+ * }).
8432
+ * error(function(data, status, headers, config) {
8433
+ * // called asynchronously if an error occurs
8434
+ * // or server returns response with an error status.
8435
+ * });
8436
+ * ```
8437
+ *
8438
+ * Since the returned value of calling the $http function is a `promise`, you can also use
8439
+ * the `then` method to register callbacks, and these callbacks will receive a single argument –
8440
+ * an object representing the response. See the API signature and type info below for more
8441
+ * details.
8442
+ *
8443
+ * A response status code between 200 and 299 is considered a success status and
8444
+ * will result in the success callback being called. Note that if the response is a redirect,
8445
+ * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
8446
+ * called for such responses.
8447
+ *
8448
+ * ## Writing Unit Tests that use $http
8449
+ * When unit testing (using {@link ngMock ngMock}), it is necessary to call
8450
+ * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending
8451
+ * request using trained responses.
8452
+ *
8453
+ * ```
8454
+ * $httpBackend.expectGET(...);
8455
+ * $http.get(...);
8456
+ * $httpBackend.flush();
8457
+ * ```
8458
+ *
8459
+ * ## Shortcut methods
8460
+ *
8461
+ * Shortcut methods are also available. All shortcut methods require passing in the URL, and
8462
+ * request data must be passed in for POST/PUT requests.
8463
+ *
8464
+ * ```js
8465
+ * $http.get('/someUrl').success(successCallback);
8466
+ * $http.post('/someUrl', data).success(successCallback);
8467
+ * ```
8468
+ *
8469
+ * Complete list of shortcut methods:
8470
+ *
8471
+ * - {@link ng.$http#get $http.get}
8472
+ * - {@link ng.$http#head $http.head}
8473
+ * - {@link ng.$http#post $http.post}
8474
+ * - {@link ng.$http#put $http.put}
8475
+ * - {@link ng.$http#delete $http.delete}
8476
+ * - {@link ng.$http#jsonp $http.jsonp}
8477
+ * - {@link ng.$http#patch $http.patch}
8478
+ *
8479
+ *
8480
+ * ## Setting HTTP Headers
8481
+ *
8482
+ * The $http service will automatically add certain HTTP headers to all requests. These defaults
8483
+ * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration
8484
+ * object, which currently contains this default configuration:
8485
+ *
8486
+ * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
8487
+ * - `Accept: application/json, text/plain, * / *`
8488
+ * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
8489
+ * - `Content-Type: application/json`
8490
+ * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
8491
+ * - `Content-Type: application/json`
8492
+ *
8493
+ * To add or overwrite these defaults, simply add or remove a property from these configuration
8494
+ * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object
8495
+ * with the lowercased HTTP method name as the key, e.g.
8496
+ * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.
8497
+ *
8498
+ * The defaults can also be set at runtime via the `$http.defaults` object in the same
8499
+ * fashion. For example:
8500
+ *
8501
+ * ```
8502
+ * module.run(function($http) {
8503
+ * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
8504
+ * });
8505
+ * ```
8506
+ *
8507
+ * In addition, you can supply a `headers` property in the config object passed when
8508
+ * calling `$http(config)`, which overrides the defaults without changing them globally.
8509
+ *
8510
+ *
8511
+ * ## Transforming Requests and Responses
8512
+ *
8513
+ * Both requests and responses can be transformed using transformation functions: `transformRequest`
8514
+ * and `transformResponse`. These properties can be a single function that returns
8515
+ * the transformed value (`{function(data, headersGetter)`) or an array of such transformation functions,
8516
+ * which allows you to `push` or `unshift` a new transformation function into the transformation chain.
8517
+ *
8518
+ * ### Default Transformations
8519
+ *
8520
+ * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and
8521
+ * `defaults.transformResponse` properties. If a request does not provide its own transformations
8522
+ * then these will be applied.
8523
+ *
8524
+ * You can augment or replace the default transformations by modifying these properties by adding to or
8525
+ * replacing the array.
8526
+ *
8527
+ * Angular provides the following default transformations:
8528
+ *
8529
+ * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):
8530
+ *
8531
+ * - If the `data` property of the request configuration object contains an object, serialize it
8532
+ * into JSON format.
8533
+ *
8534
+ * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):
8535
+ *
8536
+ * - If XSRF prefix is detected, strip it (see Security Considerations section below).
8537
+ * - If JSON response is detected, deserialize it using a JSON parser.
8538
+ *
8539
+ *
8540
+ * ### Overriding the Default Transformations Per Request
8541
+ *
8542
+ * If you wish override the request/response transformations only for a single request then provide
8543
+ * `transformRequest` and/or `transformResponse` properties on the configuration object passed
8544
+ * into `$http`.
8545
+ *
8546
+ * Note that if you provide these properties on the config object the default transformations will be
8547
+ * overwritten. If you wish to augment the default transformations then you must include them in your
8548
+ * local transformation array.
8549
+ *
8550
+ * The following code demonstrates adding a new response transformation to be run after the default response
8551
+ * transformations have been run.
8552
+ *
8553
+ * ```js
8554
+ * function appendTransform(defaults, transform) {
8555
+ *
8556
+ * // We can't guarantee that the default transformation is an array
8557
+ * defaults = angular.isArray(defaults) ? defaults : [defaults];
8558
+ *
8559
+ * // Append the new transformation to the defaults
8560
+ * return defaults.concat(transform);
8561
+ * }
8562
+ *
8563
+ * $http({
8564
+ * url: '...',
8565
+ * method: 'GET',
8566
+ * transformResponse: appendTransform($http.defaults.transformResponse, function(value) {
8567
+ * return doTransform(value);
8568
+ * })
8569
+ * });
8570
+ * ```
8571
+ *
8572
+ *
8573
+ * ## Caching
8574
+ *
8575
+ * To enable caching, set the request configuration `cache` property to `true` (to use default
8576
+ * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).
8577
+ * When the cache is enabled, `$http` stores the response from the server in the specified
8578
+ * cache. The next time the same request is made, the response is served from the cache without
8579
+ * sending a request to the server.
8580
+ *
8581
+ * Note that even if the response is served from cache, delivery of the data is asynchronous in
8582
+ * the same way that real requests are.
8583
+ *
8584
+ * If there are multiple GET requests for the same URL that should be cached using the same
8585
+ * cache, but the cache is not populated yet, only one request to the server will be made and
8586
+ * the remaining requests will be fulfilled using the response from the first request.
8587
+ *
8588
+ * You can change the default cache to a new object (built with
8589
+ * {@link ng.$cacheFactory `$cacheFactory`}) by updating the
8590
+ * {@link ng.$http#properties_defaults `$http.defaults.cache`} property. All requests who set
8591
+ * their `cache` property to `true` will now use this cache object.
8592
+ *
8593
+ * If you set the default cache to `false` then only requests that specify their own custom
8594
+ * cache object will be cached.
8595
+ *
8596
+ * ## Interceptors
8597
+ *
8598
+ * Before you start creating interceptors, be sure to understand the
8599
+ * {@link ng.$q $q and deferred/promise APIs}.
8600
+ *
8601
+ * For purposes of global error handling, authentication, or any kind of synchronous or
8602
+ * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be
8603
+ * able to intercept requests before they are handed to the server and
8604
+ * responses before they are handed over to the application code that
8605
+ * initiated these requests. The interceptors leverage the {@link ng.$q
8606
+ * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.
8607
+ *
8608
+ * The interceptors are service factories that are registered with the `$httpProvider` by
8609
+ * adding them to the `$httpProvider.interceptors` array. The factory is called and
8610
+ * injected with dependencies (if specified) and returns the interceptor.
8611
+ *
8612
+ * There are two kinds of interceptors (and two kinds of rejection interceptors):
8613
+ *
8614
+ * * `request`: interceptors get called with a http `config` object. The function is free to
8615
+ * modify the `config` object or create a new one. The function needs to return the `config`
8616
+ * object directly, or a promise containing the `config` or a new `config` object.
8617
+ * * `requestError`: interceptor gets called when a previous interceptor threw an error or
8618
+ * resolved with a rejection.
8619
+ * * `response`: interceptors get called with http `response` object. The function is free to
8620
+ * modify the `response` object or create a new one. The function needs to return the `response`
8621
+ * object directly, or as a promise containing the `response` or a new `response` object.
8622
+ * * `responseError`: interceptor gets called when a previous interceptor threw an error or
8623
+ * resolved with a rejection.
8624
+ *
8625
+ *
8626
+ * ```js
8627
+ * // register the interceptor as a service
8628
+ * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
8629
+ * return {
8630
+ * // optional method
8631
+ * 'request': function(config) {
8632
+ * // do something on success
8633
+ * return config;
8634
+ * },
8635
+ *
8636
+ * // optional method
8637
+ * 'requestError': function(rejection) {
8638
+ * // do something on error
8639
+ * if (canRecover(rejection)) {
8640
+ * return responseOrNewPromise
8641
+ * }
8642
+ * return $q.reject(rejection);
8643
+ * },
8644
+ *
8645
+ *
8646
+ *
8647
+ * // optional method
8648
+ * 'response': function(response) {
8649
+ * // do something on success
8650
+ * return response;
8651
+ * },
8652
+ *
8653
+ * // optional method
8654
+ * 'responseError': function(rejection) {
8655
+ * // do something on error
8656
+ * if (canRecover(rejection)) {
8657
+ * return responseOrNewPromise
8658
+ * }
8659
+ * return $q.reject(rejection);
8660
+ * }
8661
+ * };
8662
+ * });
8663
+ *
8664
+ * $httpProvider.interceptors.push('myHttpInterceptor');
8665
+ *
8666
+ *
8667
+ * // alternatively, register the interceptor via an anonymous factory
8668
+ * $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
8669
+ * return {
8670
+ * 'request': function(config) {
8671
+ * // same as above
8672
+ * },
8673
+ *
8674
+ * 'response': function(response) {
8675
+ * // same as above
8676
+ * }
8677
+ * };
8678
+ * });
8679
+ * ```
8680
+ *
8681
+ * ## Security Considerations
8682
+ *
8683
+ * When designing web applications, consider security threats from:
8684
+ *
8685
+ * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
8686
+ * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
8687
+ *
8688
+ * Both server and the client must cooperate in order to eliminate these threats. Angular comes
8689
+ * pre-configured with strategies that address these issues, but for this to work backend server
8690
+ * cooperation is required.
8691
+ *
8692
+ * ### JSON Vulnerability Protection
8693
+ *
8694
+ * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
8695
+ * allows third party website to turn your JSON resource URL into
8696
+ * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To
8697
+ * counter this your server can prefix all JSON requests with following string `")]}',\n"`.
8698
+ * Angular will automatically strip the prefix before processing it as JSON.
8699
+ *
8700
+ * For example if your server needs to return:
8701
+ * ```js
8702
+ * ['one','two']
8703
+ * ```
8704
+ *
8705
+ * which is vulnerable to attack, your server can return:
8706
+ * ```js
8707
+ * )]}',
8708
+ * ['one','two']
8709
+ * ```
8710
+ *
8711
+ * Angular will strip the prefix, before processing the JSON.
8712
+ *
8713
+ *
8714
+ * ### Cross Site Request Forgery (XSRF) Protection
8715
+ *
8716
+ * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which
8717
+ * an unauthorized site can gain your user's private data. Angular provides a mechanism
8718
+ * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie
8719
+ * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only
8720
+ * JavaScript that runs on your domain could read the cookie, your server can be assured that
8721
+ * the XHR came from JavaScript running on your domain. The header will not be set for
8722
+ * cross-domain requests.
8723
+ *
8724
+ * To take advantage of this, your server needs to set a token in a JavaScript readable session
8725
+ * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the
8726
+ * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure
8727
+ * that only JavaScript running on your domain could have sent the request. The token must be
8728
+ * unique for each user and must be verifiable by the server (to prevent the JavaScript from
8729
+ * making up its own tokens). We recommend that the token is a digest of your site's
8730
+ * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)
8731
+ * for added security.
8732
+ *
8733
+ * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
8734
+ * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
8735
+ * or the per-request config object.
8736
+ *
8737
+ *
8738
+ * @param {object} config Object describing the request to be made and how it should be
8739
+ * processed. The object has following properties:
8740
+ *
8741
+ * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)
8742
+ * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.
8743
+ * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned
8744
+ * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be
8745
+ * JSONified.
8746
+ * - **data** – `{string|Object}` – Data to be sent as the request message data.
8747
+ * - **headers** – `{Object}` – Map of strings or functions which return strings representing
8748
+ * HTTP headers to send to the server. If the return value of a function is null, the
8749
+ * header will not be sent.
8750
+ * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
8751
+ * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
8752
+ * - **transformRequest** –
8753
+ * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
8754
+ * transform function or an array of such functions. The transform function takes the http
8755
+ * request body and headers and returns its transformed (typically serialized) version.
8756
+ * See {@link #overriding-the-default-transformations-per-request Overriding the Default Transformations}
8757
+ * - **transformResponse** –
8758
+ * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
8759
+ * transform function or an array of such functions. The transform function takes the http
8760
+ * response body and headers and returns its transformed (typically deserialized) version.
8761
+ * See {@link #overriding-the-default-transformations-per-request Overriding the Default Transformations}
8762
+ * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
8763
+ * GET request, otherwise if a cache instance built with
8764
+ * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
8765
+ * caching.
8766
+ * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}
8767
+ * that should abort the request when resolved.
8768
+ * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the
8769
+ * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)
8770
+ * for more information.
8771
+ * - **responseType** - `{string}` - see
8772
+ * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
8773
+ *
8774
+ * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the
8775
+ * standard `then` method and two http specific methods: `success` and `error`. The `then`
8776
+ * method takes two arguments a success and an error callback which will be called with a
8777
+ * response object. The `success` and `error` methods take a single argument - a function that
8778
+ * will be called when the request succeeds or fails respectively. The arguments passed into
8779
+ * these functions are destructured representation of the response object passed into the
8780
+ * `then` method. The response object has these properties:
8781
+ *
8782
+ * - **data** – `{string|Object}` – The response body transformed with the transform
8783
+ * functions.
8784
+ * - **status** – `{number}` – HTTP status code of the response.
8785
+ * - **headers** – `{function([headerName])}` – Header getter function.
8786
+ * - **config** – `{Object}` – The configuration object that was used to generate the request.
8787
+ * - **statusText** – `{string}` – HTTP status text of the response.
8788
+ *
8789
+ * @property {Array.<Object>} pendingRequests Array of config objects for currently pending
8790
+ * requests. This is primarily meant to be used for debugging purposes.
8791
+ *
8792
+ *
8793
+ * @example
8794
+<example module="httpExample">
8795
+<file name="index.html">
8796
+ <div ng-controller="FetchController">
8797
+ <select ng-model="method">
8798
+ <option>GET</option>
8799
+ <option>JSONP</option>
8800
+ </select>
8801
+ <input type="text" ng-model="url" size="80"/>
8802
+ <button id="fetchbtn" ng-click="fetch()">fetch</button><br>
8803
+ <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button>
8804
+ <button id="samplejsonpbtn"
8805
+ ng-click="updateModel('JSONP',
8806
+ 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')">
8807
+ Sample JSONP
8808
+ </button>
8809
+ <button id="invalidjsonpbtn"
8810
+ ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')">
8811
+ Invalid JSONP
8812
+ </button>
8813
+ <pre>http status code: {{status}}</pre>
8814
+ <pre>http response data: {{data}}</pre>
8815
+ </div>
8816
+</file>
8817
+<file name="script.js">
8818
+ angular.module('httpExample', [])
8819
+ .controller('FetchController', ['$scope', '$http', '$templateCache',
8820
+ function($scope, $http, $templateCache) {
8821
+ $scope.method = 'GET';
8822
+ $scope.url = 'http-hello.html';
8823
+
8824
+ $scope.fetch = function() {
8825
+ $scope.code = null;
8826
+ $scope.response = null;
8827
+
8828
+ $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
8829
+ success(function(data, status) {
8830
+ $scope.status = status;
8831
+ $scope.data = data;
8832
+ }).
8833
+ error(function(data, status) {
8834
+ $scope.data = data || "Request failed";
8835
+ $scope.status = status;
8836
+ });
8837
+ };
8838
+
8839
+ $scope.updateModel = function(method, url) {
8840
+ $scope.method = method;
8841
+ $scope.url = url;
8842
+ };
8843
+ }]);
8844
+</file>
8845
+<file name="http-hello.html">
8846
+ Hello, $http!
8847
+</file>
8848
+<file name="protractor.js" type="protractor">
8849
+ var status = element(by.binding('status'));
8850
+ var data = element(by.binding('data'));
8851
+ var fetchBtn = element(by.id('fetchbtn'));
8852
+ var sampleGetBtn = element(by.id('samplegetbtn'));
8853
+ var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
8854
+ var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));
8855
+
8856
+ it('should make an xhr GET request', function() {
8857
+ sampleGetBtn.click();
8858
+ fetchBtn.click();
8859
+ expect(status.getText()).toMatch('200');
8860
+ expect(data.getText()).toMatch(/Hello, \$http!/);
8861
+ });
8862
+
8863
+// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
8864
+// it('should make a JSONP request to angularjs.org', function() {
8865
+// sampleJsonpBtn.click();
8866
+// fetchBtn.click();
8867
+// expect(status.getText()).toMatch('200');
8868
+// expect(data.getText()).toMatch(/Super Hero!/);
8869
+// });
8870
+
8871
+ it('should make JSONP request to invalid URL and invoke the error handler',
8872
+ function() {
8873
+ invalidJsonpBtn.click();
8874
+ fetchBtn.click();
8875
+ expect(status.getText()).toMatch('0');
8876
+ expect(data.getText()).toMatch('Request failed');
8877
+ });
8878
+</file>
8879
+</example>
8880
+ */
8881
+ function $http(requestConfig) {
8882
+ var config = {
8883
+ method: 'get',
8884
+ transformRequest: defaults.transformRequest,
8885
+ transformResponse: defaults.transformResponse
8886
+ };
8887
+ var headers = mergeHeaders(requestConfig);
8888
+
8889
+ extend(config, requestConfig);
8890
+ config.headers = headers;
8891
+ config.method = uppercase(config.method);
8892
+
8893
+ var serverRequest = function(config) {
8894
+ headers = config.headers;
8895
+ var reqData = transformData(config.data, headersGetter(headers), config.transformRequest);
8896
+
8897
+ // strip content-type if data is undefined
8898
+ if (isUndefined(reqData)) {
8899
+ forEach(headers, function(value, header) {
8900
+ if (lowercase(header) === 'content-type') {
8901
+ delete headers[header];
8902
+ }
8903
+ });
8904
+ }
8905
+
8906
+ if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
8907
+ config.withCredentials = defaults.withCredentials;
8908
+ }
8909
+
8910
+ // send request
8911
+ return sendReq(config, reqData, headers).then(transformResponse, transformResponse);
8912
+ };
8913
+
8914
+ var chain = [serverRequest, undefined];
8915
+ var promise = $q.when(config);
8916
+
8917
+ // apply interceptors
8918
+ forEach(reversedInterceptors, function(interceptor) {
8919
+ if (interceptor.request || interceptor.requestError) {
8920
+ chain.unshift(interceptor.request, interceptor.requestError);
8921
+ }
8922
+ if (interceptor.response || interceptor.responseError) {
8923
+ chain.push(interceptor.response, interceptor.responseError);
8924
+ }
8925
+ });
8926
+
8927
+ while(chain.length) {
8928
+ var thenFn = chain.shift();
8929
+ var rejectFn = chain.shift();
8930
+
8931
+ promise = promise.then(thenFn, rejectFn);
8932
+ }
8933
+
8934
+ promise.success = function(fn) {
8935
+ promise.then(function(response) {
8936
+ fn(response.data, response.status, response.headers, config);
8937
+ });
8938
+ return promise;
8939
+ };
8940
+
8941
+ promise.error = function(fn) {
8942
+ promise.then(null, function(response) {
8943
+ fn(response.data, response.status, response.headers, config);
8944
+ });
8945
+ return promise;
8946
+ };
8947
+
8948
+ return promise;
8949
+
8950
+ function transformResponse(response) {
8951
+ // make a copy since the response must be cacheable
8952
+ var resp = extend({}, response, {
8953
+ data: transformData(response.data, response.headers, config.transformResponse)
8954
+ });
8955
+ return (isSuccess(response.status))
8956
+ ? resp
8957
+ : $q.reject(resp);
8958
+ }
8959
+
8960
+ function mergeHeaders(config) {
8961
+ var defHeaders = defaults.headers,
8962
+ reqHeaders = extend({}, config.headers),
8963
+ defHeaderName, lowercaseDefHeaderName, reqHeaderName;
8964
+
8965
+ defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);
8966
+
8967
+ // using for-in instead of forEach to avoid unecessary iteration after header has been found
8968
+ defaultHeadersIteration:
8969
+ for (defHeaderName in defHeaders) {
8970
+ lowercaseDefHeaderName = lowercase(defHeaderName);
8971
+
8972
+ for (reqHeaderName in reqHeaders) {
8973
+ if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {
8974
+ continue defaultHeadersIteration;
8975
+ }
8976
+ }
8977
+
8978
+ reqHeaders[defHeaderName] = defHeaders[defHeaderName];
8979
+ }
8980
+
8981
+ // execute if header value is a function for merged headers
8982
+ execHeaders(reqHeaders);
8983
+ return reqHeaders;
8984
+
8985
+ function execHeaders(headers) {
8986
+ var headerContent;
8987
+
8988
+ forEach(headers, function(headerFn, header) {
8989
+ if (isFunction(headerFn)) {
8990
+ headerContent = headerFn();
8991
+ if (headerContent != null) {
8992
+ headers[header] = headerContent;
8993
+ } else {
8994
+ delete headers[header];
8995
+ }
8996
+ }
8997
+ });
8998
+ }
8999
+ }
9000
+ }
9001
+
9002
+ $http.pendingRequests = [];
9003
+
9004
+ /**
9005
+ * @ngdoc method
9006
+ * @name $http#get
9007
+ *
9008
+ * @description
9009
+ * Shortcut method to perform `GET` request.
9010
+ *
9011
+ * @param {string} url Relative or absolute URL specifying the destination of the request
9012
+ * @param {Object=} config Optional configuration object
9013
+ * @returns {HttpPromise} Future object
9014
+ */
9015
+
9016
+ /**
9017
+ * @ngdoc method
9018
+ * @name $http#delete
9019
+ *
9020
+ * @description
9021
+ * Shortcut method to perform `DELETE` request.
9022
+ *
9023
+ * @param {string} url Relative or absolute URL specifying the destination of the request
9024
+ * @param {Object=} config Optional configuration object
9025
+ * @returns {HttpPromise} Future object
9026
+ */
9027
+
9028
+ /**
9029
+ * @ngdoc method
9030
+ * @name $http#head
9031
+ *
9032
+ * @description
9033
+ * Shortcut method to perform `HEAD` request.
9034
+ *
9035
+ * @param {string} url Relative or absolute URL specifying the destination of the request
9036
+ * @param {Object=} config Optional configuration object
9037
+ * @returns {HttpPromise} Future object
9038
+ */
9039
+
9040
+ /**
9041
+ * @ngdoc method
9042
+ * @name $http#jsonp
9043
+ *
9044
+ * @description
9045
+ * Shortcut method to perform `JSONP` request.
9046
+ *
9047
+ * @param {string} url Relative or absolute URL specifying the destination of the request.
9048
+ * The name of the callback should be the string `JSON_CALLBACK`.
9049
+ * @param {Object=} config Optional configuration object
9050
+ * @returns {HttpPromise} Future object
9051
+ */
9052
+ createShortMethods('get', 'delete', 'head', 'jsonp');
9053
+
9054
+ /**
9055
+ * @ngdoc method
9056
+ * @name $http#post
9057
+ *
9058
+ * @description
9059
+ * Shortcut method to perform `POST` request.
9060
+ *
9061
+ * @param {string} url Relative or absolute URL specifying the destination of the request
9062
+ * @param {*} data Request content
9063
+ * @param {Object=} config Optional configuration object
9064
+ * @returns {HttpPromise} Future object
9065
+ */
9066
+
9067
+ /**
9068
+ * @ngdoc method
9069
+ * @name $http#put
9070
+ *
9071
+ * @description
9072
+ * Shortcut method to perform `PUT` request.
9073
+ *
9074
+ * @param {string} url Relative or absolute URL specifying the destination of the request
9075
+ * @param {*} data Request content
9076
+ * @param {Object=} config Optional configuration object
9077
+ * @returns {HttpPromise} Future object
9078
+ */
9079
+
9080
+ /**
9081
+ * @ngdoc method
9082
+ * @name $http#patch
9083
+ *
9084
+ * @description
9085
+ * Shortcut method to perform `PATCH` request.
9086
+ *
9087
+ * @param {string} url Relative or absolute URL specifying the destination of the request
9088
+ * @param {*} data Request content
9089
+ * @param {Object=} config Optional configuration object
9090
+ * @returns {HttpPromise} Future object
9091
+ */
9092
+ createShortMethodsWithData('post', 'put', 'patch');
9093
+
9094
+ /**
9095
+ * @ngdoc property
9096
+ * @name $http#defaults
9097
+ *
9098
+ * @description
9099
+ * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of
9100
+ * default headers, withCredentials as well as request and response transformations.
9101
+ *
9102
+ * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above.
9103
+ */
9104
+ $http.defaults = defaults;
9105
+
9106
+
9107
+ return $http;
9108
+
9109
+
9110
+ function createShortMethods(names) {
9111
+ forEach(arguments, function(name) {
9112
+ $http[name] = function(url, config) {
9113
+ return $http(extend(config || {}, {
9114
+ method: name,
9115
+ url: url
9116
+ }));
9117
+ };
9118
+ });
9119
+ }
9120
+
9121
+
9122
+ function createShortMethodsWithData(name) {
9123
+ forEach(arguments, function(name) {
9124
+ $http[name] = function(url, data, config) {
9125
+ return $http(extend(config || {}, {
9126
+ method: name,
9127
+ url: url,
9128
+ data: data
9129
+ }));
9130
+ };
9131
+ });
9132
+ }
9133
+
9134
+
9135
+ /**
9136
+ * Makes the request.
9137
+ *
9138
+ * !!! ACCESSES CLOSURE VARS:
9139
+ * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests
9140
+ */
9141
+ function sendReq(config, reqData, reqHeaders) {
9142
+ var deferred = $q.defer(),
9143
+ promise = deferred.promise,
9144
+ cache,
9145
+ cachedResp,
9146
+ url = buildUrl(config.url, config.params);
9147
+
9148
+ $http.pendingRequests.push(config);
9149
+ promise.then(removePendingReq, removePendingReq);
9150
+
9151
+
9152
+ if ((config.cache || defaults.cache) && config.cache !== false &&
9153
+ (config.method === 'GET' || config.method === 'JSONP')) {
9154
+ cache = isObject(config.cache) ? config.cache
9155
+ : isObject(defaults.cache) ? defaults.cache
9156
+ : defaultCache;
9157
+ }
9158
+
9159
+ if (cache) {
9160
+ cachedResp = cache.get(url);
9161
+ if (isDefined(cachedResp)) {
9162
+ if (isPromiseLike(cachedResp)) {
9163
+ // cached request has already been sent, but there is no response yet
9164
+ cachedResp.then(removePendingReq, removePendingReq);
9165
+ return cachedResp;
9166
+ } else {
9167
+ // serving from cache
9168
+ if (isArray(cachedResp)) {
9169
+ resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);
9170
+ } else {
9171
+ resolvePromise(cachedResp, 200, {}, 'OK');
9172
+ }
9173
+ }
9174
+ } else {
9175
+ // put the promise for the non-transformed response into cache as a placeholder
9176
+ cache.put(url, promise);
9177
+ }
9178
+ }
9179
+
9180
+
9181
+ // if we won't have the response in cache, set the xsrf headers and
9182
+ // send the request to the backend
9183
+ if (isUndefined(cachedResp)) {
9184
+ var xsrfValue = urlIsSameOrigin(config.url)
9185
+ ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName]
9186
+ : undefined;
9187
+ if (xsrfValue) {
9188
+ reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
9189
+ }
9190
+
9191
+ $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
9192
+ config.withCredentials, config.responseType);
9193
+ }
9194
+
9195
+ return promise;
9196
+
9197
+
9198
+ /**
9199
+ * Callback registered to $httpBackend():
9200
+ * - caches the response if desired
9201
+ * - resolves the raw $http promise
9202
+ * - calls $apply
9203
+ */
9204
+ function done(status, response, headersString, statusText) {
9205
+ if (cache) {
9206
+ if (isSuccess(status)) {
9207
+ cache.put(url, [status, response, parseHeaders(headersString), statusText]);
9208
+ } else {
9209
+ // remove promise from the cache
9210
+ cache.remove(url);
9211
+ }
9212
+ }
9213
+
9214
+ function resolveHttpPromise() {
9215
+ resolvePromise(response, status, headersString, statusText);
9216
+ }
9217
+
9218
+ if (useApplyAsync) {
9219
+ $rootScope.$applyAsync(resolveHttpPromise);
9220
+ } else {
9221
+ resolveHttpPromise();
9222
+ if (!$rootScope.$$phase) $rootScope.$apply();
9223
+ }
9224
+ }
9225
+
9226
+
9227
+ /**
9228
+ * Resolves the raw $http promise.
9229
+ */
9230
+ function resolvePromise(response, status, headers, statusText) {
9231
+ // normalize internal statuses to 0
9232
+ status = Math.max(status, 0);
9233
+
9234
+ (isSuccess(status) ? deferred.resolve : deferred.reject)({
9235
+ data: response,
9236
+ status: status,
9237
+ headers: headersGetter(headers),
9238
+ config: config,
9239
+ statusText : statusText
9240
+ });
9241
+ }
9242
+
9243
+
9244
+ function removePendingReq() {
9245
+ var idx = $http.pendingRequests.indexOf(config);
9246
+ if (idx !== -1) $http.pendingRequests.splice(idx, 1);
9247
+ }
9248
+ }
9249
+
9250
+
9251
+ function buildUrl(url, params) {
9252
+ if (!params) return url;
9253
+ var parts = [];
9254
+ forEachSorted(params, function(value, key) {
9255
+ if (value === null || isUndefined(value)) return;
9256
+ if (!isArray(value)) value = [value];
9257
+
9258
+ forEach(value, function(v) {
9259
+ if (isObject(v)) {
9260
+ if (isDate(v)){
9261
+ v = v.toISOString();
9262
+ } else {
9263
+ v = toJson(v);
9264
+ }
9265
+ }
9266
+ parts.push(encodeUriQuery(key) + '=' +
9267
+ encodeUriQuery(v));
9268
+ });
9269
+ });
9270
+ if(parts.length > 0) {
9271
+ url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
9272
+ }
9273
+ return url;
9274
+ }
9275
+ }];
9276
+}
9277
+
9278
+function createXhr() {
9279
+ return new window.XMLHttpRequest();
9280
+}
9281
+
9282
+/**
9283
+ * @ngdoc service
9284
+ * @name $httpBackend
9285
+ * @requires $window
9286
+ * @requires $document
9287
+ *
9288
+ * @description
9289
+ * HTTP backend used by the {@link ng.$http service} that delegates to
9290
+ * XMLHttpRequest object or JSONP and deals with browser incompatibilities.
9291
+ *
9292
+ * You should never need to use this service directly, instead use the higher-level abstractions:
9293
+ * {@link ng.$http $http} or {@link ngResource.$resource $resource}.
9294
+ *
9295
+ * During testing this implementation is swapped with {@link ngMock.$httpBackend mock
9296
+ * $httpBackend} which can be trained with responses.
9297
+ */
9298
+function $HttpBackendProvider() {
9299
+ this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) {
9300
+ return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]);
9301
+ }];
9302
+}
9303
+
9304
+function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
9305
+ // TODO(vojta): fix the signature
9306
+ return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
9307
+ $browser.$$incOutstandingRequestCount();
9308
+ url = url || $browser.url();
9309
+
9310
+ if (lowercase(method) == 'jsonp') {
9311
+ var callbackId = '_' + (callbacks.counter++).toString(36);
9312
+ callbacks[callbackId] = function(data) {
9313
+ callbacks[callbackId].data = data;
9314
+ callbacks[callbackId].called = true;
9315
+ };
9316
+
9317
+ var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
9318
+ callbackId, function(status, text) {
9319
+ completeRequest(callback, status, callbacks[callbackId].data, "", text);
9320
+ callbacks[callbackId] = noop;
9321
+ });
9322
+ } else {
9323
+
9324
+ var xhr = createXhr();
9325
+
9326
+ xhr.open(method, url, true);
9327
+ forEach(headers, function(value, key) {
9328
+ if (isDefined(value)) {
9329
+ xhr.setRequestHeader(key, value);
9330
+ }
9331
+ });
9332
+
9333
+ xhr.onload = function requestLoaded() {
9334
+ var statusText = xhr.statusText || '';
9335
+
9336
+ // responseText is the old-school way of retrieving response (supported by IE8 & 9)
9337
+ // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
9338
+ var response = ('response' in xhr) ? xhr.response : xhr.responseText;
9339
+
9340
+ // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
9341
+ var status = xhr.status === 1223 ? 204 : xhr.status;
9342
+
9343
+ // fix status code when it is 0 (0 status is undocumented).
9344
+ // Occurs when accessing file resources or on Android 4.1 stock browser
9345
+ // while retrieving files from application cache.
9346
+ if (status === 0) {
9347
+ status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;
9348
+ }
9349
+
9350
+ completeRequest(callback,
9351
+ status,
9352
+ response,
9353
+ xhr.getAllResponseHeaders(),
9354
+ statusText);
9355
+ };
9356
+
9357
+ var requestError = function () {
9358
+ // The response is always empty
9359
+ // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
9360
+ completeRequest(callback, -1, null, null, '');
9361
+ };
9362
+
9363
+ xhr.onerror = requestError;
9364
+ xhr.onabort = requestError;
9365
+
9366
+ if (withCredentials) {
9367
+ xhr.withCredentials = true;
9368
+ }
9369
+
9370
+ if (responseType) {
9371
+ try {
9372
+ xhr.responseType = responseType;
9373
+ } catch (e) {
9374
+ // WebKit added support for the json responseType value on 09/03/2013
9375
+ // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
9376
+ // known to throw when setting the value "json" as the response type. Other older
9377
+ // browsers implementing the responseType
9378
+ //
9379
+ // The json response type can be ignored if not supported, because JSON payloads are
9380
+ // parsed on the client-side regardless.
9381
+ if (responseType !== 'json') {
9382
+ throw e;
9383
+ }
9384
+ }
9385
+ }
9386
+
9387
+ xhr.send(post || null);
9388
+ }
9389
+
9390
+ if (timeout > 0) {
9391
+ var timeoutId = $browserDefer(timeoutRequest, timeout);
9392
+ } else if (isPromiseLike(timeout)) {
9393
+ timeout.then(timeoutRequest);
9394
+ }
9395
+
9396
+
9397
+ function timeoutRequest() {
9398
+ jsonpDone && jsonpDone();
9399
+ xhr && xhr.abort();
9400
+ }
9401
+
9402
+ function completeRequest(callback, status, response, headersString, statusText) {
9403
+ // cancel timeout and subsequent timeout promise resolution
9404
+ timeoutId && $browserDefer.cancel(timeoutId);
9405
+ jsonpDone = xhr = null;
9406
+
9407
+ callback(status, response, headersString, statusText);
9408
+ $browser.$$completeOutstandingRequest(noop);
9409
+ }
9410
+ };
9411
+
9412
+ function jsonpReq(url, callbackId, done) {
9413
+ // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.:
9414
+ // - fetches local scripts via XHR and evals them
9415
+ // - adds and immediately removes script elements from the document
9416
+ var script = rawDocument.createElement('script'), callback = null;
9417
+ script.type = "text/javascript";
9418
+ script.src = url;
9419
+ script.async = true;
9420
+
9421
+ callback = function(event) {
9422
+ removeEventListenerFn(script, "load", callback);
9423
+ removeEventListenerFn(script, "error", callback);
9424
+ rawDocument.body.removeChild(script);
9425
+ script = null;
9426
+ var status = -1;
9427
+ var text = "unknown";
9428
+
9429
+ if (event) {
9430
+ if (event.type === "load" && !callbacks[callbackId].called) {
9431
+ event = { type: "error" };
9432
+ }
9433
+ text = event.type;
9434
+ status = event.type === "error" ? 404 : 200;
9435
+ }
9436
+
9437
+ if (done) {
9438
+ done(status, text);
9439
+ }
9440
+ };
9441
+
9442
+ addEventListenerFn(script, "load", callback);
9443
+ addEventListenerFn(script, "error", callback);
9444
+ rawDocument.body.appendChild(script);
9445
+ return callback;
9446
+ }
9447
+}
9448
+
9449
+var $interpolateMinErr = minErr('$interpolate');
9450
+
9451
+/**
9452
+ * @ngdoc provider
9453
+ * @name $interpolateProvider
9454
+ *
9455
+ * @description
9456
+ *
9457
+ * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
9458
+ *
9459
+ * @example
9460
+<example module="customInterpolationApp">
9461
+<file name="index.html">
9462
+<script>
9463
+ var customInterpolationApp = angular.module('customInterpolationApp', []);
9464
+
9465
+ customInterpolationApp.config(function($interpolateProvider) {
9466
+ $interpolateProvider.startSymbol('//');
9467
+ $interpolateProvider.endSymbol('//');
9468
+ });
9469
+
9470
+
9471
+ customInterpolationApp.controller('DemoController', function() {
9472
+ this.label = "This binding is brought you by // interpolation symbols.";
9473
+ });
9474
+</script>
9475
+<div ng-app="App" ng-controller="DemoController as demo">
9476
+ //demo.label//
9477
+</div>
9478
+</file>
9479
+<file name="protractor.js" type="protractor">
9480
+ it('should interpolate binding with custom symbols', function() {
9481
+ expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');
9482
+ });
9483
+</file>
9484
+</example>
9485
+ */
9486
+function $InterpolateProvider() {
9487
+ var startSymbol = '{{';
9488
+ var endSymbol = '}}';
9489
+
9490
+ /**
9491
+ * @ngdoc method
9492
+ * @name $interpolateProvider#startSymbol
9493
+ * @description
9494
+ * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.
9495
+ *
9496
+ * @param {string=} value new value to set the starting symbol to.
9497
+ * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
9498
+ */
9499
+ this.startSymbol = function(value){
9500
+ if (value) {
9501
+ startSymbol = value;
9502
+ return this;
9503
+ } else {
9504
+ return startSymbol;
9505
+ }
9506
+ };
9507
+
9508
+ /**
9509
+ * @ngdoc method
9510
+ * @name $interpolateProvider#endSymbol
9511
+ * @description
9512
+ * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
9513
+ *
9514
+ * @param {string=} value new value to set the ending symbol to.
9515
+ * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
9516
+ */
9517
+ this.endSymbol = function(value){
9518
+ if (value) {
9519
+ endSymbol = value;
9520
+ return this;
9521
+ } else {
9522
+ return endSymbol;
9523
+ }
9524
+ };
9525
+
9526
+
9527
+ this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {
9528
+ var startSymbolLength = startSymbol.length,
9529
+ endSymbolLength = endSymbol.length,
9530
+ escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),
9531
+ escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');
9532
+
9533
+ function escape(ch) {
9534
+ return '\\\\\\' + ch;
9535
+ }
9536
+
9537
+ /**
9538
+ * @ngdoc service
9539
+ * @name $interpolate
9540
+ * @kind function
9541
+ *
9542
+ * @requires $parse
9543
+ * @requires $sce
9544
+ *
9545
+ * @description
9546
+ *
9547
+ * Compiles a string with markup into an interpolation function. This service is used by the
9548
+ * HTML {@link ng.$compile $compile} service for data binding. See
9549
+ * {@link ng.$interpolateProvider $interpolateProvider} for configuring the
9550
+ * interpolation markup.
9551
+ *
9552
+ *
9553
+ * ```js
9554
+ * var $interpolate = ...; // injected
9555
+ * var exp = $interpolate('Hello {{name | uppercase}}!');
9556
+ * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!');
9557
+ * ```
9558
+ *
9559
+ * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is
9560
+ * `true`, the interpolation function will return `undefined` unless all embedded expressions
9561
+ * evaluate to a value other than `undefined`.
9562
+ *
9563
+ * ```js
9564
+ * var $interpolate = ...; // injected
9565
+ * var context = {greeting: 'Hello', name: undefined };
9566
+ *
9567
+ * // default "forgiving" mode
9568
+ * var exp = $interpolate('{{greeting}} {{name}}!');
9569
+ * expect(exp(context)).toEqual('Hello !');
9570
+ *
9571
+ * // "allOrNothing" mode
9572
+ * exp = $interpolate('{{greeting}} {{name}}!', false, null, true);
9573
+ * expect(exp(context)).toBeUndefined();
9574
+ * context.name = 'Angular';
9575
+ * expect(exp(context)).toEqual('Hello Angular!');
9576
+ * ```
9577
+ *
9578
+ * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.
9579
+ *
9580
+ * ####Escaped Interpolation
9581
+ * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers
9582
+ * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).
9583
+ * It will be rendered as a regular start/end marker, and will not be interpreted as an expression
9584
+ * or binding.
9585
+ *
9586
+ * This enables web-servers to prevent script injection attacks and defacing attacks, to some
9587
+ * degree, while also enabling code examples to work without relying on the
9588
+ * {@link ng.directive:ngNonBindable ngNonBindable} directive.
9589
+ *
9590
+ * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,
9591
+ * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all
9592
+ * interpolation start/end markers with their escaped counterparts.**
9593
+ *
9594
+ * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered
9595
+ * output when the $interpolate service processes the text. So, for HTML elements interpolated
9596
+ * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter
9597
+ * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,
9598
+ * this is typically useful only when user-data is used in rendering a template from the server, or
9599
+ * when otherwise untrusted data is used by a directive.
9600
+ *
9601
+ * <example>
9602
+ * <file name="index.html">
9603
+ * <div ng-init="username='A user'">
9604
+ * <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\}
9605
+ * </p>
9606
+ * <p><strong>{{username}}</strong> attempts to inject code which will deface the
9607
+ * application, but fails to accomplish their task, because the server has correctly
9608
+ * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)
9609
+ * characters.</p>
9610
+ * <p>Instead, the result of the attempted script injection is visible, and can be removed
9611
+ * from the database by an administrator.</p>
9612
+ * </div>
9613
+ * </file>
9614
+ * </example>
9615
+ *
9616
+ * @param {string} text The text with markup to interpolate.
9617
+ * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
9618
+ * embedded expression in order to return an interpolation function. Strings with no
9619
+ * embedded expression will return null for the interpolation function.
9620
+ * @param {string=} trustedContext when provided, the returned function passes the interpolated
9621
+ * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,
9622
+ * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that
9623
+ * provides Strict Contextual Escaping for details.
9624
+ * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined
9625
+ * unless all embedded expressions evaluate to a value other than `undefined`.
9626
+ * @returns {function(context)} an interpolation function which is used to compute the
9627
+ * interpolated string. The function has these parameters:
9628
+ *
9629
+ * - `context`: evaluation context for all expressions embedded in the interpolated text
9630
+ */
9631
+ function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
9632
+ allOrNothing = !!allOrNothing;
9633
+ var startIndex,
9634
+ endIndex,
9635
+ index = 0,
9636
+ expressions = [],
9637
+ parseFns = [],
9638
+ textLength = text.length,
9639
+ exp,
9640
+ concat = [],
9641
+ expressionPositions = [];
9642
+
9643
+ while(index < textLength) {
9644
+ if ( ((startIndex = text.indexOf(startSymbol, index)) != -1) &&
9645
+ ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1) ) {
9646
+ if (index !== startIndex) {
9647
+ concat.push(unescapeText(text.substring(index, startIndex)));
9648
+ }
9649
+ exp = text.substring(startIndex + startSymbolLength, endIndex);
9650
+ expressions.push(exp);
9651
+ parseFns.push($parse(exp, parseStringifyInterceptor));
9652
+ index = endIndex + endSymbolLength;
9653
+ expressionPositions.push(concat.length);
9654
+ concat.push('');
9655
+ } else {
9656
+ // we did not find an interpolation, so we have to add the remainder to the separators array
9657
+ if (index !== textLength) {
9658
+ concat.push(unescapeText(text.substring(index)));
9659
+ }
9660
+ break;
9661
+ }
9662
+ }
9663
+
9664
+ // Concatenating expressions makes it hard to reason about whether some combination of
9665
+ // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a
9666
+ // single expression be used for iframe[src], object[src], etc., we ensure that the value
9667
+ // that's used is assigned or constructed by some JS code somewhere that is more testable or
9668
+ // make it obvious that you bound the value to some user controlled value. This helps reduce
9669
+ // the load when auditing for XSS issues.
9670
+ if (trustedContext && concat.length > 1) {
9671
+ throw $interpolateMinErr('noconcat',
9672
+ "Error while interpolating: {0}\nStrict Contextual Escaping disallows " +
9673
+ "interpolations that concatenate multiple expressions when a trusted value is " +
9674
+ "required. See http://docs.angularjs.org/api/ng.$sce", text);
9675
+ }
9676
+
9677
+ if (!mustHaveExpression || expressions.length) {
9678
+ var compute = function(values) {
9679
+ for(var i = 0, ii = expressions.length; i < ii; i++) {
9680
+ if (allOrNothing && isUndefined(values[i])) return;
9681
+ concat[expressionPositions[i]] = values[i];
9682
+ }
9683
+ return concat.join('');
9684
+ };
9685
+
9686
+ var getValue = function (value) {
9687
+ return trustedContext ?
9688
+ $sce.getTrusted(trustedContext, value) :
9689
+ $sce.valueOf(value);
9690
+ };
9691
+
9692
+ var stringify = function (value) {
9693
+ if (value == null) { // null || undefined
9694
+ return '';
9695
+ }
9696
+ switch (typeof value) {
9697
+ case 'string': {
9698
+ break;
9699
+ }
9700
+ case 'number': {
9701
+ value = '' + value;
9702
+ break;
9703
+ }
9704
+ default: {
9705
+ value = toJson(value);
9706
+ }
9707
+ }
9708
+
9709
+ return value;
9710
+ };
9711
+
9712
+ return extend(function interpolationFn(context) {
9713
+ var i = 0;
9714
+ var ii = expressions.length;
9715
+ var values = new Array(ii);
9716
+
9717
+ try {
9718
+ for (; i < ii; i++) {
9719
+ values[i] = parseFns[i](context);
9720
+ }
9721
+
9722
+ return compute(values);
9723
+ } catch(err) {
9724
+ var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
9725
+ err.toString());
9726
+ $exceptionHandler(newErr);
9727
+ }
9728
+
9729
+ }, {
9730
+ // all of these properties are undocumented for now
9731
+ exp: text, //just for compatibility with regular watchers created via $watch
9732
+ expressions: expressions,
9733
+ $$watchDelegate: function (scope, listener, objectEquality) {
9734
+ var lastValue;
9735
+ return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
9736
+ var currValue = compute(values);
9737
+ if (isFunction(listener)) {
9738
+ listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);
9739
+ }
9740
+ lastValue = currValue;
9741
+ }, objectEquality);
9742
+ }
9743
+ });
9744
+ }
9745
+
9746
+ function unescapeText(text) {
9747
+ return text.replace(escapedStartRegexp, startSymbol).
9748
+ replace(escapedEndRegexp, endSymbol);
9749
+ }
9750
+
9751
+ function parseStringifyInterceptor(value) {
9752
+ try {
9753
+ return stringify(getValue(value));
9754
+ } catch(err) {
9755
+ var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
9756
+ err.toString());
9757
+ $exceptionHandler(newErr);
9758
+ }
9759
+ }
9760
+ }
9761
+
9762
+
9763
+ /**
9764
+ * @ngdoc method
9765
+ * @name $interpolate#startSymbol
9766
+ * @description
9767
+ * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
9768
+ *
9769
+ * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change
9770
+ * the symbol.
9771
+ *
9772
+ * @returns {string} start symbol.
9773
+ */
9774
+ $interpolate.startSymbol = function() {
9775
+ return startSymbol;
9776
+ };
9777
+
9778
+
9779
+ /**
9780
+ * @ngdoc method
9781
+ * @name $interpolate#endSymbol
9782
+ * @description
9783
+ * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
9784
+ *
9785
+ * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change
9786
+ * the symbol.
9787
+ *
9788
+ * @returns {string} end symbol.
9789
+ */
9790
+ $interpolate.endSymbol = function() {
9791
+ return endSymbol;
9792
+ };
9793
+
9794
+ return $interpolate;
9795
+ }];
9796
+}
9797
+
9798
+function $IntervalProvider() {
9799
+ this.$get = ['$rootScope', '$window', '$q', '$$q',
9800
+ function($rootScope, $window, $q, $$q) {
9801
+ var intervals = {};
9802
+
9803
+
9804
+ /**
9805
+ * @ngdoc service
9806
+ * @name $interval
9807
+ *
9808
+ * @description
9809
+ * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`
9810
+ * milliseconds.
9811
+ *
9812
+ * The return value of registering an interval function is a promise. This promise will be
9813
+ * notified upon each tick of the interval, and will be resolved after `count` iterations, or
9814
+ * run indefinitely if `count` is not defined. The value of the notification will be the
9815
+ * number of iterations that have run.
9816
+ * To cancel an interval, call `$interval.cancel(promise)`.
9817
+ *
9818
+ * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
9819
+ * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
9820
+ * time.
9821
+ *
9822
+ * <div class="alert alert-warning">
9823
+ * **Note**: Intervals created by this service must be explicitly destroyed when you are finished
9824
+ * with them. In particular they are not automatically destroyed when a controller's scope or a
9825
+ * directive's element are destroyed.
9826
+ * You should take this into consideration and make sure to always cancel the interval at the
9827
+ * appropriate moment. See the example below for more details on how and when to do this.
9828
+ * </div>
9829
+ *
9830
+ * @param {function()} fn A function that should be called repeatedly.
9831
+ * @param {number} delay Number of milliseconds between each function call.
9832
+ * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
9833
+ * indefinitely.
9834
+ * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
9835
+ * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
9836
+ * @returns {promise} A promise which will be notified on each iteration.
9837
+ *
9838
+ * @example
9839
+ * <example module="intervalExample">
9840
+ * <file name="index.html">
9841
+ * <script>
9842
+ * angular.module('intervalExample', [])
9843
+ * .controller('ExampleController', ['$scope', '$interval',
9844
+ * function($scope, $interval) {
9845
+ * $scope.format = 'M/d/yy h:mm:ss a';
9846
+ * $scope.blood_1 = 100;
9847
+ * $scope.blood_2 = 120;
9848
+ *
9849
+ * var stop;
9850
+ * $scope.fight = function() {
9851
+ * // Don't start a new fight if we are already fighting
9852
+ * if ( angular.isDefined(stop) ) return;
9853
+ *
9854
+ * stop = $interval(function() {
9855
+ * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {
9856
+ * $scope.blood_1 = $scope.blood_1 - 3;
9857
+ * $scope.blood_2 = $scope.blood_2 - 4;
9858
+ * } else {
9859
+ * $scope.stopFight();
9860
+ * }
9861
+ * }, 100);
9862
+ * };
9863
+ *
9864
+ * $scope.stopFight = function() {
9865
+ * if (angular.isDefined(stop)) {
9866
+ * $interval.cancel(stop);
9867
+ * stop = undefined;
9868
+ * }
9869
+ * };
9870
+ *
9871
+ * $scope.resetFight = function() {
9872
+ * $scope.blood_1 = 100;
9873
+ * $scope.blood_2 = 120;
9874
+ * };
9875
+ *
9876
+ * $scope.$on('$destroy', function() {
9877
+ * // Make sure that the interval is destroyed too
9878
+ * $scope.stopFight();
9879
+ * });
9880
+ * }])
9881
+ * // Register the 'myCurrentTime' directive factory method.
9882
+ * // We inject $interval and dateFilter service since the factory method is DI.
9883
+ * .directive('myCurrentTime', ['$interval', 'dateFilter',
9884
+ * function($interval, dateFilter) {
9885
+ * // return the directive link function. (compile function not needed)
9886
+ * return function(scope, element, attrs) {
9887
+ * var format, // date format
9888
+ * stopTime; // so that we can cancel the time updates
9889
+ *
9890
+ * // used to update the UI
9891
+ * function updateTime() {
9892
+ * element.text(dateFilter(new Date(), format));
9893
+ * }
9894
+ *
9895
+ * // watch the expression, and update the UI on change.
9896
+ * scope.$watch(attrs.myCurrentTime, function(value) {
9897
+ * format = value;
9898
+ * updateTime();
9899
+ * });
9900
+ *
9901
+ * stopTime = $interval(updateTime, 1000);
9902
+ *
9903
+ * // listen on DOM destroy (removal) event, and cancel the next UI update
9904
+ * // to prevent updating time after the DOM element was removed.
9905
+ * element.on('$destroy', function() {
9906
+ * $interval.cancel(stopTime);
9907
+ * });
9908
+ * }
9909
+ * }]);
9910
+ * </script>
9911
+ *
9912
+ * <div>
9913
+ * <div ng-controller="ExampleController">
9914
+ * Date format: <input ng-model="format"> <hr/>
9915
+ * Current time is: <span my-current-time="format"></span>
9916
+ * <hr/>
9917
+ * Blood 1 : <font color='red'>{{blood_1}}</font>
9918
+ * Blood 2 : <font color='red'>{{blood_2}}</font>
9919
+ * <button type="button" data-ng-click="fight()">Fight</button>
9920
+ * <button type="button" data-ng-click="stopFight()">StopFight</button>
9921
+ * <button type="button" data-ng-click="resetFight()">resetFight</button>
9922
+ * </div>
9923
+ * </div>
9924
+ *
9925
+ * </file>
9926
+ * </example>
9927
+ */
9928
+ function interval(fn, delay, count, invokeApply) {
9929
+ var setInterval = $window.setInterval,
9930
+ clearInterval = $window.clearInterval,
9931
+ iteration = 0,
9932
+ skipApply = (isDefined(invokeApply) && !invokeApply),
9933
+ deferred = (skipApply ? $$q : $q).defer(),
9934
+ promise = deferred.promise;
9935
+
9936
+ count = isDefined(count) ? count : 0;
9937
+
9938
+ promise.then(null, null, fn);
9939
+
9940
+ promise.$$intervalId = setInterval(function tick() {
9941
+ deferred.notify(iteration++);
9942
+
9943
+ if (count > 0 && iteration >= count) {
9944
+ deferred.resolve(iteration);
9945
+ clearInterval(promise.$$intervalId);
9946
+ delete intervals[promise.$$intervalId];
9947
+ }
9948
+
9949
+ if (!skipApply) $rootScope.$apply();
9950
+
9951
+ }, delay);
9952
+
9953
+ intervals[promise.$$intervalId] = deferred;
9954
+
9955
+ return promise;
9956
+ }
9957
+
9958
+
9959
+ /**
9960
+ * @ngdoc method
9961
+ * @name $interval#cancel
9962
+ *
9963
+ * @description
9964
+ * Cancels a task associated with the `promise`.
9965
+ *
9966
+ * @param {promise} promise returned by the `$interval` function.
9967
+ * @returns {boolean} Returns `true` if the task was successfully canceled.
9968
+ */
9969
+ interval.cancel = function(promise) {
9970
+ if (promise && promise.$$intervalId in intervals) {
9971
+ intervals[promise.$$intervalId].reject('canceled');
9972
+ $window.clearInterval(promise.$$intervalId);
9973
+ delete intervals[promise.$$intervalId];
9974
+ return true;
9975
+ }
9976
+ return false;
9977
+ };
9978
+
9979
+ return interval;
9980
+ }];
9981
+}
9982
+
9983
+/**
9984
+ * @ngdoc service
9985
+ * @name $locale
9986
+ *
9987
+ * @description
9988
+ * $locale service provides localization rules for various Angular components. As of right now the
9989
+ * only public api is:
9990
+ *
9991
+ * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
9992
+ */
9993
+function $LocaleProvider(){
9994
+ this.$get = function() {
9995
+ return {
9996
+ id: 'en-us',
9997
+
9998
+ NUMBER_FORMATS: {
9999
+ DECIMAL_SEP: '.',
10000
+ GROUP_SEP: ',',
10001
+ PATTERNS: [
10002
+ { // Decimal Pattern
10003
+ minInt: 1,
10004
+ minFrac: 0,
10005
+ maxFrac: 3,
10006
+ posPre: '',
10007
+ posSuf: '',
10008
+ negPre: '-',
10009
+ negSuf: '',
10010
+ gSize: 3,
10011
+ lgSize: 3
10012
+ },{ //Currency Pattern
10013
+ minInt: 1,
10014
+ minFrac: 2,
10015
+ maxFrac: 2,
10016
+ posPre: '\u00A4',
10017
+ posSuf: '',
10018
+ negPre: '(\u00A4',
10019
+ negSuf: ')',
10020
+ gSize: 3,
10021
+ lgSize: 3
10022
+ }
10023
+ ],
10024
+ CURRENCY_SYM: '$'
10025
+ },
10026
+
10027
+ DATETIME_FORMATS: {
10028
+ MONTH:
10029
+ 'January,February,March,April,May,June,July,August,September,October,November,December'
10030
+ .split(','),
10031
+ SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),
10032
+ DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),
10033
+ SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),
10034
+ AMPMS: ['AM','PM'],
10035
+ medium: 'MMM d, y h:mm:ss a',
10036
+ short: 'M/d/yy h:mm a',
10037
+ fullDate: 'EEEE, MMMM d, y',
10038
+ longDate: 'MMMM d, y',
10039
+ mediumDate: 'MMM d, y',
10040
+ shortDate: 'M/d/yy',
10041
+ mediumTime: 'h:mm:ss a',
10042
+ shortTime: 'h:mm a'
10043
+ },
10044
+
10045
+ pluralCat: function(num) {
10046
+ if (num === 1) {
10047
+ return 'one';
10048
+ }
10049
+ return 'other';
10050
+ }
10051
+ };
10052
+ };
10053
+}
10054
+
10055
+var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
10056
+ DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
10057
+var $locationMinErr = minErr('$location');
10058
+
10059
+
10060
+/**
10061
+ * Encode path using encodeUriSegment, ignoring forward slashes
10062
+ *
10063
+ * @param {string} path Path to encode
10064
+ * @returns {string}
10065
+ */
10066
+function encodePath(path) {
10067
+ var segments = path.split('/'),
10068
+ i = segments.length;
10069
+
10070
+ while (i--) {
10071
+ segments[i] = encodeUriSegment(segments[i]);
10072
+ }
10073
+
10074
+ return segments.join('/');
10075
+}
10076
+
10077
+function parseAbsoluteUrl(absoluteUrl, locationObj, appBase) {
10078
+ var parsedUrl = urlResolve(absoluteUrl, appBase);
10079
+
10080
+ locationObj.$$protocol = parsedUrl.protocol;
10081
+ locationObj.$$host = parsedUrl.hostname;
10082
+ locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
10083
+}
10084
+
10085
+
10086
+function parseAppUrl(relativeUrl, locationObj, appBase) {
10087
+ var prefixed = (relativeUrl.charAt(0) !== '/');
10088
+ if (prefixed) {
10089
+ relativeUrl = '/' + relativeUrl;
10090
+ }
10091
+ var match = urlResolve(relativeUrl, appBase);
10092
+ locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?
10093
+ match.pathname.substring(1) : match.pathname);
10094
+ locationObj.$$search = parseKeyValue(match.search);
10095
+ locationObj.$$hash = decodeURIComponent(match.hash);
10096
+
10097
+ // make sure path starts with '/';
10098
+ if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {
10099
+ locationObj.$$path = '/' + locationObj.$$path;
10100
+ }
10101
+}
10102
+
10103
+
10104
+/**
10105
+ *
10106
+ * @param {string} begin
10107
+ * @param {string} whole
10108
+ * @returns {string} returns text from whole after begin or undefined if it does not begin with
10109
+ * expected string.
10110
+ */
10111
+function beginsWith(begin, whole) {
10112
+ if (whole.indexOf(begin) === 0) {
10113
+ return whole.substr(begin.length);
10114
+ }
10115
+}
10116
+
10117
+
10118
+function stripHash(url) {
10119
+ var index = url.indexOf('#');
10120
+ return index == -1 ? url : url.substr(0, index);
10121
+}
10122
+
10123
+
10124
+function stripFile(url) {
10125
+ return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
10126
+}
10127
+
10128
+/* return the server only (scheme://host:port) */
10129
+function serverBase(url) {
10130
+ return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
10131
+}
10132
+
10133
+
10134
+/**
10135
+ * LocationHtml5Url represents an url
10136
+ * This object is exposed as $location service when HTML5 mode is enabled and supported
10137
+ *
10138
+ * @constructor
10139
+ * @param {string} appBase application base URL
10140
+ * @param {string} basePrefix url path prefix
10141
+ */
10142
+function LocationHtml5Url(appBase, basePrefix) {
10143
+ this.$$html5 = true;
10144
+ basePrefix = basePrefix || '';
10145
+ var appBaseNoFile = stripFile(appBase);
10146
+ parseAbsoluteUrl(appBase, this, appBase);
10147
+
10148
+
10149
+ /**
10150
+ * Parse given html5 (regular) url string into properties
10151
+ * @param {string} newAbsoluteUrl HTML5 url
10152
+ * @private
10153
+ */
10154
+ this.$$parse = function(url) {
10155
+ var pathUrl = beginsWith(appBaseNoFile, url);
10156
+ if (!isString(pathUrl)) {
10157
+ throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url,
10158
+ appBaseNoFile);
10159
+ }
10160
+
10161
+ parseAppUrl(pathUrl, this, appBase);
10162
+
10163
+ if (!this.$$path) {
10164
+ this.$$path = '/';
10165
+ }
10166
+
10167
+ this.$$compose();
10168
+ };
10169
+
10170
+ /**
10171
+ * Compose url and update `absUrl` property
10172
+ * @private
10173
+ */
10174
+ this.$$compose = function() {
10175
+ var search = toKeyValue(this.$$search),
10176
+ hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
10177
+
10178
+ this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
10179
+ this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
10180
+ };
10181
+
10182
+ this.$$parseLinkUrl = function(url, relHref) {
10183
+ if (relHref && relHref[0] === '#') {
10184
+ // special case for links to hash fragments:
10185
+ // keep the old url and only replace the hash fragment
10186
+ this.hash(relHref.slice(1));
10187
+ return true;
10188
+ }
10189
+ var appUrl, prevAppUrl;
10190
+ var rewrittenUrl;
10191
+
10192
+ if ( (appUrl = beginsWith(appBase, url)) !== undefined ) {
10193
+ prevAppUrl = appUrl;
10194
+ if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) {
10195
+ rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
10196
+ } else {
10197
+ rewrittenUrl = appBase + prevAppUrl;
10198
+ }
10199
+ } else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) {
10200
+ rewrittenUrl = appBaseNoFile + appUrl;
10201
+ } else if (appBaseNoFile == url + '/') {
10202
+ rewrittenUrl = appBaseNoFile;
10203
+ }
10204
+ if (rewrittenUrl) {
10205
+ this.$$parse(rewrittenUrl);
10206
+ }
10207
+ return !!rewrittenUrl;
10208
+ };
10209
+}
10210
+
10211
+
10212
+/**
10213
+ * LocationHashbangUrl represents url
10214
+ * This object is exposed as $location service when developer doesn't opt into html5 mode.
10215
+ * It also serves as the base class for html5 mode fallback on legacy browsers.
10216
+ *
10217
+ * @constructor
10218
+ * @param {string} appBase application base URL
10219
+ * @param {string} hashPrefix hashbang prefix
10220
+ */
10221
+function LocationHashbangUrl(appBase, hashPrefix) {
10222
+ var appBaseNoFile = stripFile(appBase);
10223
+
10224
+ parseAbsoluteUrl(appBase, this, appBase);
10225
+
10226
+
10227
+ /**
10228
+ * Parse given hashbang url into properties
10229
+ * @param {string} url Hashbang url
10230
+ * @private
10231
+ */
10232
+ this.$$parse = function(url) {
10233
+ var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
10234
+ var withoutHashUrl = withoutBaseUrl.charAt(0) == '#'
10235
+ ? beginsWith(hashPrefix, withoutBaseUrl)
10236
+ : (this.$$html5)
10237
+ ? withoutBaseUrl
10238
+ : '';
10239
+
10240
+ if (!isString(withoutHashUrl)) {
10241
+ throw $locationMinErr('ihshprfx', 'Invalid url "{0}", missing hash prefix "{1}".', url,
10242
+ hashPrefix);
10243
+ }
10244
+ parseAppUrl(withoutHashUrl, this, appBase);
10245
+
10246
+ this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);
10247
+
10248
+ this.$$compose();
10249
+
10250
+ /*
10251
+ * In Windows, on an anchor node on documents loaded from
10252
+ * the filesystem, the browser will return a pathname
10253
+ * prefixed with the drive name ('/C:/path') when a
10254
+ * pathname without a drive is set:
10255
+ * * a.setAttribute('href', '/foo')
10256
+ * * a.pathname === '/C:/foo' //true
10257
+ *
10258
+ * Inside of Angular, we're always using pathnames that
10259
+ * do not include drive names for routing.
10260
+ */
10261
+ function removeWindowsDriveName (path, url, base) {
10262
+ /*
10263
+ Matches paths for file protocol on windows,
10264
+ such as /C:/foo/bar, and captures only /foo/bar.
10265
+ */
10266
+ var windowsFilePathExp = /^\/[A-Z]:(\/.*)/;
10267
+
10268
+ var firstPathSegmentMatch;
10269
+
10270
+ //Get the relative path from the input URL.
10271
+ if (url.indexOf(base) === 0) {
10272
+ url = url.replace(base, '');
10273
+ }
10274
+
10275
+ // The input URL intentionally contains a first path segment that ends with a colon.
10276
+ if (windowsFilePathExp.exec(url)) {
10277
+ return path;
10278
+ }
10279
+
10280
+ firstPathSegmentMatch = windowsFilePathExp.exec(path);
10281
+ return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;
10282
+ }
10283
+ };
10284
+
10285
+ /**
10286
+ * Compose hashbang url and update `absUrl` property
10287
+ * @private
10288
+ */
10289
+ this.$$compose = function() {
10290
+ var search = toKeyValue(this.$$search),
10291
+ hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
10292
+
10293
+ this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
10294
+ this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
10295
+ };
10296
+
10297
+ this.$$parseLinkUrl = function(url, relHref) {
10298
+ if(stripHash(appBase) == stripHash(url)) {
10299
+ this.$$parse(url);
10300
+ return true;
10301
+ }
10302
+ return false;
10303
+ };
10304
+}
10305
+
10306
+
10307
+/**
10308
+ * LocationHashbangUrl represents url
10309
+ * This object is exposed as $location service when html5 history api is enabled but the browser
10310
+ * does not support it.
10311
+ *
10312
+ * @constructor
10313
+ * @param {string} appBase application base URL
10314
+ * @param {string} hashPrefix hashbang prefix
10315
+ */
10316
+function LocationHashbangInHtml5Url(appBase, hashPrefix) {
10317
+ this.$$html5 = true;
10318
+ LocationHashbangUrl.apply(this, arguments);
10319
+
10320
+ var appBaseNoFile = stripFile(appBase);
10321
+
10322
+ this.$$parseLinkUrl = function(url, relHref) {
10323
+ if (relHref && relHref[0] === '#') {
10324
+ // special case for links to hash fragments:
10325
+ // keep the old url and only replace the hash fragment
10326
+ this.hash(relHref.slice(1));
10327
+ return true;
10328
+ }
10329
+
10330
+ var rewrittenUrl;
10331
+ var appUrl;
10332
+
10333
+ if ( appBase == stripHash(url) ) {
10334
+ rewrittenUrl = url;
10335
+ } else if ( (appUrl = beginsWith(appBaseNoFile, url)) ) {
10336
+ rewrittenUrl = appBase + hashPrefix + appUrl;
10337
+ } else if ( appBaseNoFile === url + '/') {
10338
+ rewrittenUrl = appBaseNoFile;
10339
+ }
10340
+ if (rewrittenUrl) {
10341
+ this.$$parse(rewrittenUrl);
10342
+ }
10343
+ return !!rewrittenUrl;
10344
+ };
10345
+
10346
+ this.$$compose = function() {
10347
+ var search = toKeyValue(this.$$search),
10348
+ hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
10349
+
10350
+ this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
10351
+ // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#'
10352
+ this.$$absUrl = appBase + hashPrefix + this.$$url;
10353
+ };
10354
+
10355
+}
10356
+
10357
+
10358
+var locationPrototype = {
10359
+
10360
+ /**
10361
+ * Are we in html5 mode?
10362
+ * @private
10363
+ */
10364
+ $$html5: false,
10365
+
10366
+ /**
10367
+ * Has any change been replacing?
10368
+ * @private
10369
+ */
10370
+ $$replace: false,
10371
+
10372
+ /**
10373
+ * @ngdoc method
10374
+ * @name $location#absUrl
10375
+ *
10376
+ * @description
10377
+ * This method is getter only.
10378
+ *
10379
+ * Return full url representation with all segments encoded according to rules specified in
10380
+ * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
10381
+ *
10382
+ * @return {string} full url
10383
+ */
10384
+ absUrl: locationGetter('$$absUrl'),
10385
+
10386
+ /**
10387
+ * @ngdoc method
10388
+ * @name $location#url
10389
+ *
10390
+ * @description
10391
+ * This method is getter / setter.
10392
+ *
10393
+ * Return url (e.g. `/path?a=b#hash`) when called without any parameter.
10394
+ *
10395
+ * Change path, search and hash, when called with parameter and return `$location`.
10396
+ *
10397
+ * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
10398
+ * @return {string} url
10399
+ */
10400
+ url: function(url) {
10401
+ if (isUndefined(url))
10402
+ return this.$$url;
10403
+
10404
+ var match = PATH_MATCH.exec(url);
10405
+ if (match[1]) this.path(decodeURIComponent(match[1]));
10406
+ if (match[2] || match[1]) this.search(match[3] || '');
10407
+ this.hash(match[5] || '');
10408
+
10409
+ return this;
10410
+ },
10411
+
10412
+ /**
10413
+ * @ngdoc method
10414
+ * @name $location#protocol
10415
+ *
10416
+ * @description
10417
+ * This method is getter only.
10418
+ *
10419
+ * Return protocol of current url.
10420
+ *
10421
+ * @return {string} protocol of current url
10422
+ */
10423
+ protocol: locationGetter('$$protocol'),
10424
+
10425
+ /**
10426
+ * @ngdoc method
10427
+ * @name $location#host
10428
+ *
10429
+ * @description
10430
+ * This method is getter only.
10431
+ *
10432
+ * Return host of current url.
10433
+ *
10434
+ * @return {string} host of current url.
10435
+ */
10436
+ host: locationGetter('$$host'),
10437
+
10438
+ /**
10439
+ * @ngdoc method
10440
+ * @name $location#port
10441
+ *
10442
+ * @description
10443
+ * This method is getter only.
10444
+ *
10445
+ * Return port of current url.
10446
+ *
10447
+ * @return {Number} port
10448
+ */
10449
+ port: locationGetter('$$port'),
10450
+
10451
+ /**
10452
+ * @ngdoc method
10453
+ * @name $location#path
10454
+ *
10455
+ * @description
10456
+ * This method is getter / setter.
10457
+ *
10458
+ * Return path of current url when called without any parameter.
10459
+ *
10460
+ * Change path when called with parameter and return `$location`.
10461
+ *
10462
+ * Note: Path should always begin with forward slash (/), this method will add the forward slash
10463
+ * if it is missing.
10464
+ *
10465
+ * @param {(string|number)=} path New path
10466
+ * @return {string} path
10467
+ */
10468
+ path: locationGetterSetter('$$path', function(path) {
10469
+ path = path !== null ? path.toString() : '';
10470
+ return path.charAt(0) == '/' ? path : '/' + path;
10471
+ }),
10472
+
10473
+ /**
10474
+ * @ngdoc method
10475
+ * @name $location#search
10476
+ *
10477
+ * @description
10478
+ * This method is getter / setter.
10479
+ *
10480
+ * Return search part (as object) of current url when called without any parameter.
10481
+ *
10482
+ * Change search part when called with parameter and return `$location`.
10483
+ *
10484
+ *
10485
+ * ```js
10486
+ * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
10487
+ * var searchObject = $location.search();
10488
+ * // => {foo: 'bar', baz: 'xoxo'}
10489
+ *
10490
+ *
10491
+ * // set foo to 'yipee'
10492
+ * $location.search('foo', 'yipee');
10493
+ * // => $location
10494
+ * ```
10495
+ *
10496
+ * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or
10497
+ * hash object.
10498
+ *
10499
+ * When called with a single argument the method acts as a setter, setting the `search` component
10500
+ * of `$location` to the specified value.
10501
+ *
10502
+ * If the argument is a hash object containing an array of values, these values will be encoded
10503
+ * as duplicate search parameters in the url.
10504
+ *
10505
+ * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
10506
+ * will override only a single search property.
10507
+ *
10508
+ * If `paramValue` is an array, it will override the property of the `search` component of
10509
+ * `$location` specified via the first argument.
10510
+ *
10511
+ * If `paramValue` is `null`, the property specified via the first argument will be deleted.
10512
+ *
10513
+ * If `paramValue` is `true`, the property specified via the first argument will be added with no
10514
+ * value nor trailing equal sign.
10515
+ *
10516
+ * @return {Object} If called with no arguments returns the parsed `search` object. If called with
10517
+ * one or more arguments returns `$location` object itself.
10518
+ */
10519
+ search: function(search, paramValue) {
10520
+ switch (arguments.length) {
10521
+ case 0:
10522
+ return this.$$search;
10523
+ case 1:
10524
+ if (isString(search) || isNumber(search)) {
10525
+ search = search.toString();
10526
+ this.$$search = parseKeyValue(search);
10527
+ } else if (isObject(search)) {
10528
+ // remove object undefined or null properties
10529
+ forEach(search, function(value, key) {
10530
+ if (value == null) delete search[key];
10531
+ });
10532
+
10533
+ this.$$search = search;
10534
+ } else {
10535
+ throw $locationMinErr('isrcharg',
10536
+ 'The first argument of the `$location#search()` call must be a string or an object.');
10537
+ }
10538
+ break;
10539
+ default:
10540
+ if (isUndefined(paramValue) || paramValue === null) {
10541
+ delete this.$$search[search];
10542
+ } else {
10543
+ this.$$search[search] = paramValue;
10544
+ }
10545
+ }
10546
+
10547
+ this.$$compose();
10548
+ return this;
10549
+ },
10550
+
10551
+ /**
10552
+ * @ngdoc method
10553
+ * @name $location#hash
10554
+ *
10555
+ * @description
10556
+ * This method is getter / setter.
10557
+ *
10558
+ * Return hash fragment when called without any parameter.
10559
+ *
10560
+ * Change hash fragment when called with parameter and return `$location`.
10561
+ *
10562
+ * @param {(string|number)=} hash New hash fragment
10563
+ * @return {string} hash
10564
+ */
10565
+ hash: locationGetterSetter('$$hash', function(hash) {
10566
+ return hash !== null ? hash.toString() : '';
10567
+ }),
10568
+
10569
+ /**
10570
+ * @ngdoc method
10571
+ * @name $location#replace
10572
+ *
10573
+ * @description
10574
+ * If called, all changes to $location during current `$digest` will be replacing current history
10575
+ * record, instead of adding new one.
10576
+ */
10577
+ replace: function() {
10578
+ this.$$replace = true;
10579
+ return this;
10580
+ }
10581
+};
10582
+
10583
+forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function (Location) {
10584
+ Location.prototype = Object.create(locationPrototype);
10585
+
10586
+ /**
10587
+ * @ngdoc method
10588
+ * @name $location#state
10589
+ *
10590
+ * @description
10591
+ * This method is getter / setter.
10592
+ *
10593
+ * Return the history state object when called without any parameter.
10594
+ *
10595
+ * Change the history state object when called with one parameter and return `$location`.
10596
+ * The state object is later passed to `pushState` or `replaceState`.
10597
+ *
10598
+ * NOTE: This method is supported only in HTML5 mode and only in browsers supporting
10599
+ * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support
10600
+ * older browsers (like IE9 or Android < 4.0), don't use this method.
10601
+ *
10602
+ * @param {object=} state State object for pushState or replaceState
10603
+ * @return {object} state
10604
+ */
10605
+ Location.prototype.state = function(state) {
10606
+ if (!arguments.length)
10607
+ return this.$$state;
10608
+
10609
+ if (Location !== LocationHtml5Url || !this.$$html5) {
10610
+ throw $locationMinErr('nostate', 'History API state support is available only ' +
10611
+ 'in HTML5 mode and only in browsers supporting HTML5 History API');
10612
+ }
10613
+ // The user might modify `stateObject` after invoking `$location.state(stateObject)`
10614
+ // but we're changing the $$state reference to $browser.state() during the $digest
10615
+ // so the modification window is narrow.
10616
+ this.$$state = isUndefined(state) ? null : state;
10617
+
10618
+ return this;
10619
+ };
10620
+});
10621
+
10622
+
10623
+function locationGetter(property) {
10624
+ return function() {
10625
+ return this[property];
10626
+ };
10627
+}
10628
+
10629
+
10630
+function locationGetterSetter(property, preprocess) {
10631
+ return function(value) {
10632
+ if (isUndefined(value))
10633
+ return this[property];
10634
+
10635
+ this[property] = preprocess(value);
10636
+ this.$$compose();
10637
+
10638
+ return this;
10639
+ };
10640
+}
10641
+
10642
+
10643
+/**
10644
+ * @ngdoc service
10645
+ * @name $location
10646
+ *
10647
+ * @requires $rootElement
10648
+ *
10649
+ * @description
10650
+ * The $location service parses the URL in the browser address bar (based on the
10651
+ * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL
10652
+ * available to your application. Changes to the URL in the address bar are reflected into
10653
+ * $location service and changes to $location are reflected into the browser address bar.
10654
+ *
10655
+ * **The $location service:**
10656
+ *
10657
+ * - Exposes the current URL in the browser address bar, so you can
10658
+ * - Watch and observe the URL.
10659
+ * - Change the URL.
10660
+ * - Synchronizes the URL with the browser when the user
10661
+ * - Changes the address bar.
10662
+ * - Clicks the back or forward button (or clicks a History link).
10663
+ * - Clicks on a link.
10664
+ * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
10665
+ *
10666
+ * For more information see {@link guide/$location Developer Guide: Using $location}
10667
+ */
10668
+
10669
+/**
10670
+ * @ngdoc provider
10671
+ * @name $locationProvider
10672
+ * @description
10673
+ * Use the `$locationProvider` to configure how the application deep linking paths are stored.
10674
+ */
10675
+function $LocationProvider(){
10676
+ var hashPrefix = '',
10677
+ html5Mode = {
10678
+ enabled: false,
10679
+ requireBase: true,
10680
+ rewriteLinks: true
10681
+ };
10682
+
10683
+ /**
10684
+ * @ngdoc method
10685
+ * @name $locationProvider#hashPrefix
10686
+ * @description
10687
+ * @param {string=} prefix Prefix for hash part (containing path and search)
10688
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
10689
+ */
10690
+ this.hashPrefix = function(prefix) {
10691
+ if (isDefined(prefix)) {
10692
+ hashPrefix = prefix;
10693
+ return this;
10694
+ } else {
10695
+ return hashPrefix;
10696
+ }
10697
+ };
10698
+
10699
+ /**
10700
+ * @ngdoc method
10701
+ * @name $locationProvider#html5Mode
10702
+ * @description
10703
+ * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.
10704
+ * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported
10705
+ * properties:
10706
+ * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to
10707
+ * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not
10708
+ * support `pushState`.
10709
+ * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies
10710
+ * whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are
10711
+ * true, and a base tag is not present, an error will be thrown when `$location` is injected.
10712
+ * See the {@link guide/$location $location guide for more information}
10713
+ * - **rewriteLinks** - `{boolean}` - (default: `false`) When html5Mode is enabled, disables
10714
+ * url rewriting for relative linksTurns off url rewriting for relative links.
10715
+ *
10716
+ * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter
10717
+ */
10718
+ this.html5Mode = function(mode) {
10719
+ if (isBoolean(mode)) {
10720
+ html5Mode.enabled = mode;
10721
+ return this;
10722
+ } else if (isObject(mode)) {
10723
+
10724
+ if (isBoolean(mode.enabled)) {
10725
+ html5Mode.enabled = mode.enabled;
10726
+ }
10727
+
10728
+ if (isBoolean(mode.requireBase)) {
10729
+ html5Mode.requireBase = mode.requireBase;
10730
+ }
10731
+
10732
+ if (isBoolean(mode.rewriteLinks)) {
10733
+ html5Mode.rewriteLinks = mode.rewriteLinks;
10734
+ }
10735
+
10736
+ return this;
10737
+ } else {
10738
+ return html5Mode;
10739
+ }
10740
+ };
10741
+
10742
+ /**
10743
+ * @ngdoc event
10744
+ * @name $location#$locationChangeStart
10745
+ * @eventType broadcast on root scope
10746
+ * @description
10747
+ * Broadcasted before a URL will change.
10748
+ *
10749
+ * This change can be prevented by calling
10750
+ * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
10751
+ * details about event object. Upon successful change
10752
+ * {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.
10753
+ *
10754
+ * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
10755
+ * the browser supports the HTML5 History API.
10756
+ *
10757
+ * @param {Object} angularEvent Synthetic event object.
10758
+ * @param {string} newUrl New URL
10759
+ * @param {string=} oldUrl URL that was before it was changed.
10760
+ * @param {string=} newState New history state object
10761
+ * @param {string=} oldState History state object that was before it was changed.
10762
+ */
10763
+
10764
+ /**
10765
+ * @ngdoc event
10766
+ * @name $location#$locationChangeSuccess
10767
+ * @eventType broadcast on root scope
10768
+ * @description
10769
+ * Broadcasted after a URL was changed.
10770
+ *
10771
+ * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
10772
+ * the browser supports the HTML5 History API.
10773
+ *
10774
+ * @param {Object} angularEvent Synthetic event object.
10775
+ * @param {string} newUrl New URL
10776
+ * @param {string=} oldUrl URL that was before it was changed.
10777
+ * @param {string=} newState New history state object
10778
+ * @param {string=} oldState History state object that was before it was changed.
10779
+ */
10780
+
10781
+ this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',
10782
+ function( $rootScope, $browser, $sniffer, $rootElement) {
10783
+ var $location,
10784
+ LocationMode,
10785
+ baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
10786
+ initialUrl = $browser.url(),
10787
+ appBase;
10788
+
10789
+ if (html5Mode.enabled) {
10790
+ if (!baseHref && html5Mode.requireBase) {
10791
+ throw $locationMinErr('nobase',
10792
+ "$location in HTML5 mode requires a <base> tag to be present!");
10793
+ }
10794
+ appBase = serverBase(initialUrl) + (baseHref || '/');
10795
+ LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
10796
+ } else {
10797
+ appBase = stripHash(initialUrl);
10798
+ LocationMode = LocationHashbangUrl;
10799
+ }
10800
+ $location = new LocationMode(appBase, '#' + hashPrefix);
10801
+ $location.$$parseLinkUrl(initialUrl, initialUrl);
10802
+
10803
+ $location.$$state = $browser.state();
10804
+
10805
+ var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i;
10806
+
10807
+ function setBrowserUrlWithFallback(url, replace, state) {
10808
+ var oldUrl = $location.url();
10809
+ var oldState = $location.$$state;
10810
+ try {
10811
+ $browser.url(url, replace, state);
10812
+
10813
+ // Make sure $location.state() returns referentially identical (not just deeply equal)
10814
+ // state object; this makes possible quick checking if the state changed in the digest
10815
+ // loop. Checking deep equality would be too expensive.
10816
+ $location.$$state = $browser.state();
10817
+ } catch (e) {
10818
+ // Restore old values if pushState fails
10819
+ $location.url(oldUrl);
10820
+ $location.$$state = oldState;
10821
+
10822
+ throw e;
10823
+ }
10824
+ }
10825
+
10826
+ $rootElement.on('click', function(event) {
10827
+ // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
10828
+ // currently we open nice url link and redirect then
10829
+
10830
+ if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.which == 2) return;
10831
+
10832
+ var elm = jqLite(event.target);
10833
+
10834
+ // traverse the DOM up to find first A tag
10835
+ while (nodeName_(elm[0]) !== 'a') {
10836
+ // ignore rewriting if no A tag (reached root element, or no parent - removed from document)
10837
+ if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
10838
+ }
10839
+
10840
+ var absHref = elm.prop('href');
10841
+ // get the actual href attribute - see
10842
+ // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
10843
+ var relHref = elm.attr('href') || elm.attr('xlink:href');
10844
+
10845
+ if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {
10846
+ // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during
10847
+ // an animation.
10848
+ absHref = urlResolve(absHref.animVal).href;
10849
+ }
10850
+
10851
+ // Ignore when url is started with javascript: or mailto:
10852
+ if (IGNORE_URI_REGEXP.test(absHref)) return;
10853
+
10854
+ if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {
10855
+ if ($location.$$parseLinkUrl(absHref, relHref)) {
10856
+ // We do a preventDefault for all urls that are part of the angular application,
10857
+ // in html5mode and also without, so that we are able to abort navigation without
10858
+ // getting double entries in the location history.
10859
+ event.preventDefault();
10860
+ // update location manually
10861
+ if ($location.absUrl() != $browser.url()) {
10862
+ $rootScope.$apply();
10863
+ // hack to work around FF6 bug 684208 when scenario runner clicks on links
10864
+ window.angular['ff-684208-preventDefault'] = true;
10865
+ }
10866
+ }
10867
+ }
10868
+ });
10869
+
10870
+
10871
+ // rewrite hashbang url <> html5 url
10872
+ if ($location.absUrl() != initialUrl) {
10873
+ $browser.url($location.absUrl(), true);
10874
+ }
10875
+
10876
+ var initializing = true;
10877
+
10878
+ // update $location when $browser url changes
10879
+ $browser.onUrlChange(function(newUrl, newState) {
10880
+ $rootScope.$evalAsync(function() {
10881
+ var oldUrl = $location.absUrl();
10882
+ var oldState = $location.$$state;
10883
+
10884
+ $location.$$parse(newUrl);
10885
+ $location.$$state = newState;
10886
+ if ($rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
10887
+ newState, oldState).defaultPrevented) {
10888
+ $location.$$parse(oldUrl);
10889
+ $location.$$state = oldState;
10890
+ setBrowserUrlWithFallback(oldUrl, false, oldState);
10891
+ } else {
10892
+ initializing = false;
10893
+ afterLocationChange(oldUrl, oldState);
10894
+ }
10895
+ });
10896
+ if (!$rootScope.$$phase) $rootScope.$digest();
10897
+ });
10898
+
10899
+ // update browser
10900
+ $rootScope.$watch(function $locationWatch() {
10901
+ var oldUrl = $browser.url();
10902
+ var oldState = $browser.state();
10903
+ var currentReplace = $location.$$replace;
10904
+
10905
+ if (initializing || oldUrl !== $location.absUrl() ||
10906
+ ($location.$$html5 && $sniffer.history && oldState !== $location.$$state)) {
10907
+ initializing = false;
10908
+
10909
+ $rootScope.$evalAsync(function() {
10910
+ if ($rootScope.$broadcast('$locationChangeStart', $location.absUrl(), oldUrl,
10911
+ $location.$$state, oldState).defaultPrevented) {
10912
+ $location.$$parse(oldUrl);
10913
+ $location.$$state = oldState;
10914
+ } else {
10915
+ setBrowserUrlWithFallback($location.absUrl(), currentReplace,
10916
+ oldState === $location.$$state ? null : $location.$$state);
10917
+ afterLocationChange(oldUrl, oldState);
10918
+ }
10919
+ });
10920
+ }
10921
+
10922
+ $location.$$replace = false;
10923
+
10924
+ // we don't need to return anything because $evalAsync will make the digest loop dirty when
10925
+ // there is a change
10926
+ });
10927
+
10928
+ return $location;
10929
+
10930
+ function afterLocationChange(oldUrl, oldState) {
10931
+ $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,
10932
+ $location.$$state, oldState);
10933
+ }
10934
+}];
10935
+}
10936
+
10937
+/**
10938
+ * @ngdoc service
10939
+ * @name $log
10940
+ * @requires $window
10941
+ *
10942
+ * @description
10943
+ * Simple service for logging. Default implementation safely writes the message
10944
+ * into the browser's console (if present).
10945
+ *
10946
+ * The main purpose of this service is to simplify debugging and troubleshooting.
10947
+ *
10948
+ * The default is to log `debug` messages. You can use
10949
+ * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
10950
+ *
10951
+ * @example
10952
+ <example module="logExample">
10953
+ <file name="script.js">
10954
+ angular.module('logExample', [])
10955
+ .controller('LogController', ['$scope', '$log', function($scope, $log) {
10956
+ $scope.$log = $log;
10957
+ $scope.message = 'Hello World!';
10958
+ }]);
10959
+ </file>
10960
+ <file name="index.html">
10961
+ <div ng-controller="LogController">
10962
+ <p>Reload this page with open console, enter text and hit the log button...</p>
10963
+ Message:
10964
+ <input type="text" ng-model="message"/>
10965
+ <button ng-click="$log.log(message)">log</button>
10966
+ <button ng-click="$log.warn(message)">warn</button>
10967
+ <button ng-click="$log.info(message)">info</button>
10968
+ <button ng-click="$log.error(message)">error</button>
10969
+ </div>
10970
+ </file>
10971
+ </example>
10972
+ */
10973
+
10974
+/**
10975
+ * @ngdoc provider
10976
+ * @name $logProvider
10977
+ * @description
10978
+ * Use the `$logProvider` to configure how the application logs messages
10979
+ */
10980
+function $LogProvider(){
10981
+ var debug = true,
10982
+ self = this;
10983
+
10984
+ /**
10985
+ * @ngdoc method
10986
+ * @name $logProvider#debugEnabled
10987
+ * @description
10988
+ * @param {boolean=} flag enable or disable debug level messages
10989
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
10990
+ */
10991
+ this.debugEnabled = function(flag) {
10992
+ if (isDefined(flag)) {
10993
+ debug = flag;
10994
+ return this;
10995
+ } else {
10996
+ return debug;
10997
+ }
10998
+ };
10999
+
11000
+ this.$get = ['$window', function($window){
11001
+ return {
11002
+ /**
11003
+ * @ngdoc method
11004
+ * @name $log#log
11005
+ *
11006
+ * @description
11007
+ * Write a log message
11008
+ */
11009
+ log: consoleLog('log'),
11010
+
11011
+ /**
11012
+ * @ngdoc method
11013
+ * @name $log#info
11014
+ *
11015
+ * @description
11016
+ * Write an information message
11017
+ */
11018
+ info: consoleLog('info'),
11019
+
11020
+ /**
11021
+ * @ngdoc method
11022
+ * @name $log#warn
11023
+ *
11024
+ * @description
11025
+ * Write a warning message
11026
+ */
11027
+ warn: consoleLog('warn'),
11028
+
11029
+ /**
11030
+ * @ngdoc method
11031
+ * @name $log#error
11032
+ *
11033
+ * @description
11034
+ * Write an error message
11035
+ */
11036
+ error: consoleLog('error'),
11037
+
11038
+ /**
11039
+ * @ngdoc method
11040
+ * @name $log#debug
11041
+ *
11042
+ * @description
11043
+ * Write a debug message
11044
+ */
11045
+ debug: (function () {
11046
+ var fn = consoleLog('debug');
11047
+
11048
+ return function() {
11049
+ if (debug) {
11050
+ fn.apply(self, arguments);
11051
+ }
11052
+ };
11053
+ }())
11054
+ };
11055
+
11056
+ function formatError(arg) {
11057
+ if (arg instanceof Error) {
11058
+ if (arg.stack) {
11059
+ arg = (arg.message && arg.stack.indexOf(arg.message) === -1)
11060
+ ? 'Error: ' + arg.message + '\n' + arg.stack
11061
+ : arg.stack;
11062
+ } else if (arg.sourceURL) {
11063
+ arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line;
11064
+ }
11065
+ }
11066
+ return arg;
11067
+ }
11068
+
11069
+ function consoleLog(type) {
11070
+ var console = $window.console || {},
11071
+ logFn = console[type] || console.log || noop,
11072
+ hasApply = false;
11073
+
11074
+ // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
11075
+ // The reason behind this is that console.log has type "object" in IE8...
11076
+ try {
11077
+ hasApply = !!logFn.apply;
11078
+ } catch (e) {}
11079
+
11080
+ if (hasApply) {
11081
+ return function() {
11082
+ var args = [];
11083
+ forEach(arguments, function(arg) {
11084
+ args.push(formatError(arg));
11085
+ });
11086
+ return logFn.apply(console, args);
11087
+ };
11088
+ }
11089
+
11090
+ // we are IE which either doesn't have window.console => this is noop and we do nothing,
11091
+ // or we are IE where console.log doesn't have apply so we log at least first 2 args
11092
+ return function(arg1, arg2) {
11093
+ logFn(arg1, arg2 == null ? '' : arg2);
11094
+ };
11095
+ }
11096
+ }];
11097
+}
11098
+
11099
+var $parseMinErr = minErr('$parse');
11100
+
11101
+// Sandboxing Angular Expressions
11102
+// ------------------------------
11103
+// Angular expressions are generally considered safe because these expressions only have direct
11104
+// access to $scope and locals. However, one can obtain the ability to execute arbitrary JS code by
11105
+// obtaining a reference to native JS functions such as the Function constructor.
11106
+//
11107
+// As an example, consider the following Angular expression:
11108
+//
11109
+// {}.toString.constructor('alert("evil JS code")')
11110
+//
11111
+// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits
11112
+// against the expression language, but not to prevent exploits that were enabled by exposing
11113
+// sensitive JavaScript or browser apis on Scope. Exposing such objects on a Scope is never a good
11114
+// practice and therefore we are not even trying to protect against interaction with an object
11115
+// explicitly exposed in this way.
11116
+//
11117
+// In general, it is not possible to access a Window object from an angular expression unless a
11118
+// window or some DOM object that has a reference to window is published onto a Scope.
11119
+// Similarly we prevent invocations of function known to be dangerous, as well as assignments to
11120
+// native objects.
11121
+
11122
+
11123
+function ensureSafeMemberName(name, fullExpression) {
11124
+ if (name === "__defineGetter__" || name === "__defineSetter__"
11125
+ || name === "__lookupGetter__" || name === "__lookupSetter__"
11126
+ || name === "__proto__") {
11127
+ throw $parseMinErr('isecfld',
11128
+ 'Attempting to access a disallowed field in Angular expressions! '
11129
+ +'Expression: {0}', fullExpression);
11130
+ }
11131
+ return name;
11132
+}
11133
+
11134
+function ensureSafeObject(obj, fullExpression) {
11135
+ // nifty check if obj is Function that is fast and works across iframes and other contexts
11136
+ if (obj) {
11137
+ if (obj.constructor === obj) {
11138
+ throw $parseMinErr('isecfn',
11139
+ 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
11140
+ fullExpression);
11141
+ } else if (// isWindow(obj)
11142
+ obj.window === obj) {
11143
+ throw $parseMinErr('isecwindow',
11144
+ 'Referencing the Window in Angular expressions is disallowed! Expression: {0}',
11145
+ fullExpression);
11146
+ } else if (// isElement(obj)
11147
+ obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {
11148
+ throw $parseMinErr('isecdom',
11149
+ 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',
11150
+ fullExpression);
11151
+ } else if (// block Object so that we can't get hold of dangerous Object.* methods
11152
+ obj === Object) {
11153
+ throw $parseMinErr('isecobj',
11154
+ 'Referencing Object in Angular expressions is disallowed! Expression: {0}',
11155
+ fullExpression);
11156
+ }
11157
+ }
11158
+ return obj;
11159
+}
11160
+
11161
+var CALL = Function.prototype.call;
11162
+var APPLY = Function.prototype.apply;
11163
+var BIND = Function.prototype.bind;
11164
+
11165
+function ensureSafeFunction(obj, fullExpression) {
11166
+ if (obj) {
11167
+ if (obj.constructor === obj) {
11168
+ throw $parseMinErr('isecfn',
11169
+ 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
11170
+ fullExpression);
11171
+ } else if (obj === CALL || obj === APPLY || obj === BIND) {
11172
+ throw $parseMinErr('isecff',
11173
+ 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',
11174
+ fullExpression);
11175
+ }
11176
+ }
11177
+}
11178
+
11179
+//Keyword constants
11180
+var CONSTANTS = createMap();
11181
+forEach({
11182
+ 'null': function() { return null; },
11183
+ 'true': function() { return true; },
11184
+ 'false': function() { return false; },
11185
+ 'undefined': function() {}
11186
+}, function(constantGetter, name) {
11187
+ constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true;
11188
+ CONSTANTS[name] = constantGetter;
11189
+});
11190
+
11191
+//Not quite a constant, but can be lex/parsed the same
11192
+CONSTANTS['this'] = function(self) { return self; };
11193
+CONSTANTS['this'].sharedGetter = true;
11194
+
11195
+
11196
+//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter
11197
+var OPERATORS = extend(createMap(), {
11198
+ /* jshint bitwise : false */
11199
+ '+':function(self, locals, a,b){
11200
+ a=a(self, locals); b=b(self, locals);
11201
+ if (isDefined(a)) {
11202
+ if (isDefined(b)) {
11203
+ return a + b;
11204
+ }
11205
+ return a;
11206
+ }
11207
+ return isDefined(b)?b:undefined;},
11208
+ '-':function(self, locals, a,b){
11209
+ a=a(self, locals); b=b(self, locals);
11210
+ return (isDefined(a)?a:0)-(isDefined(b)?b:0);
11211
+ },
11212
+ '*':function(self, locals, a,b){return a(self, locals)*b(self, locals);},
11213
+ '/':function(self, locals, a,b){return a(self, locals)/b(self, locals);},
11214
+ '%':function(self, locals, a,b){return a(self, locals)%b(self, locals);},
11215
+ '^':function(self, locals, a,b){return a(self, locals)^b(self, locals);},
11216
+ '===':function(self, locals, a, b){return a(self, locals)===b(self, locals);},
11217
+ '!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);},
11218
+ '==':function(self, locals, a,b){return a(self, locals)==b(self, locals);},
11219
+ '!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);},
11220
+ '<':function(self, locals, a,b){return a(self, locals)<b(self, locals);},
11221
+ '>':function(self, locals, a,b){return a(self, locals)>b(self, locals);},
11222
+ '<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);},
11223
+ '>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);},
11224
+ '&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);},
11225
+ '||':function(self, locals, a,b){return a(self, locals)||b(self, locals);},
11226
+ '&':function(self, locals, a,b){return a(self, locals)&b(self, locals);},
11227
+ '!':function(self, locals, a){return !a(self, locals);},
11228
+
11229
+ //Tokenized as operators but parsed as assignment/filters
11230
+ '=':true,
11231
+ '|':true
11232
+});
11233
+/* jshint bitwise: true */
11234
+var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
11235
+
11236
+
11237
+/////////////////////////////////////////
11238
+
11239
+
11240
+/**
11241
+ * @constructor
11242
+ */
11243
+var Lexer = function (options) {
11244
+ this.options = options;
11245
+};
11246
+
11247
+Lexer.prototype = {
11248
+ constructor: Lexer,
11249
+
11250
+ lex: function (text) {
11251
+ this.text = text;
11252
+ this.index = 0;
11253
+ this.ch = undefined;
11254
+ this.tokens = [];
11255
+
11256
+ while (this.index < this.text.length) {
11257
+ this.ch = this.text.charAt(this.index);
11258
+ if (this.is('"\'')) {
11259
+ this.readString(this.ch);
11260
+ } else if (this.isNumber(this.ch) || this.is('.') && this.isNumber(this.peek())) {
11261
+ this.readNumber();
11262
+ } else if (this.isIdent(this.ch)) {
11263
+ this.readIdent();
11264
+ } else if (this.is('(){}[].,;:?')) {
11265
+ this.tokens.push({
11266
+ index: this.index,
11267
+ text: this.ch
11268
+ });
11269
+ this.index++;
11270
+ } else if (this.isWhitespace(this.ch)) {
11271
+ this.index++;
11272
+ } else {
11273
+ var ch2 = this.ch + this.peek();
11274
+ var ch3 = ch2 + this.peek(2);
11275
+ var fn = OPERATORS[this.ch];
11276
+ var fn2 = OPERATORS[ch2];
11277
+ var fn3 = OPERATORS[ch3];
11278
+ if (fn3) {
11279
+ this.tokens.push({index: this.index, text: ch3, fn: fn3});
11280
+ this.index += 3;
11281
+ } else if (fn2) {
11282
+ this.tokens.push({index: this.index, text: ch2, fn: fn2});
11283
+ this.index += 2;
11284
+ } else if (fn) {
11285
+ this.tokens.push({
11286
+ index: this.index,
11287
+ text: this.ch,
11288
+ fn: fn
11289
+ });
11290
+ this.index += 1;
11291
+ } else {
11292
+ this.throwError('Unexpected next character ', this.index, this.index + 1);
11293
+ }
11294
+ }
11295
+ }
11296
+ return this.tokens;
11297
+ },
11298
+
11299
+ is: function(chars) {
11300
+ return chars.indexOf(this.ch) !== -1;
11301
+ },
11302
+
11303
+ peek: function(i) {
11304
+ var num = i || 1;
11305
+ return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;
11306
+ },
11307
+
11308
+ isNumber: function(ch) {
11309
+ return ('0' <= ch && ch <= '9');
11310
+ },
11311
+
11312
+ isWhitespace: function(ch) {
11313
+ // IE treats non-breaking space as \u00A0
11314
+ return (ch === ' ' || ch === '\r' || ch === '\t' ||
11315
+ ch === '\n' || ch === '\v' || ch === '\u00A0');
11316
+ },
11317
+
11318
+ isIdent: function(ch) {
11319
+ return ('a' <= ch && ch <= 'z' ||
11320
+ 'A' <= ch && ch <= 'Z' ||
11321
+ '_' === ch || ch === '$');
11322
+ },
11323
+
11324
+ isExpOperator: function(ch) {
11325
+ return (ch === '-' || ch === '+' || this.isNumber(ch));
11326
+ },
11327
+
11328
+ throwError: function(error, start, end) {
11329
+ end = end || this.index;
11330
+ var colStr = (isDefined(start)
11331
+ ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']'
11332
+ : ' ' + end);
11333
+ throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',
11334
+ error, colStr, this.text);
11335
+ },
11336
+
11337
+ readNumber: function() {
11338
+ var number = '';
11339
+ var start = this.index;
11340
+ while (this.index < this.text.length) {
11341
+ var ch = lowercase(this.text.charAt(this.index));
11342
+ if (ch == '.' || this.isNumber(ch)) {
11343
+ number += ch;
11344
+ } else {
11345
+ var peekCh = this.peek();
11346
+ if (ch == 'e' && this.isExpOperator(peekCh)) {
11347
+ number += ch;
11348
+ } else if (this.isExpOperator(ch) &&
11349
+ peekCh && this.isNumber(peekCh) &&
11350
+ number.charAt(number.length - 1) == 'e') {
11351
+ number += ch;
11352
+ } else if (this.isExpOperator(ch) &&
11353
+ (!peekCh || !this.isNumber(peekCh)) &&
11354
+ number.charAt(number.length - 1) == 'e') {
11355
+ this.throwError('Invalid exponent');
11356
+ } else {
11357
+ break;
11358
+ }
11359
+ }
11360
+ this.index++;
11361
+ }
11362
+ number = 1 * number;
11363
+ this.tokens.push({
11364
+ index: start,
11365
+ text: number,
11366
+ constant: true,
11367
+ fn: function() { return number; }
11368
+ });
11369
+ },
11370
+
11371
+ readIdent: function() {
11372
+ var expression = this.text;
11373
+
11374
+ var ident = '';
11375
+ var start = this.index;
11376
+
11377
+ var lastDot, peekIndex, methodName, ch;
11378
+
11379
+ while (this.index < this.text.length) {
11380
+ ch = this.text.charAt(this.index);
11381
+ if (ch === '.' || this.isIdent(ch) || this.isNumber(ch)) {
11382
+ if (ch === '.') lastDot = this.index;
11383
+ ident += ch;
11384
+ } else {
11385
+ break;
11386
+ }
11387
+ this.index++;
11388
+ }
11389
+
11390
+ //check if the identifier ends with . and if so move back one char
11391
+ if (lastDot && ident[ident.length - 1] === '.') {
11392
+ this.index--;
11393
+ ident = ident.slice(0, -1);
11394
+ lastDot = ident.lastIndexOf('.');
11395
+ if (lastDot === -1) {
11396
+ lastDot = undefined;
11397
+ }
11398
+ }
11399
+
11400
+ //check if this is not a method invocation and if it is back out to last dot
11401
+ if (lastDot) {
11402
+ peekIndex = this.index;
11403
+ while (peekIndex < this.text.length) {
11404
+ ch = this.text.charAt(peekIndex);
11405
+ if (ch === '(') {
11406
+ methodName = ident.substr(lastDot - start + 1);
11407
+ ident = ident.substr(0, lastDot - start);
11408
+ this.index = peekIndex;
11409
+ break;
11410
+ }
11411
+ if (this.isWhitespace(ch)) {
11412
+ peekIndex++;
11413
+ } else {
11414
+ break;
11415
+ }
11416
+ }
11417
+ }
11418
+
11419
+ this.tokens.push({
11420
+ index: start,
11421
+ text: ident,
11422
+ fn: CONSTANTS[ident] || getterFn(ident, this.options, expression)
11423
+ });
11424
+
11425
+ if (methodName) {
11426
+ this.tokens.push({
11427
+ index: lastDot,
11428
+ text: '.'
11429
+ });
11430
+ this.tokens.push({
11431
+ index: lastDot + 1,
11432
+ text: methodName
11433
+ });
11434
+ }
11435
+ },
11436
+
11437
+ readString: function(quote) {
11438
+ var start = this.index;
11439
+ this.index++;
11440
+ var string = '';
11441
+ var rawString = quote;
11442
+ var escape = false;
11443
+ while (this.index < this.text.length) {
11444
+ var ch = this.text.charAt(this.index);
11445
+ rawString += ch;
11446
+ if (escape) {
11447
+ if (ch === 'u') {
11448
+ var hex = this.text.substring(this.index + 1, this.index + 5);
11449
+ if (!hex.match(/[\da-f]{4}/i))
11450
+ this.throwError('Invalid unicode escape [\\u' + hex + ']');
11451
+ this.index += 4;
11452
+ string += String.fromCharCode(parseInt(hex, 16));
11453
+ } else {
11454
+ var rep = ESCAPE[ch];
11455
+ string = string + (rep || ch);
11456
+ }
11457
+ escape = false;
11458
+ } else if (ch === '\\') {
11459
+ escape = true;
11460
+ } else if (ch === quote) {
11461
+ this.index++;
11462
+ this.tokens.push({
11463
+ index: start,
11464
+ text: rawString,
11465
+ string: string,
11466
+ constant: true,
11467
+ fn: function() { return string; }
11468
+ });
11469
+ return;
11470
+ } else {
11471
+ string += ch;
11472
+ }
11473
+ this.index++;
11474
+ }
11475
+ this.throwError('Unterminated quote', start);
11476
+ }
11477
+};
11478
+
11479
+
11480
+function isConstant(exp) {
11481
+ return exp.constant;
11482
+}
11483
+
11484
+/**
11485
+ * @constructor
11486
+ */
11487
+var Parser = function (lexer, $filter, options) {
11488
+ this.lexer = lexer;
11489
+ this.$filter = $filter;
11490
+ this.options = options;
11491
+};
11492
+
11493
+Parser.ZERO = extend(function () {
11494
+ return 0;
11495
+}, {
11496
+ sharedGetter: true,
11497
+ constant: true
11498
+});
11499
+
11500
+Parser.prototype = {
11501
+ constructor: Parser,
11502
+
11503
+ parse: function (text) {
11504
+ this.text = text;
11505
+ this.tokens = this.lexer.lex(text);
11506
+
11507
+ var value = this.statements();
11508
+
11509
+ if (this.tokens.length !== 0) {
11510
+ this.throwError('is an unexpected token', this.tokens[0]);
11511
+ }
11512
+
11513
+ value.literal = !!value.literal;
11514
+ value.constant = !!value.constant;
11515
+
11516
+ return value;
11517
+ },
11518
+
11519
+ primary: function () {
11520
+ var primary;
11521
+ if (this.expect('(')) {
11522
+ primary = this.filterChain();
11523
+ this.consume(')');
11524
+ } else if (this.expect('[')) {
11525
+ primary = this.arrayDeclaration();
11526
+ } else if (this.expect('{')) {
11527
+ primary = this.object();
11528
+ } else {
11529
+ var token = this.expect();
11530
+ primary = token.fn;
11531
+ if (!primary) {
11532
+ this.throwError('not a primary expression', token);
11533
+ }
11534
+ if (token.constant) {
11535
+ primary.constant = true;
11536
+ primary.literal = true;
11537
+ }
11538
+ }
11539
+
11540
+ var next, context;
11541
+ while ((next = this.expect('(', '[', '.'))) {
11542
+ if (next.text === '(') {
11543
+ primary = this.functionCall(primary, context);
11544
+ context = null;
11545
+ } else if (next.text === '[') {
11546
+ context = primary;
11547
+ primary = this.objectIndex(primary);
11548
+ } else if (next.text === '.') {
11549
+ context = primary;
11550
+ primary = this.fieldAccess(primary);
11551
+ } else {
11552
+ this.throwError('IMPOSSIBLE');
11553
+ }
11554
+ }
11555
+ return primary;
11556
+ },
11557
+
11558
+ throwError: function(msg, token) {
11559
+ throw $parseMinErr('syntax',
11560
+ 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].',
11561
+ token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));
11562
+ },
11563
+
11564
+ peekToken: function() {
11565
+ if (this.tokens.length === 0)
11566
+ throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
11567
+ return this.tokens[0];
11568
+ },
11569
+
11570
+ peek: function(e1, e2, e3, e4) {
11571
+ if (this.tokens.length > 0) {
11572
+ var token = this.tokens[0];
11573
+ var t = token.text;
11574
+ if (t === e1 || t === e2 || t === e3 || t === e4 ||
11575
+ (!e1 && !e2 && !e3 && !e4)) {
11576
+ return token;
11577
+ }
11578
+ }
11579
+ return false;
11580
+ },
11581
+
11582
+ expect: function(e1, e2, e3, e4){
11583
+ var token = this.peek(e1, e2, e3, e4);
11584
+ if (token) {
11585
+ this.tokens.shift();
11586
+ return token;
11587
+ }
11588
+ return false;
11589
+ },
11590
+
11591
+ consume: function(e1){
11592
+ if (!this.expect(e1)) {
11593
+ this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());
11594
+ }
11595
+ },
11596
+
11597
+ unaryFn: function(fn, right) {
11598
+ return extend(function $parseUnaryFn(self, locals) {
11599
+ return fn(self, locals, right);
11600
+ }, {
11601
+ constant:right.constant,
11602
+ inputs: [right]
11603
+ });
11604
+ },
11605
+
11606
+ binaryFn: function(left, fn, right, isBranching) {
11607
+ return extend(function $parseBinaryFn(self, locals) {
11608
+ return fn(self, locals, left, right);
11609
+ }, {
11610
+ constant: left.constant && right.constant,
11611
+ inputs: !isBranching && [left, right]
11612
+ });
11613
+ },
11614
+
11615
+ statements: function() {
11616
+ var statements = [];
11617
+ while (true) {
11618
+ if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))
11619
+ statements.push(this.filterChain());
11620
+ if (!this.expect(';')) {
11621
+ // optimize for the common case where there is only one statement.
11622
+ // TODO(size): maybe we should not support multiple statements?
11623
+ return (statements.length === 1)
11624
+ ? statements[0]
11625
+ : function $parseStatements(self, locals) {
11626
+ var value;
11627
+ for (var i = 0, ii = statements.length; i < ii; i++) {
11628
+ value = statements[i](self, locals);
11629
+ }
11630
+ return value;
11631
+ };
11632
+ }
11633
+ }
11634
+ },
11635
+
11636
+ filterChain: function() {
11637
+ var left = this.expression();
11638
+ var token;
11639
+ while ((token = this.expect('|'))) {
11640
+ left = this.filter(left);
11641
+ }
11642
+ return left;
11643
+ },
11644
+
11645
+ filter: function(inputFn) {
11646
+ var token = this.expect();
11647
+ var fn = this.$filter(token.text);
11648
+ var argsFn;
11649
+ var args;
11650
+
11651
+ if (this.peek(':')) {
11652
+ argsFn = [];
11653
+ args = []; // we can safely reuse the array
11654
+ while (this.expect(':')) {
11655
+ argsFn.push(this.expression());
11656
+ }
11657
+ }
11658
+
11659
+ var inputs = [inputFn].concat(argsFn || []);
11660
+
11661
+ return extend(function $parseFilter(self, locals) {
11662
+ var input = inputFn(self, locals);
11663
+ if (args) {
11664
+ args[0] = input;
11665
+
11666
+ var i = argsFn.length;
11667
+ while (i--) {
11668
+ args[i + 1] = argsFn[i](self, locals);
11669
+ }
11670
+
11671
+ return fn.apply(undefined, args);
11672
+ }
11673
+
11674
+ return fn(input);
11675
+ }, {
11676
+ constant: !fn.$stateful && inputs.every(isConstant),
11677
+ inputs: !fn.$stateful && inputs
11678
+ });
11679
+ },
11680
+
11681
+ expression: function() {
11682
+ return this.assignment();
11683
+ },
11684
+
11685
+ assignment: function() {
11686
+ var left = this.ternary();
11687
+ var right;
11688
+ var token;
11689
+ if ((token = this.expect('='))) {
11690
+ if (!left.assign) {
11691
+ this.throwError('implies assignment but [' +
11692
+ this.text.substring(0, token.index) + '] can not be assigned to', token);
11693
+ }
11694
+ right = this.ternary();
11695
+ return extend(function $parseAssignment(scope, locals) {
11696
+ return left.assign(scope, right(scope, locals), locals);
11697
+ }, {
11698
+ inputs: [left, right]
11699
+ });
11700
+ }
11701
+ return left;
11702
+ },
11703
+
11704
+ ternary: function() {
11705
+ var left = this.logicalOR();
11706
+ var middle;
11707
+ var token;
11708
+ if ((token = this.expect('?'))) {
11709
+ middle = this.assignment();
11710
+ if ((token = this.expect(':'))) {
11711
+ var right = this.assignment();
11712
+
11713
+ return extend(function $parseTernary(self, locals){
11714
+ return left(self, locals) ? middle(self, locals) : right(self, locals);
11715
+ }, {
11716
+ constant: left.constant && middle.constant && right.constant
11717
+ });
11718
+
11719
+ } else {
11720
+ this.throwError('expected :', token);
11721
+ }
11722
+ }
11723
+
11724
+ return left;
11725
+ },
11726
+
11727
+ logicalOR: function() {
11728
+ var left = this.logicalAND();
11729
+ var token;
11730
+ while ((token = this.expect('||'))) {
11731
+ left = this.binaryFn(left, token.fn, this.logicalAND(), true);
11732
+ }
11733
+ return left;
11734
+ },
11735
+
11736
+ logicalAND: function() {
11737
+ var left = this.equality();
11738
+ var token;
11739
+ if ((token = this.expect('&&'))) {
11740
+ left = this.binaryFn(left, token.fn, this.logicalAND(), true);
11741
+ }
11742
+ return left;
11743
+ },
11744
+
11745
+ equality: function() {
11746
+ var left = this.relational();
11747
+ var token;
11748
+ if ((token = this.expect('==','!=','===','!=='))) {
11749
+ left = this.binaryFn(left, token.fn, this.equality());
11750
+ }
11751
+ return left;
11752
+ },
11753
+
11754
+ relational: function() {
11755
+ var left = this.additive();
11756
+ var token;
11757
+ if ((token = this.expect('<', '>', '<=', '>='))) {
11758
+ left = this.binaryFn(left, token.fn, this.relational());
11759
+ }
11760
+ return left;
11761
+ },
11762
+
11763
+ additive: function() {
11764
+ var left = this.multiplicative();
11765
+ var token;
11766
+ while ((token = this.expect('+','-'))) {
11767
+ left = this.binaryFn(left, token.fn, this.multiplicative());
11768
+ }
11769
+ return left;
11770
+ },
11771
+
11772
+ multiplicative: function() {
11773
+ var left = this.unary();
11774
+ var token;
11775
+ while ((token = this.expect('*','/','%'))) {
11776
+ left = this.binaryFn(left, token.fn, this.unary());
11777
+ }
11778
+ return left;
11779
+ },
11780
+
11781
+ unary: function() {
11782
+ var token;
11783
+ if (this.expect('+')) {
11784
+ return this.primary();
11785
+ } else if ((token = this.expect('-'))) {
11786
+ return this.binaryFn(Parser.ZERO, token.fn, this.unary());
11787
+ } else if ((token = this.expect('!'))) {
11788
+ return this.unaryFn(token.fn, this.unary());
11789
+ } else {
11790
+ return this.primary();
11791
+ }
11792
+ },
11793
+
11794
+ fieldAccess: function(object) {
11795
+ var expression = this.text;
11796
+ var field = this.expect().text;
11797
+ var getter = getterFn(field, this.options, expression);
11798
+
11799
+ return extend(function $parseFieldAccess(scope, locals, self) {
11800
+ return getter(self || object(scope, locals));
11801
+ }, {
11802
+ assign: function(scope, value, locals) {
11803
+ var o = object(scope, locals);
11804
+ if (!o) object.assign(scope, o = {});
11805
+ return setter(o, field, value, expression);
11806
+ }
11807
+ });
11808
+ },
11809
+
11810
+ objectIndex: function(obj) {
11811
+ var expression = this.text;
11812
+
11813
+ var indexFn = this.expression();
11814
+ this.consume(']');
11815
+
11816
+ return extend(function $parseObjectIndex(self, locals) {
11817
+ var o = obj(self, locals),
11818
+ i = indexFn(self, locals),
11819
+ v;
11820
+
11821
+ ensureSafeMemberName(i, expression);
11822
+ if (!o) return undefined;
11823
+ v = ensureSafeObject(o[i], expression);
11824
+ return v;
11825
+ }, {
11826
+ assign: function(self, value, locals) {
11827
+ var key = ensureSafeMemberName(indexFn(self, locals), expression);
11828
+ // prevent overwriting of Function.constructor which would break ensureSafeObject check
11829
+ var o = ensureSafeObject(obj(self, locals), expression);
11830
+ if (!o) obj.assign(self, o = {});
11831
+ return o[key] = value;
11832
+ }
11833
+ });
11834
+ },
11835
+
11836
+ functionCall: function(fnGetter, contextGetter) {
11837
+ var argsFn = [];
11838
+ if (this.peekToken().text !== ')') {
11839
+ do {
11840
+ argsFn.push(this.expression());
11841
+ } while (this.expect(','));
11842
+ }
11843
+ this.consume(')');
11844
+
11845
+ var expressionText = this.text;
11846
+ // we can safely reuse the array across invocations
11847
+ var args = argsFn.length ? [] : null;
11848
+
11849
+ return function $parseFunctionCall(scope, locals) {
11850
+ var context = contextGetter ? contextGetter(scope, locals) : scope;
11851
+ var fn = fnGetter(scope, locals, context) || noop;
11852
+
11853
+ if (args) {
11854
+ var i = argsFn.length;
11855
+ while (i--) {
11856
+ args[i] = ensureSafeObject(argsFn[i](scope, locals), expressionText);
11857
+ }
11858
+ }
11859
+
11860
+ ensureSafeObject(context, expressionText);
11861
+ ensureSafeFunction(fn, expressionText);
11862
+
11863
+ // IE stupidity! (IE doesn't have apply for some native functions)
11864
+ var v = fn.apply
11865
+ ? fn.apply(context, args)
11866
+ : fn(args[0], args[1], args[2], args[3], args[4]);
11867
+
11868
+ return ensureSafeObject(v, expressionText);
11869
+ };
11870
+ },
11871
+
11872
+ // This is used with json array declaration
11873
+ arrayDeclaration: function () {
11874
+ var elementFns = [];
11875
+ if (this.peekToken().text !== ']') {
11876
+ do {
11877
+ if (this.peek(']')) {
11878
+ // Support trailing commas per ES5.1.
11879
+ break;
11880
+ }
11881
+ var elementFn = this.expression();
11882
+ elementFns.push(elementFn);
11883
+ } while (this.expect(','));
11884
+ }
11885
+ this.consume(']');
11886
+
11887
+ return extend(function $parseArrayLiteral(self, locals) {
11888
+ var array = [];
11889
+ for (var i = 0, ii = elementFns.length; i < ii; i++) {
11890
+ array.push(elementFns[i](self, locals));
11891
+ }
11892
+ return array;
11893
+ }, {
11894
+ literal: true,
11895
+ constant: elementFns.every(isConstant),
11896
+ inputs: elementFns
11897
+ });
11898
+ },
11899
+
11900
+ object: function () {
11901
+ var keys = [], valueFns = [];
11902
+ if (this.peekToken().text !== '}') {
11903
+ do {
11904
+ if (this.peek('}')) {
11905
+ // Support trailing commas per ES5.1.
11906
+ break;
11907
+ }
11908
+ var token = this.expect();
11909
+ keys.push(token.string || token.text);
11910
+ this.consume(':');
11911
+ var value = this.expression();
11912
+ valueFns.push(value);
11913
+ } while (this.expect(','));
11914
+ }
11915
+ this.consume('}');
11916
+
11917
+ return extend(function $parseObjectLiteral(self, locals) {
11918
+ var object = {};
11919
+ for (var i = 0, ii = valueFns.length; i < ii; i++) {
11920
+ object[keys[i]] = valueFns[i](self, locals);
11921
+ }
11922
+ return object;
11923
+ }, {
11924
+ literal: true,
11925
+ constant: valueFns.every(isConstant),
11926
+ inputs: valueFns
11927
+ });
11928
+ }
11929
+};
11930
+
11931
+
11932
+//////////////////////////////////////////////////
11933
+// Parser helper functions
11934
+//////////////////////////////////////////////////
11935
+
11936
+function setter(obj, path, setValue, fullExp) {
11937
+ ensureSafeObject(obj, fullExp);
11938
+
11939
+ var element = path.split('.'), key;
11940
+ for (var i = 0; element.length > 1; i++) {
11941
+ key = ensureSafeMemberName(element.shift(), fullExp);
11942
+ var propertyObj = ensureSafeObject(obj[key], fullExp);
11943
+ if (!propertyObj) {
11944
+ propertyObj = {};
11945
+ obj[key] = propertyObj;
11946
+ }
11947
+ obj = propertyObj;
11948
+ }
11949
+ key = ensureSafeMemberName(element.shift(), fullExp);
11950
+ ensureSafeObject(obj[key], fullExp);
11951
+ obj[key] = setValue;
11952
+ return setValue;
11953
+}
11954
+
11955
+var getterFnCache = createMap();
11956
+
11957
+/**
11958
+ * Implementation of the "Black Hole" variant from:
11959
+ * - http://jsperf.com/angularjs-parse-getter/4
11960
+ * - http://jsperf.com/path-evaluation-simplified/7
11961
+ */
11962
+function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp) {
11963
+ ensureSafeMemberName(key0, fullExp);
11964
+ ensureSafeMemberName(key1, fullExp);
11965
+ ensureSafeMemberName(key2, fullExp);
11966
+ ensureSafeMemberName(key3, fullExp);
11967
+ ensureSafeMemberName(key4, fullExp);
11968
+
11969
+ return function cspSafeGetter(scope, locals) {
11970
+ var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;
11971
+
11972
+ if (pathVal == null) return pathVal;
11973
+ pathVal = pathVal[key0];
11974
+
11975
+ if (!key1) return pathVal;
11976
+ if (pathVal == null) return undefined;
11977
+ pathVal = pathVal[key1];
11978
+
11979
+ if (!key2) return pathVal;
11980
+ if (pathVal == null) return undefined;
11981
+ pathVal = pathVal[key2];
11982
+
11983
+ if (!key3) return pathVal;
11984
+ if (pathVal == null) return undefined;
11985
+ pathVal = pathVal[key3];
11986
+
11987
+ if (!key4) return pathVal;
11988
+ if (pathVal == null) return undefined;
11989
+ pathVal = pathVal[key4];
11990
+
11991
+ return pathVal;
11992
+ };
11993
+}
11994
+
11995
+function getterFn(path, options, fullExp) {
11996
+ var fn = getterFnCache[path];
11997
+
11998
+ if (fn) return fn;
11999
+
12000
+ var pathKeys = path.split('.'),
12001
+ pathKeysLength = pathKeys.length;
12002
+
12003
+ // http://jsperf.com/angularjs-parse-getter/6
12004
+ if (options.csp) {
12005
+ if (pathKeysLength < 6) {
12006
+ fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp);
12007
+ } else {
12008
+ fn = function cspSafeGetter(scope, locals) {
12009
+ var i = 0, val;
12010
+ do {
12011
+ val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],
12012
+ pathKeys[i++], fullExp)(scope, locals);
12013
+
12014
+ locals = undefined; // clear after first iteration
12015
+ scope = val;
12016
+ } while (i < pathKeysLength);
12017
+ return val;
12018
+ };
12019
+ }
12020
+ } else {
12021
+ var code = '';
12022
+ forEach(pathKeys, function(key, index) {
12023
+ ensureSafeMemberName(key, fullExp);
12024
+ code += 'if(s == null) return undefined;\n' +
12025
+ 's='+ (index
12026
+ // we simply dereference 's' on any .dot notation
12027
+ ? 's'
12028
+ // but if we are first then we check locals first, and if so read it first
12029
+ : '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key + ';\n';
12030
+ });
12031
+ code += 'return s;';
12032
+
12033
+ /* jshint -W054 */
12034
+ var evaledFnGetter = new Function('s', 'l', code); // s=scope, l=locals
12035
+ /* jshint +W054 */
12036
+ evaledFnGetter.toString = valueFn(code);
12037
+
12038
+ fn = evaledFnGetter;
12039
+ }
12040
+
12041
+ fn.sharedGetter = true;
12042
+ fn.assign = function(self, value) {
12043
+ return setter(self, path, value, path);
12044
+ };
12045
+ getterFnCache[path] = fn;
12046
+ return fn;
12047
+}
12048
+
12049
+///////////////////////////////////
12050
+
12051
+/**
12052
+ * @ngdoc service
12053
+ * @name $parse
12054
+ * @kind function
12055
+ *
12056
+ * @description
12057
+ *
12058
+ * Converts Angular {@link guide/expression expression} into a function.
12059
+ *
12060
+ * ```js
12061
+ * var getter = $parse('user.name');
12062
+ * var setter = getter.assign;
12063
+ * var context = {user:{name:'angular'}};
12064
+ * var locals = {user:{name:'local'}};
12065
+ *
12066
+ * expect(getter(context)).toEqual('angular');
12067
+ * setter(context, 'newValue');
12068
+ * expect(context.user.name).toEqual('newValue');
12069
+ * expect(getter(context, locals)).toEqual('local');
12070
+ * ```
12071
+ *
12072
+ *
12073
+ * @param {string} expression String expression to compile.
12074
+ * @returns {function(context, locals)} a function which represents the compiled expression:
12075
+ *
12076
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
12077
+ * are evaluated against (typically a scope object).
12078
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
12079
+ * `context`.
12080
+ *
12081
+ * The returned function also has the following properties:
12082
+ * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript
12083
+ * literal.
12084
+ * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript
12085
+ * constant literals.
12086
+ * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be
12087
+ * set to a function to change its value on the given context.
12088
+ *
12089
+ */
12090
+
12091
+
12092
+/**
12093
+ * @ngdoc provider
12094
+ * @name $parseProvider
12095
+ *
12096
+ * @description
12097
+ * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}
12098
+ * service.
12099
+ */
12100
+function $ParseProvider() {
12101
+ var cache = createMap();
12102
+
12103
+ var $parseOptions = {
12104
+ csp: false
12105
+ };
12106
+
12107
+
12108
+ this.$get = ['$filter', '$sniffer', function($filter, $sniffer) {
12109
+ $parseOptions.csp = $sniffer.csp;
12110
+
12111
+ function wrapSharedExpression(exp) {
12112
+ var wrapped = exp;
12113
+
12114
+ if (exp.sharedGetter) {
12115
+ wrapped = function $parseWrapper(self, locals) {
12116
+ return exp(self, locals);
12117
+ };
12118
+ wrapped.literal = exp.literal;
12119
+ wrapped.constant = exp.constant;
12120
+ wrapped.assign = exp.assign;
12121
+ }
12122
+
12123
+ return wrapped;
12124
+ }
12125
+
12126
+ return function $parse(exp, interceptorFn) {
12127
+ var parsedExpression, oneTime, cacheKey;
12128
+
12129
+ switch (typeof exp) {
12130
+ case 'string':
12131
+ cacheKey = exp = exp.trim();
12132
+
12133
+ parsedExpression = cache[cacheKey];
12134
+
12135
+ if (!parsedExpression) {
12136
+ if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {
12137
+ oneTime = true;
12138
+ exp = exp.substring(2);
12139
+ }
12140
+
12141
+ var lexer = new Lexer($parseOptions);
12142
+ var parser = new Parser(lexer, $filter, $parseOptions);
12143
+ parsedExpression = parser.parse(exp);
12144
+
12145
+ if (parsedExpression.constant) {
12146
+ parsedExpression.$$watchDelegate = constantWatchDelegate;
12147
+ } else if (oneTime) {
12148
+ //oneTime is not part of the exp passed to the Parser so we may have to
12149
+ //wrap the parsedExpression before adding a $$watchDelegate
12150
+ parsedExpression = wrapSharedExpression(parsedExpression);
12151
+ parsedExpression.$$watchDelegate = parsedExpression.literal ?
12152
+ oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;
12153
+ } else if (parsedExpression.inputs) {
12154
+ parsedExpression.$$watchDelegate = inputsWatchDelegate;
12155
+ }
12156
+
12157
+ cache[cacheKey] = parsedExpression;
12158
+ }
12159
+ return addInterceptor(parsedExpression, interceptorFn);
12160
+
12161
+ case 'function':
12162
+ return addInterceptor(exp, interceptorFn);
12163
+
12164
+ default:
12165
+ return addInterceptor(noop, interceptorFn);
12166
+ }
12167
+ };
12168
+
12169
+ function collectExpressionInputs(inputs, list) {
12170
+ for (var i = 0, ii = inputs.length; i < ii; i++) {
12171
+ var input = inputs[i];
12172
+ if (!input.constant) {
12173
+ if (input.inputs) {
12174
+ collectExpressionInputs(input.inputs, list);
12175
+ } else if (list.indexOf(input) === -1) { // TODO(perf) can we do better?
12176
+ list.push(input);
12177
+ }
12178
+ }
12179
+ }
12180
+
12181
+ return list;
12182
+ }
12183
+
12184
+ function expressionInputDirtyCheck(newValue, oldValueOfValue) {
12185
+
12186
+ if (newValue == null || oldValueOfValue == null) { // null/undefined
12187
+ return newValue === oldValueOfValue;
12188
+ }
12189
+
12190
+ if (typeof newValue === 'object') {
12191
+
12192
+ // attempt to convert the value to a primitive type
12193
+ // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
12194
+ // be cheaply dirty-checked
12195
+ newValue = newValue.valueOf();
12196
+
12197
+ if (typeof newValue === 'object') {
12198
+ // objects/arrays are not supported - deep-watching them would be too expensive
12199
+ return false;
12200
+ }
12201
+
12202
+ // fall-through to the primitive equality check
12203
+ }
12204
+
12205
+ //Primitive or NaN
12206
+ return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);
12207
+ }
12208
+
12209
+ function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12210
+ var inputExpressions = parsedExpression.$$inputs ||
12211
+ (parsedExpression.$$inputs = collectExpressionInputs(parsedExpression.inputs, []));
12212
+
12213
+ var lastResult;
12214
+
12215
+ if (inputExpressions.length === 1) {
12216
+ var oldInputValue = expressionInputDirtyCheck; // init to something unique so that equals check fails
12217
+ inputExpressions = inputExpressions[0];
12218
+ return scope.$watch(function expressionInputWatch(scope) {
12219
+ var newInputValue = inputExpressions(scope);
12220
+ if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) {
12221
+ lastResult = parsedExpression(scope);
12222
+ oldInputValue = newInputValue && newInputValue.valueOf();
12223
+ }
12224
+ return lastResult;
12225
+ }, listener, objectEquality);
12226
+ }
12227
+
12228
+ var oldInputValueOfValues = [];
12229
+ for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
12230
+ oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails
12231
+ }
12232
+
12233
+ return scope.$watch(function expressionInputsWatch(scope) {
12234
+ var changed = false;
12235
+
12236
+ for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
12237
+ var newInputValue = inputExpressions[i](scope);
12238
+ if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
12239
+ oldInputValueOfValues[i] = newInputValue && newInputValue.valueOf();
12240
+ }
12241
+ }
12242
+
12243
+ if (changed) {
12244
+ lastResult = parsedExpression(scope);
12245
+ }
12246
+
12247
+ return lastResult;
12248
+ }, listener, objectEquality);
12249
+ }
12250
+
12251
+ function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12252
+ var unwatch, lastValue;
12253
+ return unwatch = scope.$watch(function oneTimeWatch(scope) {
12254
+ return parsedExpression(scope);
12255
+ }, function oneTimeListener(value, old, scope) {
12256
+ lastValue = value;
12257
+ if (isFunction(listener)) {
12258
+ listener.apply(this, arguments);
12259
+ }
12260
+ if (isDefined(value)) {
12261
+ scope.$$postDigest(function () {
12262
+ if (isDefined(lastValue)) {
12263
+ unwatch();
12264
+ }
12265
+ });
12266
+ }
12267
+ }, objectEquality);
12268
+ }
12269
+
12270
+ function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12271
+ var unwatch;
12272
+ return unwatch = scope.$watch(function oneTimeWatch(scope) {
12273
+ return parsedExpression(scope);
12274
+ }, function oneTimeListener(value, old, scope) {
12275
+ if (isFunction(listener)) {
12276
+ listener.call(this, value, old, scope);
12277
+ }
12278
+ if (isAllDefined(value)) {
12279
+ scope.$$postDigest(function () {
12280
+ if(isAllDefined(value)) unwatch();
12281
+ });
12282
+ }
12283
+ }, objectEquality);
12284
+
12285
+ function isAllDefined(value) {
12286
+ var allDefined = true;
12287
+ forEach(value, function (val) {
12288
+ if (!isDefined(val)) allDefined = false;
12289
+ });
12290
+ return allDefined;
12291
+ }
12292
+ }
12293
+
12294
+ function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {
12295
+ var unwatch;
12296
+ return unwatch = scope.$watch(function constantWatch(scope) {
12297
+ return parsedExpression(scope);
12298
+ }, function constantListener(value, old, scope) {
12299
+ if (isFunction(listener)) {
12300
+ listener.apply(this, arguments);
12301
+ }
12302
+ unwatch();
12303
+ }, objectEquality);
12304
+ }
12305
+
12306
+ function addInterceptor(parsedExpression, interceptorFn) {
12307
+ if (!interceptorFn) return parsedExpression;
12308
+
12309
+ var fn = function interceptedExpression(scope, locals) {
12310
+ var value = parsedExpression(scope, locals);
12311
+ var result = interceptorFn(value, scope, locals);
12312
+ // we only return the interceptor's result if the
12313
+ // initial value is defined (for bind-once)
12314
+ return isDefined(value) ? result : value;
12315
+ };
12316
+
12317
+ // Propagate $$watchDelegates other then inputsWatchDelegate
12318
+ if (parsedExpression.$$watchDelegate &&
12319
+ parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
12320
+ fn.$$watchDelegate = parsedExpression.$$watchDelegate;
12321
+ } else if (!interceptorFn.$stateful) {
12322
+ // If there is an interceptor, but no watchDelegate then treat the interceptor like
12323
+ // we treat filters - it is assumed to be a pure function unless flagged with $stateful
12324
+ fn.$$watchDelegate = inputsWatchDelegate;
12325
+ fn.inputs = [parsedExpression];
12326
+ }
12327
+
12328
+ return fn;
12329
+ }
12330
+ }];
12331
+}
12332
+
12333
+/**
12334
+ * @ngdoc service
12335
+ * @name $q
12336
+ * @requires $rootScope
12337
+ *
12338
+ * @description
12339
+ * A promise/deferred implementation inspired by [Kris Kowal's Q](https://github.com/kriskowal/q).
12340
+ *
12341
+ * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred
12342
+ * implementations, and the other which resembles ES6 promises to some degree.
12343
+ *
12344
+ * # $q constructor
12345
+ *
12346
+ * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`
12347
+ * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,
12348
+ * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
12349
+ *
12350
+ * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are
12351
+ * available yet.
12352
+ *
12353
+ * It can be used like so:
12354
+ *
12355
+ * ```js
12356
+ * return $q(function(resolve, reject) {
12357
+ * // perform some asynchronous operation, resolve or reject the promise when appropriate.
12358
+ * setInterval(function() {
12359
+ * if (pollStatus > 0) {
12360
+ * resolve(polledValue);
12361
+ * } else if (pollStatus < 0) {
12362
+ * reject(polledValue);
12363
+ * } else {
12364
+ * pollStatus = pollAgain(function(value) {
12365
+ * polledValue = value;
12366
+ * });
12367
+ * }
12368
+ * }, 10000);
12369
+ * }).
12370
+ * then(function(value) {
12371
+ * // handle success
12372
+ * }, function(reason) {
12373
+ * // handle failure
12374
+ * });
12375
+ * ```
12376
+ *
12377
+ * Note: progress/notify callbacks are not currently supported via the ES6-style interface.
12378
+ *
12379
+ * However, the more traditional CommonJS-style usage is still available, and documented below.
12380
+ *
12381
+ * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an
12382
+ * interface for interacting with an object that represents the result of an action that is
12383
+ * performed asynchronously, and may or may not be finished at any given point in time.
12384
+ *
12385
+ * From the perspective of dealing with error handling, deferred and promise APIs are to
12386
+ * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.
12387
+ *
12388
+ * ```js
12389
+ * // for the purpose of this example let's assume that variables `$q`, `scope` and `okToGreet`
12390
+ * // are available in the current lexical scope (they could have been injected or passed in).
12391
+ *
12392
+ * function asyncGreet(name) {
12393
+ * var deferred = $q.defer();
12394
+ *
12395
+ * setTimeout(function() {
12396
+ * deferred.notify('About to greet ' + name + '.');
12397
+ *
12398
+ * if (okToGreet(name)) {
12399
+ * deferred.resolve('Hello, ' + name + '!');
12400
+ * } else {
12401
+ * deferred.reject('Greeting ' + name + ' is not allowed.');
12402
+ * }
12403
+ * }, 1000);
12404
+ *
12405
+ * return deferred.promise;
12406
+ * }
12407
+ *
12408
+ * var promise = asyncGreet('Robin Hood');
12409
+ * promise.then(function(greeting) {
12410
+ * alert('Success: ' + greeting);
12411
+ * }, function(reason) {
12412
+ * alert('Failed: ' + reason);
12413
+ * }, function(update) {
12414
+ * alert('Got notification: ' + update);
12415
+ * });
12416
+ * ```
12417
+ *
12418
+ * At first it might not be obvious why this extra complexity is worth the trouble. The payoff
12419
+ * comes in the way of guarantees that promise and deferred APIs make, see
12420
+ * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.
12421
+ *
12422
+ * Additionally the promise api allows for composition that is very hard to do with the
12423
+ * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.
12424
+ * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the
12425
+ * section on serial or parallel joining of promises.
12426
+ *
12427
+ * # The Deferred API
12428
+ *
12429
+ * A new instance of deferred is constructed by calling `$q.defer()`.
12430
+ *
12431
+ * The purpose of the deferred object is to expose the associated Promise instance as well as APIs
12432
+ * that can be used for signaling the successful or unsuccessful completion, as well as the status
12433
+ * of the task.
12434
+ *
12435
+ * **Methods**
12436
+ *
12437
+ * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection
12438
+ * constructed via `$q.reject`, the promise will be rejected instead.
12439
+ * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to
12440
+ * resolving it with a rejection constructed via `$q.reject`.
12441
+ * - `notify(value)` - provides updates on the status of the promise's execution. This may be called
12442
+ * multiple times before the promise is either resolved or rejected.
12443
+ *
12444
+ * **Properties**
12445
+ *
12446
+ * - promise – `{Promise}` – promise object associated with this deferred.
12447
+ *
12448
+ *
12449
+ * # The Promise API
12450
+ *
12451
+ * A new promise instance is created when a deferred instance is created and can be retrieved by
12452
+ * calling `deferred.promise`.
12453
+ *
12454
+ * The purpose of the promise object is to allow for interested parties to get access to the result
12455
+ * of the deferred task when it completes.
12456
+ *
12457
+ * **Methods**
12458
+ *
12459
+ * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
12460
+ * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
12461
+ * as soon as the result is available. The callbacks are called with a single argument: the result
12462
+ * or rejection reason. Additionally, the notify callback may be called zero or more times to
12463
+ * provide a progress indication, before the promise is resolved or rejected.
12464
+ *
12465
+ * This method *returns a new promise* which is resolved or rejected via the return value of the
12466
+ * `successCallback`, `errorCallback`. It also notifies via the return value of the
12467
+ * `notifyCallback` method. The promise cannot be resolved or rejected from the notifyCallback
12468
+ * method.
12469
+ *
12470
+ * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
12471
+ *
12472
+ * - `finally(callback)` – allows you to observe either the fulfillment or rejection of a promise,
12473
+ * but to do so without modifying the final value. This is useful to release resources or do some
12474
+ * clean-up that needs to be done whether the promise was rejected or resolved. See the [full
12475
+ * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for
12476
+ * more information.
12477
+ *
12478
+ * Because `finally` is a reserved word in JavaScript and reserved keywords are not supported as
12479
+ * property names by ES3, you'll need to invoke the method like `promise['finally'](callback)` to
12480
+ * make your code IE8 and Android 2.x compatible.
12481
+ *
12482
+ * # Chaining promises
12483
+ *
12484
+ * Because calling the `then` method of a promise returns a new derived promise, it is easily
12485
+ * possible to create a chain of promises:
12486
+ *
12487
+ * ```js
12488
+ * promiseB = promiseA.then(function(result) {
12489
+ * return result + 1;
12490
+ * });
12491
+ *
12492
+ * // promiseB will be resolved immediately after promiseA is resolved and its value
12493
+ * // will be the result of promiseA incremented by 1
12494
+ * ```
12495
+ *
12496
+ * It is possible to create chains of any length and since a promise can be resolved with another
12497
+ * promise (which will defer its resolution further), it is possible to pause/defer resolution of
12498
+ * the promises at any point in the chain. This makes it possible to implement powerful APIs like
12499
+ * $http's response interceptors.
12500
+ *
12501
+ *
12502
+ * # Differences between Kris Kowal's Q and $q
12503
+ *
12504
+ * There are two main differences:
12505
+ *
12506
+ * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation
12507
+ * mechanism in angular, which means faster propagation of resolution or rejection into your
12508
+ * models and avoiding unnecessary browser repaints, which would result in flickering UI.
12509
+ * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains
12510
+ * all the important functionality needed for common async tasks.
12511
+ *
12512
+ * # Testing
12513
+ *
12514
+ * ```js
12515
+ * it('should simulate promise', inject(function($q, $rootScope) {
12516
+ * var deferred = $q.defer();
12517
+ * var promise = deferred.promise;
12518
+ * var resolvedValue;
12519
+ *
12520
+ * promise.then(function(value) { resolvedValue = value; });
12521
+ * expect(resolvedValue).toBeUndefined();
12522
+ *
12523
+ * // Simulate resolving of promise
12524
+ * deferred.resolve(123);
12525
+ * // Note that the 'then' function does not get called synchronously.
12526
+ * // This is because we want the promise API to always be async, whether or not
12527
+ * // it got called synchronously or asynchronously.
12528
+ * expect(resolvedValue).toBeUndefined();
12529
+ *
12530
+ * // Propagate promise resolution to 'then' functions using $apply().
12531
+ * $rootScope.$apply();
12532
+ * expect(resolvedValue).toEqual(123);
12533
+ * }));
12534
+ * ```
12535
+ *
12536
+ * @param {function(function, function)} resolver Function which is responsible for resolving or
12537
+ * rejecting the newly created promise. The first parameter is a function which resolves the
12538
+ * promise, the second parameter is a function which rejects the promise.
12539
+ *
12540
+ * @returns {Promise} The newly created promise.
12541
+ */
12542
+function $QProvider() {
12543
+
12544
+ this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
12545
+ return qFactory(function(callback) {
12546
+ $rootScope.$evalAsync(callback);
12547
+ }, $exceptionHandler);
12548
+ }];
12549
+}
12550
+
12551
+function $$QProvider() {
12552
+ this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
12553
+ return qFactory(function(callback) {
12554
+ $browser.defer(callback);
12555
+ }, $exceptionHandler);
12556
+ }];
12557
+}
12558
+
12559
+/**
12560
+ * Constructs a promise manager.
12561
+ *
12562
+ * @param {function(function)} nextTick Function for executing functions in the next turn.
12563
+ * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for
12564
+ * debugging purposes.
12565
+ * @returns {object} Promise manager.
12566
+ */
12567
+function qFactory(nextTick, exceptionHandler) {
12568
+ var $qMinErr = minErr('$q', TypeError);
12569
+ function callOnce(self, resolveFn, rejectFn) {
12570
+ var called = false;
12571
+ function wrap(fn) {
12572
+ return function(value) {
12573
+ if (called) return;
12574
+ called = true;
12575
+ fn.call(self, value);
12576
+ };
12577
+ }
12578
+
12579
+ return [wrap(resolveFn), wrap(rejectFn)];
12580
+ }
12581
+
12582
+ /**
12583
+ * @ngdoc method
12584
+ * @name ng.$q#defer
12585
+ * @kind function
12586
+ *
12587
+ * @description
12588
+ * Creates a `Deferred` object which represents a task which will finish in the future.
12589
+ *
12590
+ * @returns {Deferred} Returns a new instance of deferred.
12591
+ */
12592
+ var defer = function() {
12593
+ return new Deferred();
12594
+ };
12595
+
12596
+ function Promise() {
12597
+ this.$$state = { status: 0 };
12598
+ }
12599
+
12600
+ Promise.prototype = {
12601
+ then: function(onFulfilled, onRejected, progressBack) {
12602
+ var result = new Deferred();
12603
+
12604
+ this.$$state.pending = this.$$state.pending || [];
12605
+ this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
12606
+ if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
12607
+
12608
+ return result.promise;
12609
+ },
12610
+
12611
+ "catch": function(callback) {
12612
+ return this.then(null, callback);
12613
+ },
12614
+
12615
+ "finally": function(callback, progressBack) {
12616
+ return this.then(function(value) {
12617
+ return handleCallback(value, true, callback);
12618
+ }, function(error) {
12619
+ return handleCallback(error, false, callback);
12620
+ }, progressBack);
12621
+ }
12622
+ };
12623
+
12624
+ //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
12625
+ function simpleBind(context, fn) {
12626
+ return function(value) {
12627
+ fn.call(context, value);
12628
+ };
12629
+ }
12630
+
12631
+ function processQueue(state) {
12632
+ var fn, promise, pending;
12633
+
12634
+ pending = state.pending;
12635
+ state.processScheduled = false;
12636
+ state.pending = undefined;
12637
+ for (var i = 0, ii = pending.length; i < ii; ++i) {
12638
+ promise = pending[i][0];
12639
+ fn = pending[i][state.status];
12640
+ try {
12641
+ if (isFunction(fn)) {
12642
+ promise.resolve(fn(state.value));
12643
+ } else if (state.status === 1) {
12644
+ promise.resolve(state.value);
12645
+ } else {
12646
+ promise.reject(state.value);
12647
+ }
12648
+ } catch(e) {
12649
+ promise.reject(e);
12650
+ exceptionHandler(e);
12651
+ }
12652
+ }
12653
+ }
12654
+
12655
+ function scheduleProcessQueue(state) {
12656
+ if (state.processScheduled || !state.pending) return;
12657
+ state.processScheduled = true;
12658
+ nextTick(function() { processQueue(state); });
12659
+ }
12660
+
12661
+ function Deferred() {
12662
+ this.promise = new Promise();
12663
+ //Necessary to support unbound execution :/
12664
+ this.resolve = simpleBind(this, this.resolve);
12665
+ this.reject = simpleBind(this, this.reject);
12666
+ this.notify = simpleBind(this, this.notify);
12667
+ }
12668
+
12669
+ Deferred.prototype = {
12670
+ resolve: function(val) {
12671
+ if (this.promise.$$state.status) return;
12672
+ if (val === this.promise) {
12673
+ this.$$reject($qMinErr(
12674
+ 'qcycle',
12675
+ "Expected promise to be resolved with value other than itself '{0}'",
12676
+ val));
12677
+ }
12678
+ else {
12679
+ this.$$resolve(val);
12680
+ }
12681
+
12682
+ },
12683
+
12684
+ $$resolve: function(val) {
12685
+ var then, fns;
12686
+
12687
+ fns = callOnce(this, this.$$resolve, this.$$reject);
12688
+ try {
12689
+ if ((isObject(val) || isFunction(val))) then = val && val.then;
12690
+ if (isFunction(then)) {
12691
+ this.promise.$$state.status = -1;
12692
+ then.call(val, fns[0], fns[1], this.notify);
12693
+ } else {
12694
+ this.promise.$$state.value = val;
12695
+ this.promise.$$state.status = 1;
12696
+ scheduleProcessQueue(this.promise.$$state);
12697
+ }
12698
+ } catch(e) {
12699
+ fns[1](e);
12700
+ exceptionHandler(e);
12701
+ }
12702
+ },
12703
+
12704
+ reject: function(reason) {
12705
+ if (this.promise.$$state.status) return;
12706
+ this.$$reject(reason);
12707
+ },
12708
+
12709
+ $$reject: function(reason) {
12710
+ this.promise.$$state.value = reason;
12711
+ this.promise.$$state.status = 2;
12712
+ scheduleProcessQueue(this.promise.$$state);
12713
+ },
12714
+
12715
+ notify: function(progress) {
12716
+ var callbacks = this.promise.$$state.pending;
12717
+
12718
+ if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {
12719
+ nextTick(function() {
12720
+ var callback, result;
12721
+ for (var i = 0, ii = callbacks.length; i < ii; i++) {
12722
+ result = callbacks[i][0];
12723
+ callback = callbacks[i][3];
12724
+ try {
12725
+ result.notify(isFunction(callback) ? callback(progress) : progress);
12726
+ } catch(e) {
12727
+ exceptionHandler(e);
12728
+ }
12729
+ }
12730
+ });
12731
+ }
12732
+ }
12733
+ };
12734
+
12735
+ /**
12736
+ * @ngdoc method
12737
+ * @name $q#reject
12738
+ * @kind function
12739
+ *
12740
+ * @description
12741
+ * Creates a promise that is resolved as rejected with the specified `reason`. This api should be
12742
+ * used to forward rejection in a chain of promises. If you are dealing with the last promise in
12743
+ * a promise chain, you don't need to worry about it.
12744
+ *
12745
+ * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of
12746
+ * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via
12747
+ * a promise error callback and you want to forward the error to the promise derived from the
12748
+ * current promise, you have to "rethrow" the error by returning a rejection constructed via
12749
+ * `reject`.
12750
+ *
12751
+ * ```js
12752
+ * promiseB = promiseA.then(function(result) {
12753
+ * // success: do something and resolve promiseB
12754
+ * // with the old or a new result
12755
+ * return result;
12756
+ * }, function(reason) {
12757
+ * // error: handle the error if possible and
12758
+ * // resolve promiseB with newPromiseOrValue,
12759
+ * // otherwise forward the rejection to promiseB
12760
+ * if (canHandle(reason)) {
12761
+ * // handle the error and recover
12762
+ * return newPromiseOrValue;
12763
+ * }
12764
+ * return $q.reject(reason);
12765
+ * });
12766
+ * ```
12767
+ *
12768
+ * @param {*} reason Constant, message, exception or an object representing the rejection reason.
12769
+ * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
12770
+ */
12771
+ var reject = function(reason) {
12772
+ var result = new Deferred();
12773
+ result.reject(reason);
12774
+ return result.promise;
12775
+ };
12776
+
12777
+ var makePromise = function makePromise(value, resolved) {
12778
+ var result = new Deferred();
12779
+ if (resolved) {
12780
+ result.resolve(value);
12781
+ } else {
12782
+ result.reject(value);
12783
+ }
12784
+ return result.promise;
12785
+ };
12786
+
12787
+ var handleCallback = function handleCallback(value, isResolved, callback) {
12788
+ var callbackOutput = null;
12789
+ try {
12790
+ if (isFunction(callback)) callbackOutput = callback();
12791
+ } catch(e) {
12792
+ return makePromise(e, false);
12793
+ }
12794
+ if (isPromiseLike(callbackOutput)) {
12795
+ return callbackOutput.then(function() {
12796
+ return makePromise(value, isResolved);
12797
+ }, function(error) {
12798
+ return makePromise(error, false);
12799
+ });
12800
+ } else {
12801
+ return makePromise(value, isResolved);
12802
+ }
12803
+ };
12804
+
12805
+ /**
12806
+ * @ngdoc method
12807
+ * @name $q#when
12808
+ * @kind function
12809
+ *
12810
+ * @description
12811
+ * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.
12812
+ * This is useful when you are dealing with an object that might or might not be a promise, or if
12813
+ * the promise comes from a source that can't be trusted.
12814
+ *
12815
+ * @param {*} value Value or a promise
12816
+ * @returns {Promise} Returns a promise of the passed value or promise
12817
+ */
12818
+
12819
+
12820
+ var when = function(value, callback, errback, progressBack) {
12821
+ var result = new Deferred();
12822
+ result.resolve(value);
12823
+ return result.promise.then(callback, errback, progressBack);
12824
+ };
12825
+
12826
+ /**
12827
+ * @ngdoc method
12828
+ * @name $q#all
12829
+ * @kind function
12830
+ *
12831
+ * @description
12832
+ * Combines multiple promises into a single promise that is resolved when all of the input
12833
+ * promises are resolved.
12834
+ *
12835
+ * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
12836
+ * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,
12837
+ * each value corresponding to the promise at the same index/key in the `promises` array/hash.
12838
+ * If any of the promises is resolved with a rejection, this resulting promise will be rejected
12839
+ * with the same rejection value.
12840
+ */
12841
+
12842
+ function all(promises) {
12843
+ var deferred = new Deferred(),
12844
+ counter = 0,
12845
+ results = isArray(promises) ? [] : {};
12846
+
12847
+ forEach(promises, function(promise, key) {
12848
+ counter++;
12849
+ when(promise).then(function(value) {
12850
+ if (results.hasOwnProperty(key)) return;
12851
+ results[key] = value;
12852
+ if (!(--counter)) deferred.resolve(results);
12853
+ }, function(reason) {
12854
+ if (results.hasOwnProperty(key)) return;
12855
+ deferred.reject(reason);
12856
+ });
12857
+ });
12858
+
12859
+ if (counter === 0) {
12860
+ deferred.resolve(results);
12861
+ }
12862
+
12863
+ return deferred.promise;
12864
+ }
12865
+
12866
+ var $Q = function Q(resolver) {
12867
+ if (!isFunction(resolver)) {
12868
+ throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver);
12869
+ }
12870
+
12871
+ if (!(this instanceof Q)) {
12872
+ // More useful when $Q is the Promise itself.
12873
+ return new Q(resolver);
12874
+ }
12875
+
12876
+ var deferred = new Deferred();
12877
+
12878
+ function resolveFn(value) {
12879
+ deferred.resolve(value);
12880
+ }
12881
+
12882
+ function rejectFn(reason) {
12883
+ deferred.reject(reason);
12884
+ }
12885
+
12886
+ resolver(resolveFn, rejectFn);
12887
+
12888
+ return deferred.promise;
12889
+ };
12890
+
12891
+ $Q.defer = defer;
12892
+ $Q.reject = reject;
12893
+ $Q.when = when;
12894
+ $Q.all = all;
12895
+
12896
+ return $Q;
12897
+}
12898
+
12899
+function $$RAFProvider(){ //rAF
12900
+ this.$get = ['$window', '$timeout', function($window, $timeout) {
12901
+ var requestAnimationFrame = $window.requestAnimationFrame ||
12902
+ $window.webkitRequestAnimationFrame ||
12903
+ $window.mozRequestAnimationFrame;
12904
+
12905
+ var cancelAnimationFrame = $window.cancelAnimationFrame ||
12906
+ $window.webkitCancelAnimationFrame ||
12907
+ $window.mozCancelAnimationFrame ||
12908
+ $window.webkitCancelRequestAnimationFrame;
12909
+
12910
+ var rafSupported = !!requestAnimationFrame;
12911
+ var raf = rafSupported
12912
+ ? function(fn) {
12913
+ var id = requestAnimationFrame(fn);
12914
+ return function() {
12915
+ cancelAnimationFrame(id);
12916
+ };
12917
+ }
12918
+ : function(fn) {
12919
+ var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666
12920
+ return function() {
12921
+ $timeout.cancel(timer);
12922
+ };
12923
+ };
12924
+
12925
+ raf.supported = rafSupported;
12926
+
12927
+ return raf;
12928
+ }];
12929
+}
12930
+
12931
+/**
12932
+ * DESIGN NOTES
12933
+ *
12934
+ * The design decisions behind the scope are heavily favored for speed and memory consumption.
12935
+ *
12936
+ * The typical use of scope is to watch the expressions, which most of the time return the same
12937
+ * value as last time so we optimize the operation.
12938
+ *
12939
+ * Closures construction is expensive in terms of speed as well as memory:
12940
+ * - No closures, instead use prototypical inheritance for API
12941
+ * - Internal state needs to be stored on scope directly, which means that private state is
12942
+ * exposed as $$____ properties
12943
+ *
12944
+ * Loop operations are optimized by using while(count--) { ... }
12945
+ * - this means that in order to keep the same order of execution as addition we have to add
12946
+ * items to the array at the beginning (unshift) instead of at the end (push)
12947
+ *
12948
+ * Child scopes are created and removed often
12949
+ * - Using an array would be slow since inserts in middle are expensive so we use linked list
12950
+ *
12951
+ * There are few watches then a lot of observers. This is why you don't want the observer to be
12952
+ * implemented in the same way as watch. Watch requires return of initialization function which
12953
+ * are expensive to construct.
12954
+ */
12955
+
12956
+
12957
+/**
12958
+ * @ngdoc provider
12959
+ * @name $rootScopeProvider
12960
+ * @description
12961
+ *
12962
+ * Provider for the $rootScope service.
12963
+ */
12964
+
12965
+/**
12966
+ * @ngdoc method
12967
+ * @name $rootScopeProvider#digestTtl
12968
+ * @description
12969
+ *
12970
+ * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and
12971
+ * assuming that the model is unstable.
12972
+ *
12973
+ * The current default is 10 iterations.
12974
+ *
12975
+ * In complex applications it's possible that the dependencies between `$watch`s will result in
12976
+ * several digest iterations. However if an application needs more than the default 10 digest
12977
+ * iterations for its model to stabilize then you should investigate what is causing the model to
12978
+ * continuously change during the digest.
12979
+ *
12980
+ * Increasing the TTL could have performance implications, so you should not change it without
12981
+ * proper justification.
12982
+ *
12983
+ * @param {number} limit The number of digest iterations.
12984
+ */
12985
+
12986
+
12987
+/**
12988
+ * @ngdoc service
12989
+ * @name $rootScope
12990
+ * @description
12991
+ *
12992
+ * Every application has a single root {@link ng.$rootScope.Scope scope}.
12993
+ * All other scopes are descendant scopes of the root scope. Scopes provide separation
12994
+ * between the model and the view, via a mechanism for watching the model for changes.
12995
+ * They also provide an event emission/broadcast and subscription facility. See the
12996
+ * {@link guide/scope developer guide on scopes}.
12997
+ */
12998
+function $RootScopeProvider(){
12999
+ var TTL = 10;
13000
+ var $rootScopeMinErr = minErr('$rootScope');
13001
+ var lastDirtyWatch = null;
13002
+ var applyAsyncId = null;
13003
+
13004
+ this.digestTtl = function(value) {
13005
+ if (arguments.length) {
13006
+ TTL = value;
13007
+ }
13008
+ return TTL;
13009
+ };
13010
+
13011
+ this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
13012
+ function( $injector, $exceptionHandler, $parse, $browser) {
13013
+
13014
+ /**
13015
+ * @ngdoc type
13016
+ * @name $rootScope.Scope
13017
+ *
13018
+ * @description
13019
+ * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
13020
+ * {@link auto.$injector $injector}. Child scopes are created using the
13021
+ * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
13022
+ * compiled HTML template is executed.)
13023
+ *
13024
+ * Here is a simple scope snippet to show how you can interact with the scope.
13025
+ * ```html
13026
+ * <file src="./test/ng/rootScopeSpec.js" tag="docs1" />
13027
+ * ```
13028
+ *
13029
+ * # Inheritance
13030
+ * A scope can inherit from a parent scope, as in this example:
13031
+ * ```js
13032
+ var parent = $rootScope;
13033
+ var child = parent.$new();
13034
+
13035
+ parent.salutation = "Hello";
13036
+ child.name = "World";
13037
+ expect(child.salutation).toEqual('Hello');
13038
+
13039
+ child.salutation = "Welcome";
13040
+ expect(child.salutation).toEqual('Welcome');
13041
+ expect(parent.salutation).toEqual('Hello');
13042
+ * ```
13043
+ *
13044
+ *
13045
+ * @param {Object.<string, function()>=} providers Map of service factory which need to be
13046
+ * provided for the current scope. Defaults to {@link ng}.
13047
+ * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should
13048
+ * append/override services provided by `providers`. This is handy
13049
+ * when unit-testing and having the need to override a default
13050
+ * service.
13051
+ * @returns {Object} Newly created scope.
13052
+ *
13053
+ */
13054
+ function Scope() {
13055
+ this.$id = nextUid();
13056
+ this.$$phase = this.$parent = this.$$watchers =
13057
+ this.$$nextSibling = this.$$prevSibling =
13058
+ this.$$childHead = this.$$childTail = null;
13059
+ this.$root = this;
13060
+ this.$$destroyed = false;
13061
+ this.$$listeners = {};
13062
+ this.$$listenerCount = {};
13063
+ this.$$isolateBindings = null;
13064
+ }
13065
+
13066
+ /**
13067
+ * @ngdoc property
13068
+ * @name $rootScope.Scope#$id
13069
+ *
13070
+ * @description
13071
+ * Unique scope ID (monotonically increasing) useful for debugging.
13072
+ */
13073
+
13074
+ /**
13075
+ * @ngdoc property
13076
+ * @name $rootScope.Scope#$parent
13077
+ *
13078
+ * @description
13079
+ * Reference to the parent scope.
13080
+ */
13081
+
13082
+ /**
13083
+ * @ngdoc property
13084
+ * @name $rootScope.Scope#$root
13085
+ *
13086
+ * @description
13087
+ * Reference to the root scope.
13088
+ */
13089
+
13090
+ Scope.prototype = {
13091
+ constructor: Scope,
13092
+ /**
13093
+ * @ngdoc method
13094
+ * @name $rootScope.Scope#$new
13095
+ * @kind function
13096
+ *
13097
+ * @description
13098
+ * Creates a new child {@link ng.$rootScope.Scope scope}.
13099
+ *
13100
+ * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.
13101
+ * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
13102
+ *
13103
+ * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
13104
+ * desired for the scope and its child scopes to be permanently detached from the parent and
13105
+ * thus stop participating in model change detection and listener notification by invoking.
13106
+ *
13107
+ * @param {boolean} isolate If true, then the scope does not prototypically inherit from the
13108
+ * parent scope. The scope is isolated, as it can not see parent scope properties.
13109
+ * When creating widgets, it is useful for the widget to not accidentally read parent
13110
+ * state.
13111
+ *
13112
+ * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`
13113
+ * of the newly created scope. Defaults to `this` scope if not provided.
13114
+ * This is used when creating a transclude scope to correctly place it
13115
+ * in the scope hierarchy while maintaining the correct prototypical
13116
+ * inheritance.
13117
+ *
13118
+ * @returns {Object} The newly created child scope.
13119
+ *
13120
+ */
13121
+ $new: function(isolate, parent) {
13122
+ var child;
13123
+
13124
+ parent = parent || this;
13125
+
13126
+ if (isolate) {
13127
+ child = new Scope();
13128
+ child.$root = this.$root;
13129
+ } else {
13130
+ // Only create a child scope class if somebody asks for one,
13131
+ // but cache it to allow the VM to optimize lookups.
13132
+ if (!this.$$ChildScope) {
13133
+ this.$$ChildScope = function ChildScope() {
13134
+ this.$$watchers = this.$$nextSibling =
13135
+ this.$$childHead = this.$$childTail = null;
13136
+ this.$$listeners = {};
13137
+ this.$$listenerCount = {};
13138
+ this.$id = nextUid();
13139
+ this.$$ChildScope = null;
13140
+ };
13141
+ this.$$ChildScope.prototype = this;
13142
+ }
13143
+ child = new this.$$ChildScope();
13144
+ }
13145
+ child.$parent = parent;
13146
+ child.$$prevSibling = parent.$$childTail;
13147
+ if (parent.$$childHead) {
13148
+ parent.$$childTail.$$nextSibling = child;
13149
+ parent.$$childTail = child;
13150
+ } else {
13151
+ parent.$$childHead = parent.$$childTail = child;
13152
+ }
13153
+
13154
+ // When the new scope is not isolated or we inherit from `this`, and
13155
+ // the parent scope is destroyed, the property `$$destroyed` is inherited
13156
+ // prototypically. In all other cases, this property needs to be set
13157
+ // when the parent scope is destroyed.
13158
+ // The listener needs to be added after the parent is set
13159
+ if (isolate || parent != this) child.$on('$destroy', destroyChild);
13160
+
13161
+ return child;
13162
+
13163
+ function destroyChild() {
13164
+ child.$$destroyed = true;
13165
+ }
13166
+ },
13167
+
13168
+ /**
13169
+ * @ngdoc method
13170
+ * @name $rootScope.Scope#$watch
13171
+ * @kind function
13172
+ *
13173
+ * @description
13174
+ * Registers a `listener` callback to be executed whenever the `watchExpression` changes.
13175
+ *
13176
+ * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest
13177
+ * $digest()} and should return the value that will be watched. (Since
13178
+ * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the
13179
+ * `watchExpression` can execute multiple times per
13180
+ * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.)
13181
+ * - The `listener` is called only when the value from the current `watchExpression` and the
13182
+ * previous call to `watchExpression` are not equal (with the exception of the initial run,
13183
+ * see below). Inequality is determined according to reference inequality,
13184
+ * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
13185
+ * via the `!==` Javascript operator, unless `objectEquality == true`
13186
+ * (see next point)
13187
+ * - When `objectEquality == true`, inequality of the `watchExpression` is determined
13188
+ * according to the {@link angular.equals} function. To save the value of the object for
13189
+ * later comparison, the {@link angular.copy} function is used. This therefore means that
13190
+ * watching complex objects will have adverse memory and performance implications.
13191
+ * - The watch `listener` may change the model, which may trigger other `listener`s to fire.
13192
+ * This is achieved by rerunning the watchers until no changes are detected. The rerun
13193
+ * iteration limit is 10 to prevent an infinite loop deadlock.
13194
+ *
13195
+ *
13196
+ * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
13197
+ * you can register a `watchExpression` function with no `listener`. (Since `watchExpression`
13198
+ * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a
13199
+ * change is detected, be prepared for multiple calls to your listener.)
13200
+ *
13201
+ * After a watcher is registered with the scope, the `listener` fn is called asynchronously
13202
+ * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
13203
+ * watcher. In rare cases, this is undesirable because the listener is called when the result
13204
+ * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you
13205
+ * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the
13206
+ * listener was called due to initialization.
13207
+ *
13208
+ *
13209
+ *
13210
+ * # Example
13211
+ * ```js
13212
+ // let's assume that scope was dependency injected as the $rootScope
13213
+ var scope = $rootScope;
13214
+ scope.name = 'misko';
13215
+ scope.counter = 0;
13216
+
13217
+ expect(scope.counter).toEqual(0);
13218
+ scope.$watch('name', function(newValue, oldValue) {
13219
+ scope.counter = scope.counter + 1;
13220
+ });
13221
+ expect(scope.counter).toEqual(0);
13222
+
13223
+ scope.$digest();
13224
+ // the listener is always called during the first $digest loop after it was registered
13225
+ expect(scope.counter).toEqual(1);
13226
+
13227
+ scope.$digest();
13228
+ // but now it will not be called unless the value changes
13229
+ expect(scope.counter).toEqual(1);
13230
+
13231
+ scope.name = 'adam';
13232
+ scope.$digest();
13233
+ expect(scope.counter).toEqual(2);
13234
+
13235
+
13236
+
13237
+ // Using a function as a watchExpression
13238
+ var food;
13239
+ scope.foodCounter = 0;
13240
+ expect(scope.foodCounter).toEqual(0);
13241
+ scope.$watch(
13242
+ // This function returns the value being watched. It is called for each turn of the $digest loop
13243
+ function() { return food; },
13244
+ // This is the change listener, called when the value returned from the above function changes
13245
+ function(newValue, oldValue) {
13246
+ if ( newValue !== oldValue ) {
13247
+ // Only increment the counter if the value changed
13248
+ scope.foodCounter = scope.foodCounter + 1;
13249
+ }
13250
+ }
13251
+ );
13252
+ // No digest has been run so the counter will be zero
13253
+ expect(scope.foodCounter).toEqual(0);
13254
+
13255
+ // Run the digest but since food has not changed count will still be zero
13256
+ scope.$digest();
13257
+ expect(scope.foodCounter).toEqual(0);
13258
+
13259
+ // Update food and run digest. Now the counter will increment
13260
+ food = 'cheeseburger';
13261
+ scope.$digest();
13262
+ expect(scope.foodCounter).toEqual(1);
13263
+
13264
+ * ```
13265
+ *
13266
+ *
13267
+ *
13268
+ * @param {(function()|string)} watchExpression Expression that is evaluated on each
13269
+ * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers
13270
+ * a call to the `listener`.
13271
+ *
13272
+ * - `string`: Evaluated as {@link guide/expression expression}
13273
+ * - `function(scope)`: called with current `scope` as a parameter.
13274
+ * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value
13275
+ * of `watchExpression` changes.
13276
+ *
13277
+ * - `newVal` contains the current value of the `watchExpression`
13278
+ * - `oldVal` contains the previous value of the `watchExpression`
13279
+ * - `scope` refers to the current scope
13280
+ * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
13281
+ * comparing for reference equality.
13282
+ * @returns {function()} Returns a deregistration function for this listener.
13283
+ */
13284
+ $watch: function(watchExp, listener, objectEquality) {
13285
+ var get = $parse(watchExp);
13286
+
13287
+ if (get.$$watchDelegate) {
13288
+ return get.$$watchDelegate(this, listener, objectEquality, get);
13289
+ }
13290
+ var scope = this,
13291
+ array = scope.$$watchers,
13292
+ watcher = {
13293
+ fn: listener,
13294
+ last: initWatchVal,
13295
+ get: get,
13296
+ exp: watchExp,
13297
+ eq: !!objectEquality
13298
+ };
13299
+
13300
+ lastDirtyWatch = null;
13301
+
13302
+ if (!isFunction(listener)) {
13303
+ watcher.fn = noop;
13304
+ }
13305
+
13306
+ if (!array) {
13307
+ array = scope.$$watchers = [];
13308
+ }
13309
+ // we use unshift since we use a while loop in $digest for speed.
13310
+ // the while loop reads in reverse order.
13311
+ array.unshift(watcher);
13312
+
13313
+ return function deregisterWatch() {
13314
+ arrayRemove(array, watcher);
13315
+ lastDirtyWatch = null;
13316
+ };
13317
+ },
13318
+
13319
+ /**
13320
+ * @ngdoc method
13321
+ * @name $rootScope.Scope#$watchGroup
13322
+ * @kind function
13323
+ *
13324
+ * @description
13325
+ * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.
13326
+ * If any one expression in the collection changes the `listener` is executed.
13327
+ *
13328
+ * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every
13329
+ * call to $digest() to see if any items changes.
13330
+ * - The `listener` is called whenever any expression in the `watchExpressions` array changes.
13331
+ *
13332
+ * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually
13333
+ * watched using {@link ng.$rootScope.Scope#$watch $watch()}
13334
+ *
13335
+ * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any
13336
+ * expression in `watchExpressions` changes
13337
+ * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching
13338
+ * those of `watchExpression`
13339
+ * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching
13340
+ * those of `watchExpression`
13341
+ * The `scope` refers to the current scope.
13342
+ * @returns {function()} Returns a de-registration function for all listeners.
13343
+ */
13344
+ $watchGroup: function(watchExpressions, listener) {
13345
+ var oldValues = new Array(watchExpressions.length);
13346
+ var newValues = new Array(watchExpressions.length);
13347
+ var deregisterFns = [];
13348
+ var self = this;
13349
+ var changeReactionScheduled = false;
13350
+ var firstRun = true;
13351
+
13352
+ if (!watchExpressions.length) {
13353
+ // No expressions means we call the listener ASAP
13354
+ var shouldCall = true;
13355
+ self.$evalAsync(function () {
13356
+ if (shouldCall) listener(newValues, newValues, self);
13357
+ });
13358
+ return function deregisterWatchGroup() {
13359
+ shouldCall = false;
13360
+ };
13361
+ }
13362
+
13363
+ if (watchExpressions.length === 1) {
13364
+ // Special case size of one
13365
+ return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {
13366
+ newValues[0] = value;
13367
+ oldValues[0] = oldValue;
13368
+ listener(newValues, (value === oldValue) ? newValues : oldValues, scope);
13369
+ });
13370
+ }
13371
+
13372
+ forEach(watchExpressions, function (expr, i) {
13373
+ var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {
13374
+ newValues[i] = value;
13375
+ oldValues[i] = oldValue;
13376
+ if (!changeReactionScheduled) {
13377
+ changeReactionScheduled = true;
13378
+ self.$evalAsync(watchGroupAction);
13379
+ }
13380
+ });
13381
+ deregisterFns.push(unwatchFn);
13382
+ });
13383
+
13384
+ function watchGroupAction() {
13385
+ changeReactionScheduled = false;
13386
+
13387
+ if (firstRun) {
13388
+ firstRun = false;
13389
+ listener(newValues, newValues, self);
13390
+ } else {
13391
+ listener(newValues, oldValues, self);
13392
+ }
13393
+ }
13394
+
13395
+ return function deregisterWatchGroup() {
13396
+ while (deregisterFns.length) {
13397
+ deregisterFns.shift()();
13398
+ }
13399
+ };
13400
+ },
13401
+
13402
+
13403
+ /**
13404
+ * @ngdoc method
13405
+ * @name $rootScope.Scope#$watchCollection
13406
+ * @kind function
13407
+ *
13408
+ * @description
13409
+ * Shallow watches the properties of an object and fires whenever any of the properties change
13410
+ * (for arrays, this implies watching the array items; for object maps, this implies watching
13411
+ * the properties). If a change is detected, the `listener` callback is fired.
13412
+ *
13413
+ * - The `obj` collection is observed via standard $watch operation and is examined on every
13414
+ * call to $digest() to see if any items have been added, removed, or moved.
13415
+ * - The `listener` is called whenever anything within the `obj` has changed. Examples include
13416
+ * adding, removing, and moving items belonging to an object or array.
13417
+ *
13418
+ *
13419
+ * # Example
13420
+ * ```js
13421
+ $scope.names = ['igor', 'matias', 'misko', 'james'];
13422
+ $scope.dataCount = 4;
13423
+
13424
+ $scope.$watchCollection('names', function(newNames, oldNames) {
13425
+ $scope.dataCount = newNames.length;
13426
+ });
13427
+
13428
+ expect($scope.dataCount).toEqual(4);
13429
+ $scope.$digest();
13430
+
13431
+ //still at 4 ... no changes
13432
+ expect($scope.dataCount).toEqual(4);
13433
+
13434
+ $scope.names.pop();
13435
+ $scope.$digest();
13436
+
13437
+ //now there's been a change
13438
+ expect($scope.dataCount).toEqual(3);
13439
+ * ```
13440
+ *
13441
+ *
13442
+ * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The
13443
+ * expression value should evaluate to an object or an array which is observed on each
13444
+ * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the
13445
+ * collection will trigger a call to the `listener`.
13446
+ *
13447
+ * @param {function(newCollection, oldCollection, scope)} listener a callback function called
13448
+ * when a change is detected.
13449
+ * - The `newCollection` object is the newly modified data obtained from the `obj` expression
13450
+ * - The `oldCollection` object is a copy of the former collection data.
13451
+ * Due to performance considerations, the`oldCollection` value is computed only if the
13452
+ * `listener` function declares two or more arguments.
13453
+ * - The `scope` argument refers to the current scope.
13454
+ *
13455
+ * @returns {function()} Returns a de-registration function for this listener. When the
13456
+ * de-registration function is executed, the internal watch operation is terminated.
13457
+ */
13458
+ $watchCollection: function(obj, listener) {
13459
+ $watchCollectionInterceptor.$stateful = true;
13460
+
13461
+ var self = this;
13462
+ // the current value, updated on each dirty-check run
13463
+ var newValue;
13464
+ // a shallow copy of the newValue from the last dirty-check run,
13465
+ // updated to match newValue during dirty-check run
13466
+ var oldValue;
13467
+ // a shallow copy of the newValue from when the last change happened
13468
+ var veryOldValue;
13469
+ // only track veryOldValue if the listener is asking for it
13470
+ var trackVeryOldValue = (listener.length > 1);
13471
+ var changeDetected = 0;
13472
+ var changeDetector = $parse(obj, $watchCollectionInterceptor);
13473
+ var internalArray = [];
13474
+ var internalObject = {};
13475
+ var initRun = true;
13476
+ var oldLength = 0;
13477
+
13478
+ function $watchCollectionInterceptor(_value) {
13479
+ newValue = _value;
13480
+ var newLength, key, bothNaN, newItem, oldItem;
13481
+
13482
+ if (!isObject(newValue)) { // if primitive
13483
+ if (oldValue !== newValue) {
13484
+ oldValue = newValue;
13485
+ changeDetected++;
13486
+ }
13487
+ } else if (isArrayLike(newValue)) {
13488
+ if (oldValue !== internalArray) {
13489
+ // we are transitioning from something which was not an array into array.
13490
+ oldValue = internalArray;
13491
+ oldLength = oldValue.length = 0;
13492
+ changeDetected++;
13493
+ }
13494
+
13495
+ newLength = newValue.length;
13496
+
13497
+ if (oldLength !== newLength) {
13498
+ // if lengths do not match we need to trigger change notification
13499
+ changeDetected++;
13500
+ oldValue.length = oldLength = newLength;
13501
+ }
13502
+ // copy the items to oldValue and look for changes.
13503
+ for (var i = 0; i < newLength; i++) {
13504
+ oldItem = oldValue[i];
13505
+ newItem = newValue[i];
13506
+
13507
+ bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
13508
+ if (!bothNaN && (oldItem !== newItem)) {
13509
+ changeDetected++;
13510
+ oldValue[i] = newItem;
13511
+ }
13512
+ }
13513
+ } else {
13514
+ if (oldValue !== internalObject) {
13515
+ // we are transitioning from something which was not an object into object.
13516
+ oldValue = internalObject = {};
13517
+ oldLength = 0;
13518
+ changeDetected++;
13519
+ }
13520
+ // copy the items to oldValue and look for changes.
13521
+ newLength = 0;
13522
+ for (key in newValue) {
13523
+ if (newValue.hasOwnProperty(key)) {
13524
+ newLength++;
13525
+ newItem = newValue[key];
13526
+ oldItem = oldValue[key];
13527
+
13528
+ if (key in oldValue) {
13529
+ bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
13530
+ if (!bothNaN && (oldItem !== newItem)) {
13531
+ changeDetected++;
13532
+ oldValue[key] = newItem;
13533
+ }
13534
+ } else {
13535
+ oldLength++;
13536
+ oldValue[key] = newItem;
13537
+ changeDetected++;
13538
+ }
13539
+ }
13540
+ }
13541
+ if (oldLength > newLength) {
13542
+ // we used to have more keys, need to find them and destroy them.
13543
+ changeDetected++;
13544
+ for(key in oldValue) {
13545
+ if (!newValue.hasOwnProperty(key)) {
13546
+ oldLength--;
13547
+ delete oldValue[key];
13548
+ }
13549
+ }
13550
+ }
13551
+ }
13552
+ return changeDetected;
13553
+ }
13554
+
13555
+ function $watchCollectionAction() {
13556
+ if (initRun) {
13557
+ initRun = false;
13558
+ listener(newValue, newValue, self);
13559
+ } else {
13560
+ listener(newValue, veryOldValue, self);
13561
+ }
13562
+
13563
+ // make a copy for the next time a collection is changed
13564
+ if (trackVeryOldValue) {
13565
+ if (!isObject(newValue)) {
13566
+ //primitive
13567
+ veryOldValue = newValue;
13568
+ } else if (isArrayLike(newValue)) {
13569
+ veryOldValue = new Array(newValue.length);
13570
+ for (var i = 0; i < newValue.length; i++) {
13571
+ veryOldValue[i] = newValue[i];
13572
+ }
13573
+ } else { // if object
13574
+ veryOldValue = {};
13575
+ for (var key in newValue) {
13576
+ if (hasOwnProperty.call(newValue, key)) {
13577
+ veryOldValue[key] = newValue[key];
13578
+ }
13579
+ }
13580
+ }
13581
+ }
13582
+ }
13583
+
13584
+ return this.$watch(changeDetector, $watchCollectionAction);
13585
+ },
13586
+
13587
+ /**
13588
+ * @ngdoc method
13589
+ * @name $rootScope.Scope#$digest
13590
+ * @kind function
13591
+ *
13592
+ * @description
13593
+ * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and
13594
+ * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change
13595
+ * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}
13596
+ * until no more listeners are firing. This means that it is possible to get into an infinite
13597
+ * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of
13598
+ * iterations exceeds 10.
13599
+ *
13600
+ * Usually, you don't call `$digest()` directly in
13601
+ * {@link ng.directive:ngController controllers} or in
13602
+ * {@link ng.$compileProvider#directive directives}.
13603
+ * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within
13604
+ * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.
13605
+ *
13606
+ * If you want to be notified whenever `$digest()` is called,
13607
+ * you can register a `watchExpression` function with
13608
+ * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.
13609
+ *
13610
+ * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.
13611
+ *
13612
+ * # Example
13613
+ * ```js
13614
+ var scope = ...;
13615
+ scope.name = 'misko';
13616
+ scope.counter = 0;
13617
+
13618
+ expect(scope.counter).toEqual(0);
13619
+ scope.$watch('name', function(newValue, oldValue) {
13620
+ scope.counter = scope.counter + 1;
13621
+ });
13622
+ expect(scope.counter).toEqual(0);
13623
+
13624
+ scope.$digest();
13625
+ // the listener is always called during the first $digest loop after it was registered
13626
+ expect(scope.counter).toEqual(1);
13627
+
13628
+ scope.$digest();
13629
+ // but now it will not be called unless the value changes
13630
+ expect(scope.counter).toEqual(1);
13631
+
13632
+ scope.name = 'adam';
13633
+ scope.$digest();
13634
+ expect(scope.counter).toEqual(2);
13635
+ * ```
13636
+ *
13637
+ */
13638
+ $digest: function() {
13639
+ var watch, value, last,
13640
+ watchers,
13641
+ length,
13642
+ dirty, ttl = TTL,
13643
+ next, current, target = this,
13644
+ watchLog = [],
13645
+ logIdx, logMsg, asyncTask;
13646
+
13647
+ beginPhase('$digest');
13648
+ // Check for changes to browser url that happened in sync before the call to $digest
13649
+ $browser.$$checkUrlChange();
13650
+
13651
+ if (this === $rootScope && applyAsyncId !== null) {
13652
+ // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then
13653
+ // cancel the scheduled $apply and flush the queue of expressions to be evaluated.
13654
+ $browser.defer.cancel(applyAsyncId);
13655
+ flushApplyAsync();
13656
+ }
13657
+
13658
+ lastDirtyWatch = null;
13659
+
13660
+ do { // "while dirty" loop
13661
+ dirty = false;
13662
+ current = target;
13663
+
13664
+ while(asyncQueue.length) {
13665
+ try {
13666
+ asyncTask = asyncQueue.shift();
13667
+ asyncTask.scope.$eval(asyncTask.expression);
13668
+ } catch (e) {
13669
+ $exceptionHandler(e);
13670
+ }
13671
+ lastDirtyWatch = null;
13672
+ }
13673
+
13674
+ traverseScopesLoop:
13675
+ do { // "traverse the scopes" loop
13676
+ if ((watchers = current.$$watchers)) {
13677
+ // process our watches
13678
+ length = watchers.length;
13679
+ while (length--) {
13680
+ try {
13681
+ watch = watchers[length];
13682
+ // Most common watches are on primitives, in which case we can short
13683
+ // circuit it with === operator, only when === fails do we use .equals
13684
+ if (watch) {
13685
+ if ((value = watch.get(current)) !== (last = watch.last) &&
13686
+ !(watch.eq
13687
+ ? equals(value, last)
13688
+ : (typeof value === 'number' && typeof last === 'number'
13689
+ && isNaN(value) && isNaN(last)))) {
13690
+ dirty = true;
13691
+ lastDirtyWatch = watch;
13692
+ watch.last = watch.eq ? copy(value, null) : value;
13693
+ watch.fn(value, ((last === initWatchVal) ? value : last), current);
13694
+ if (ttl < 5) {
13695
+ logIdx = 4 - ttl;
13696
+ if (!watchLog[logIdx]) watchLog[logIdx] = [];
13697
+ logMsg = (isFunction(watch.exp))
13698
+ ? 'fn: ' + (watch.exp.name || watch.exp.toString())
13699
+ : watch.exp;
13700
+ logMsg += '; newVal: ' + toJson(value) + '; oldVal: ' + toJson(last);
13701
+ watchLog[logIdx].push(logMsg);
13702
+ }
13703
+ } else if (watch === lastDirtyWatch) {
13704
+ // If the most recently dirty watcher is now clean, short circuit since the remaining watchers
13705
+ // have already been tested.
13706
+ dirty = false;
13707
+ break traverseScopesLoop;
13708
+ }
13709
+ }
13710
+ } catch (e) {
13711
+ $exceptionHandler(e);
13712
+ }
13713
+ }
13714
+ }
13715
+
13716
+ // Insanity Warning: scope depth-first traversal
13717
+ // yes, this code is a bit crazy, but it works and we have tests to prove it!
13718
+ // this piece should be kept in sync with the traversal in $broadcast
13719
+ if (!(next = (current.$$childHead ||
13720
+ (current !== target && current.$$nextSibling)))) {
13721
+ while(current !== target && !(next = current.$$nextSibling)) {
13722
+ current = current.$parent;
13723
+ }
13724
+ }
13725
+ } while ((current = next));
13726
+
13727
+ // `break traverseScopesLoop;` takes us to here
13728
+
13729
+ if((dirty || asyncQueue.length) && !(ttl--)) {
13730
+ clearPhase();
13731
+ throw $rootScopeMinErr('infdig',
13732
+ '{0} $digest() iterations reached. Aborting!\n' +
13733
+ 'Watchers fired in the last 5 iterations: {1}',
13734
+ TTL, toJson(watchLog));
13735
+ }
13736
+
13737
+ } while (dirty || asyncQueue.length);
13738
+
13739
+ clearPhase();
13740
+
13741
+ while(postDigestQueue.length) {
13742
+ try {
13743
+ postDigestQueue.shift()();
13744
+ } catch (e) {
13745
+ $exceptionHandler(e);
13746
+ }
13747
+ }
13748
+ },
13749
+
13750
+
13751
+ /**
13752
+ * @ngdoc event
13753
+ * @name $rootScope.Scope#$destroy
13754
+ * @eventType broadcast on scope being destroyed
13755
+ *
13756
+ * @description
13757
+ * Broadcasted when a scope and its children are being destroyed.
13758
+ *
13759
+ * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
13760
+ * clean up DOM bindings before an element is removed from the DOM.
13761
+ */
13762
+
13763
+ /**
13764
+ * @ngdoc method
13765
+ * @name $rootScope.Scope#$destroy
13766
+ * @kind function
13767
+ *
13768
+ * @description
13769
+ * Removes the current scope (and all of its children) from the parent scope. Removal implies
13770
+ * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer
13771
+ * propagate to the current scope and its children. Removal also implies that the current
13772
+ * scope is eligible for garbage collection.
13773
+ *
13774
+ * The `$destroy()` is usually used by directives such as
13775
+ * {@link ng.directive:ngRepeat ngRepeat} for managing the
13776
+ * unrolling of the loop.
13777
+ *
13778
+ * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.
13779
+ * Application code can register a `$destroy` event handler that will give it a chance to
13780
+ * perform any necessary cleanup.
13781
+ *
13782
+ * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
13783
+ * clean up DOM bindings before an element is removed from the DOM.
13784
+ */
13785
+ $destroy: function() {
13786
+ // we can't destroy the root scope or a scope that has been already destroyed
13787
+ if (this.$$destroyed) return;
13788
+ var parent = this.$parent;
13789
+
13790
+ this.$broadcast('$destroy');
13791
+ this.$$destroyed = true;
13792
+ if (this === $rootScope) return;
13793
+
13794
+ for (var eventName in this.$$listenerCount) {
13795
+ decrementListenerCount(this, this.$$listenerCount[eventName], eventName);
13796
+ }
13797
+
13798
+ // sever all the references to parent scopes (after this cleanup, the current scope should
13799
+ // not be retained by any of our references and should be eligible for garbage collection)
13800
+ if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
13801
+ if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
13802
+ if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
13803
+ if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
13804
+
13805
+ // Disable listeners, watchers and apply/digest methods
13806
+ this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
13807
+ this.$on = this.$watch = this.$watchGroup = function() { return noop; };
13808
+ this.$$listeners = {};
13809
+
13810
+ // All of the code below is bogus code that works around V8's memory leak via optimized code
13811
+ // and inline caches.
13812
+ //
13813
+ // see:
13814
+ // - https://code.google.com/p/v8/issues/detail?id=2073#c26
13815
+ // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909
13816
+ // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
13817
+
13818
+ this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
13819
+ this.$$childTail = this.$root = this.$$watchers = null;
13820
+ },
13821
+
13822
+ /**
13823
+ * @ngdoc method
13824
+ * @name $rootScope.Scope#$eval
13825
+ * @kind function
13826
+ *
13827
+ * @description
13828
+ * Executes the `expression` on the current scope and returns the result. Any exceptions in
13829
+ * the expression are propagated (uncaught). This is useful when evaluating Angular
13830
+ * expressions.
13831
+ *
13832
+ * # Example
13833
+ * ```js
13834
+ var scope = ng.$rootScope.Scope();
13835
+ scope.a = 1;
13836
+ scope.b = 2;
13837
+
13838
+ expect(scope.$eval('a+b')).toEqual(3);
13839
+ expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
13840
+ * ```
13841
+ *
13842
+ * @param {(string|function())=} expression An angular expression to be executed.
13843
+ *
13844
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
13845
+ * - `function(scope)`: execute the function with the current `scope` parameter.
13846
+ *
13847
+ * @param {(object)=} locals Local variables object, useful for overriding values in scope.
13848
+ * @returns {*} The result of evaluating the expression.
13849
+ */
13850
+ $eval: function(expr, locals) {
13851
+ return $parse(expr)(this, locals);
13852
+ },
13853
+
13854
+ /**
13855
+ * @ngdoc method
13856
+ * @name $rootScope.Scope#$evalAsync
13857
+ * @kind function
13858
+ *
13859
+ * @description
13860
+ * Executes the expression on the current scope at a later point in time.
13861
+ *
13862
+ * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only
13863
+ * that:
13864
+ *
13865
+ * - it will execute after the function that scheduled the evaluation (preferably before DOM
13866
+ * rendering).
13867
+ * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
13868
+ * `expression` execution.
13869
+ *
13870
+ * Any exceptions from the execution of the expression are forwarded to the
13871
+ * {@link ng.$exceptionHandler $exceptionHandler} service.
13872
+ *
13873
+ * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle
13874
+ * will be scheduled. However, it is encouraged to always call code that changes the model
13875
+ * from within an `$apply` call. That includes code evaluated via `$evalAsync`.
13876
+ *
13877
+ * @param {(string|function())=} expression An angular expression to be executed.
13878
+ *
13879
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
13880
+ * - `function(scope)`: execute the function with the current `scope` parameter.
13881
+ *
13882
+ */
13883
+ $evalAsync: function(expr) {
13884
+ // if we are outside of an $digest loop and this is the first time we are scheduling async
13885
+ // task also schedule async auto-flush
13886
+ if (!$rootScope.$$phase && !asyncQueue.length) {
13887
+ $browser.defer(function() {
13888
+ if (asyncQueue.length) {
13889
+ $rootScope.$digest();
13890
+ }
13891
+ });
13892
+ }
13893
+
13894
+ asyncQueue.push({scope: this, expression: expr});
13895
+ },
13896
+
13897
+ $$postDigest : function(fn) {
13898
+ postDigestQueue.push(fn);
13899
+ },
13900
+
13901
+ /**
13902
+ * @ngdoc method
13903
+ * @name $rootScope.Scope#$apply
13904
+ * @kind function
13905
+ *
13906
+ * @description
13907
+ * `$apply()` is used to execute an expression in angular from outside of the angular
13908
+ * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).
13909
+ * Because we are calling into the angular framework we need to perform proper scope life
13910
+ * cycle of {@link ng.$exceptionHandler exception handling},
13911
+ * {@link ng.$rootScope.Scope#$digest executing watches}.
13912
+ *
13913
+ * ## Life cycle
13914
+ *
13915
+ * # Pseudo-Code of `$apply()`
13916
+ * ```js
13917
+ function $apply(expr) {
13918
+ try {
13919
+ return $eval(expr);
13920
+ } catch (e) {
13921
+ $exceptionHandler(e);
13922
+ } finally {
13923
+ $root.$digest();
13924
+ }
13925
+ }
13926
+ * ```
13927
+ *
13928
+ *
13929
+ * Scope's `$apply()` method transitions through the following stages:
13930
+ *
13931
+ * 1. The {@link guide/expression expression} is executed using the
13932
+ * {@link ng.$rootScope.Scope#$eval $eval()} method.
13933
+ * 2. Any exceptions from the execution of the expression are forwarded to the
13934
+ * {@link ng.$exceptionHandler $exceptionHandler} service.
13935
+ * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the
13936
+ * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.
13937
+ *
13938
+ *
13939
+ * @param {(string|function())=} exp An angular expression to be executed.
13940
+ *
13941
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
13942
+ * - `function(scope)`: execute the function with current `scope` parameter.
13943
+ *
13944
+ * @returns {*} The result of evaluating the expression.
13945
+ */
13946
+ $apply: function(expr) {
13947
+ try {
13948
+ beginPhase('$apply');
13949
+ return this.$eval(expr);
13950
+ } catch (e) {
13951
+ $exceptionHandler(e);
13952
+ } finally {
13953
+ clearPhase();
13954
+ try {
13955
+ $rootScope.$digest();
13956
+ } catch (e) {
13957
+ $exceptionHandler(e);
13958
+ throw e;
13959
+ }
13960
+ }
13961
+ },
13962
+
13963
+ /**
13964
+ * @ngdoc method
13965
+ * @name $rootScope.Scope#$applyAsync
13966
+ * @kind function
13967
+ *
13968
+ * @description
13969
+ * Schedule the invokation of $apply to occur at a later time. The actual time difference
13970
+ * varies across browsers, but is typically around ~10 milliseconds.
13971
+ *
13972
+ * This can be used to queue up multiple expressions which need to be evaluated in the same
13973
+ * digest.
13974
+ *
13975
+ * @param {(string|function())=} exp An angular expression to be executed.
13976
+ *
13977
+ * - `string`: execute using the rules as defined in {@link guide/expression expression}.
13978
+ * - `function(scope)`: execute the function with current `scope` parameter.
13979
+ */
13980
+ $applyAsync: function(expr) {
13981
+ var scope = this;
13982
+ expr && applyAsyncQueue.push($applyAsyncExpression);
13983
+ scheduleApplyAsync();
13984
+
13985
+ function $applyAsyncExpression() {
13986
+ scope.$eval(expr);
13987
+ }
13988
+ },
13989
+
13990
+ /**
13991
+ * @ngdoc method
13992
+ * @name $rootScope.Scope#$on
13993
+ * @kind function
13994
+ *
13995
+ * @description
13996
+ * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for
13997
+ * discussion of event life cycle.
13998
+ *
13999
+ * The event listener function format is: `function(event, args...)`. The `event` object
14000
+ * passed into the listener has the following attributes:
14001
+ *
14002
+ * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or
14003
+ * `$broadcast`-ed.
14004
+ * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the
14005
+ * event propagates through the scope hierarchy, this property is set to null.
14006
+ * - `name` - `{string}`: name of the event.
14007
+ * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel
14008
+ * further event propagation (available only for events that were `$emit`-ed).
14009
+ * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag
14010
+ * to true.
14011
+ * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.
14012
+ *
14013
+ * @param {string} name Event name to listen on.
14014
+ * @param {function(event, ...args)} listener Function to call when the event is emitted.
14015
+ * @returns {function()} Returns a deregistration function for this listener.
14016
+ */
14017
+ $on: function(name, listener) {
14018
+ var namedListeners = this.$$listeners[name];
14019
+ if (!namedListeners) {
14020
+ this.$$listeners[name] = namedListeners = [];
14021
+ }
14022
+ namedListeners.push(listener);
14023
+
14024
+ var current = this;
14025
+ do {
14026
+ if (!current.$$listenerCount[name]) {
14027
+ current.$$listenerCount[name] = 0;
14028
+ }
14029
+ current.$$listenerCount[name]++;
14030
+ } while ((current = current.$parent));
14031
+
14032
+ var self = this;
14033
+ return function() {
14034
+ namedListeners[namedListeners.indexOf(listener)] = null;
14035
+ decrementListenerCount(self, 1, name);
14036
+ };
14037
+ },
14038
+
14039
+
14040
+ /**
14041
+ * @ngdoc method
14042
+ * @name $rootScope.Scope#$emit
14043
+ * @kind function
14044
+ *
14045
+ * @description
14046
+ * Dispatches an event `name` upwards through the scope hierarchy notifying the
14047
+ * registered {@link ng.$rootScope.Scope#$on} listeners.
14048
+ *
14049
+ * The event life cycle starts at the scope on which `$emit` was called. All
14050
+ * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
14051
+ * notified. Afterwards, the event traverses upwards toward the root scope and calls all
14052
+ * registered listeners along the way. The event will stop propagating if one of the listeners
14053
+ * cancels it.
14054
+ *
14055
+ * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
14056
+ * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
14057
+ *
14058
+ * @param {string} name Event name to emit.
14059
+ * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
14060
+ * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).
14061
+ */
14062
+ $emit: function(name, args) {
14063
+ var empty = [],
14064
+ namedListeners,
14065
+ scope = this,
14066
+ stopPropagation = false,
14067
+ event = {
14068
+ name: name,
14069
+ targetScope: scope,
14070
+ stopPropagation: function() {stopPropagation = true;},
14071
+ preventDefault: function() {
14072
+ event.defaultPrevented = true;
14073
+ },
14074
+ defaultPrevented: false
14075
+ },
14076
+ listenerArgs = concat([event], arguments, 1),
14077
+ i, length;
14078
+
14079
+ do {
14080
+ namedListeners = scope.$$listeners[name] || empty;
14081
+ event.currentScope = scope;
14082
+ for (i=0, length=namedListeners.length; i<length; i++) {
14083
+
14084
+ // if listeners were deregistered, defragment the array
14085
+ if (!namedListeners[i]) {
14086
+ namedListeners.splice(i, 1);
14087
+ i--;
14088
+ length--;
14089
+ continue;
14090
+ }
14091
+ try {
14092
+ //allow all listeners attached to the current scope to run
14093
+ namedListeners[i].apply(null, listenerArgs);
14094
+ } catch (e) {
14095
+ $exceptionHandler(e);
14096
+ }
14097
+ }
14098
+ //if any listener on the current scope stops propagation, prevent bubbling
14099
+ if (stopPropagation) {
14100
+ event.currentScope = null;
14101
+ return event;
14102
+ }
14103
+ //traverse upwards
14104
+ scope = scope.$parent;
14105
+ } while (scope);
14106
+
14107
+ event.currentScope = null;
14108
+
14109
+ return event;
14110
+ },
14111
+
14112
+
14113
+ /**
14114
+ * @ngdoc method
14115
+ * @name $rootScope.Scope#$broadcast
14116
+ * @kind function
14117
+ *
14118
+ * @description
14119
+ * Dispatches an event `name` downwards to all child scopes (and their children) notifying the
14120
+ * registered {@link ng.$rootScope.Scope#$on} listeners.
14121
+ *
14122
+ * The event life cycle starts at the scope on which `$broadcast` was called. All
14123
+ * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
14124
+ * notified. Afterwards, the event propagates to all direct and indirect scopes of the current
14125
+ * scope and calls all registered listeners along the way. The event cannot be canceled.
14126
+ *
14127
+ * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
14128
+ * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
14129
+ *
14130
+ * @param {string} name Event name to broadcast.
14131
+ * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
14132
+ * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}
14133
+ */
14134
+ $broadcast: function(name, args) {
14135
+ var target = this,
14136
+ current = target,
14137
+ next = target,
14138
+ event = {
14139
+ name: name,
14140
+ targetScope: target,
14141
+ preventDefault: function() {
14142
+ event.defaultPrevented = true;
14143
+ },
14144
+ defaultPrevented: false
14145
+ };
14146
+
14147
+ if (!target.$$listenerCount[name]) return event;
14148
+
14149
+ var listenerArgs = concat([event], arguments, 1),
14150
+ listeners, i, length;
14151
+
14152
+ //down while you can, then up and next sibling or up and next sibling until back at root
14153
+ while ((current = next)) {
14154
+ event.currentScope = current;
14155
+ listeners = current.$$listeners[name] || [];
14156
+ for (i=0, length = listeners.length; i<length; i++) {
14157
+ // if listeners were deregistered, defragment the array
14158
+ if (!listeners[i]) {
14159
+ listeners.splice(i, 1);
14160
+ i--;
14161
+ length--;
14162
+ continue;
14163
+ }
14164
+
14165
+ try {
14166
+ listeners[i].apply(null, listenerArgs);
14167
+ } catch(e) {
14168
+ $exceptionHandler(e);
14169
+ }
14170
+ }
14171
+
14172
+ // Insanity Warning: scope depth-first traversal
14173
+ // yes, this code is a bit crazy, but it works and we have tests to prove it!
14174
+ // this piece should be kept in sync with the traversal in $digest
14175
+ // (though it differs due to having the extra check for $$listenerCount)
14176
+ if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
14177
+ (current !== target && current.$$nextSibling)))) {
14178
+ while(current !== target && !(next = current.$$nextSibling)) {
14179
+ current = current.$parent;
14180
+ }
14181
+ }
14182
+ }
14183
+
14184
+ event.currentScope = null;
14185
+ return event;
14186
+ }
14187
+ };
14188
+
14189
+ var $rootScope = new Scope();
14190
+
14191
+ //The internal queues. Expose them on the $rootScope for debugging/testing purposes.
14192
+ var asyncQueue = $rootScope.$$asyncQueue = [];
14193
+ var postDigestQueue = $rootScope.$$postDigestQueue = [];
14194
+ var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];
14195
+
14196
+ return $rootScope;
14197
+
14198
+
14199
+ function beginPhase(phase) {
14200
+ if ($rootScope.$$phase) {
14201
+ throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);
14202
+ }
14203
+
14204
+ $rootScope.$$phase = phase;
14205
+ }
14206
+
14207
+ function clearPhase() {
14208
+ $rootScope.$$phase = null;
14209
+ }
14210
+
14211
+
14212
+ function decrementListenerCount(current, count, name) {
14213
+ do {
14214
+ current.$$listenerCount[name] -= count;
14215
+
14216
+ if (current.$$listenerCount[name] === 0) {
14217
+ delete current.$$listenerCount[name];
14218
+ }
14219
+ } while ((current = current.$parent));
14220
+ }
14221
+
14222
+ /**
14223
+ * function used as an initial value for watchers.
14224
+ * because it's unique we can easily tell it apart from other values
14225
+ */
14226
+ function initWatchVal() {}
14227
+
14228
+ function flushApplyAsync() {
14229
+ while (applyAsyncQueue.length) {
14230
+ try {
14231
+ applyAsyncQueue.shift()();
14232
+ } catch(e) {
14233
+ $exceptionHandler(e);
14234
+ }
14235
+ }
14236
+ applyAsyncId = null;
14237
+ }
14238
+
14239
+ function scheduleApplyAsync() {
14240
+ if (applyAsyncId === null) {
14241
+ applyAsyncId = $browser.defer(function() {
14242
+ $rootScope.$apply(flushApplyAsync);
14243
+ });
14244
+ }
14245
+ }
14246
+ }];
14247
+}
14248
+
14249
+/**
14250
+ * @description
14251
+ * Private service to sanitize uris for links and images. Used by $compile and $sanitize.
14252
+ */
14253
+function $$SanitizeUriProvider() {
14254
+ var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/,
14255
+ imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/;
14256
+
14257
+ /**
14258
+ * @description
14259
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
14260
+ * urls during a[href] sanitization.
14261
+ *
14262
+ * The sanitization is a security measure aimed at prevent XSS attacks via html links.
14263
+ *
14264
+ * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
14265
+ * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
14266
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
14267
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
14268
+ *
14269
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
14270
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
14271
+ * chaining otherwise.
14272
+ */
14273
+ this.aHrefSanitizationWhitelist = function(regexp) {
14274
+ if (isDefined(regexp)) {
14275
+ aHrefSanitizationWhitelist = regexp;
14276
+ return this;
14277
+ }
14278
+ return aHrefSanitizationWhitelist;
14279
+ };
14280
+
14281
+
14282
+ /**
14283
+ * @description
14284
+ * Retrieves or overrides the default regular expression that is used for whitelisting of safe
14285
+ * urls during img[src] sanitization.
14286
+ *
14287
+ * The sanitization is a security measure aimed at prevent XSS attacks via html links.
14288
+ *
14289
+ * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
14290
+ * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
14291
+ * regular expression. If a match is found, the original url is written into the dom. Otherwise,
14292
+ * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
14293
+ *
14294
+ * @param {RegExp=} regexp New regexp to whitelist urls with.
14295
+ * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
14296
+ * chaining otherwise.
14297
+ */
14298
+ this.imgSrcSanitizationWhitelist = function(regexp) {
14299
+ if (isDefined(regexp)) {
14300
+ imgSrcSanitizationWhitelist = regexp;
14301
+ return this;
14302
+ }
14303
+ return imgSrcSanitizationWhitelist;
14304
+ };
14305
+
14306
+ this.$get = function() {
14307
+ return function sanitizeUri(uri, isImage) {
14308
+ var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;
14309
+ var normalizedVal;
14310
+ normalizedVal = urlResolve(uri).href;
14311
+ if (normalizedVal !== '' && !normalizedVal.match(regex)) {
14312
+ return 'unsafe:'+normalizedVal;
14313
+ }
14314
+ return uri;
14315
+ };
14316
+ };
14317
+}
14318
+
14319
+var $sceMinErr = minErr('$sce');
14320
+
14321
+var SCE_CONTEXTS = {
14322
+ HTML: 'html',
14323
+ CSS: 'css',
14324
+ URL: 'url',
14325
+ // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a
14326
+ // url. (e.g. ng-include, script src, templateUrl)
14327
+ RESOURCE_URL: 'resourceUrl',
14328
+ JS: 'js'
14329
+};
14330
+
14331
+// Helper functions follow.
14332
+
14333
+// Copied from:
14334
+// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962
14335
+// Prereq: s is a string.
14336
+function escapeForRegexp(s) {
14337
+ return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
14338
+ replace(/\x08/g, '\\x08');
14339
+}
14340
+
14341
+
14342
+function adjustMatcher(matcher) {
14343
+ if (matcher === 'self') {
14344
+ return matcher;
14345
+ } else if (isString(matcher)) {
14346
+ // Strings match exactly except for 2 wildcards - '*' and '**'.
14347
+ // '*' matches any character except those from the set ':/.?&'.
14348
+ // '**' matches any character (like .* in a RegExp).
14349
+ // More than 2 *'s raises an error as it's ill defined.
14350
+ if (matcher.indexOf('***') > -1) {
14351
+ throw $sceMinErr('iwcard',
14352
+ 'Illegal sequence *** in string matcher. String: {0}', matcher);
14353
+ }
14354
+ matcher = escapeForRegexp(matcher).
14355
+ replace('\\*\\*', '.*').
14356
+ replace('\\*', '[^:/.?&;]*');
14357
+ return new RegExp('^' + matcher + '$');
14358
+ } else if (isRegExp(matcher)) {
14359
+ // The only other type of matcher allowed is a Regexp.
14360
+ // Match entire URL / disallow partial matches.
14361
+ // Flags are reset (i.e. no global, ignoreCase or multiline)
14362
+ return new RegExp('^' + matcher.source + '$');
14363
+ } else {
14364
+ throw $sceMinErr('imatcher',
14365
+ 'Matchers may only be "self", string patterns or RegExp objects');
14366
+ }
14367
+}
14368
+
14369
+
14370
+function adjustMatchers(matchers) {
14371
+ var adjustedMatchers = [];
14372
+ if (isDefined(matchers)) {
14373
+ forEach(matchers, function(matcher) {
14374
+ adjustedMatchers.push(adjustMatcher(matcher));
14375
+ });
14376
+ }
14377
+ return adjustedMatchers;
14378
+}
14379
+
14380
+
14381
+/**
14382
+ * @ngdoc service
14383
+ * @name $sceDelegate
14384
+ * @kind function
14385
+ *
14386
+ * @description
14387
+ *
14388
+ * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict
14389
+ * Contextual Escaping (SCE)} services to AngularJS.
14390
+ *
14391
+ * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of
14392
+ * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is
14393
+ * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to
14394
+ * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things
14395
+ * work because `$sce` delegates to `$sceDelegate` for these operations.
14396
+ *
14397
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.
14398
+ *
14399
+ * The default instance of `$sceDelegate` should work out of the box with little pain. While you
14400
+ * can override it completely to change the behavior of `$sce`, the common case would
14401
+ * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting
14402
+ * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as
14403
+ * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist
14404
+ * $sceDelegateProvider.resourceUrlWhitelist} and {@link
14405
+ * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
14406
+ */
14407
+
14408
+/**
14409
+ * @ngdoc provider
14410
+ * @name $sceDelegateProvider
14411
+ * @description
14412
+ *
14413
+ * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate
14414
+ * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure
14415
+ * that the URLs used for sourcing Angular templates are safe. Refer {@link
14416
+ * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and
14417
+ * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
14418
+ *
14419
+ * For the general details about this service in Angular, read the main page for {@link ng.$sce
14420
+ * Strict Contextual Escaping (SCE)}.
14421
+ *
14422
+ * **Example**: Consider the following case. <a name="example"></a>
14423
+ *
14424
+ * - your app is hosted at url `http://myapp.example.com/`
14425
+ * - but some of your templates are hosted on other domains you control such as
14426
+ * `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.
14427
+ * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.
14428
+ *
14429
+ * Here is what a secure configuration for this scenario might look like:
14430
+ *
14431
+ * ```
14432
+ * angular.module('myApp', []).config(function($sceDelegateProvider) {
14433
+ * $sceDelegateProvider.resourceUrlWhitelist([
14434
+ * // Allow same origin resource loads.
14435
+ * 'self',
14436
+ * // Allow loading from our assets domain. Notice the difference between * and **.
14437
+ * 'http://srv*.assets.example.com/**'
14438
+ * ]);
14439
+ *
14440
+ * // The blacklist overrides the whitelist so the open redirect here is blocked.
14441
+ * $sceDelegateProvider.resourceUrlBlacklist([
14442
+ * 'http://myapp.example.com/clickThru**'
14443
+ * ]);
14444
+ * });
14445
+ * ```
14446
+ */
14447
+
14448
+function $SceDelegateProvider() {
14449
+ this.SCE_CONTEXTS = SCE_CONTEXTS;
14450
+
14451
+ // Resource URLs can also be trusted by policy.
14452
+ var resourceUrlWhitelist = ['self'],
14453
+ resourceUrlBlacklist = [];
14454
+
14455
+ /**
14456
+ * @ngdoc method
14457
+ * @name $sceDelegateProvider#resourceUrlWhitelist
14458
+ * @kind function
14459
+ *
14460
+ * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value
14461
+ * provided. This must be an array or null. A snapshot of this array is used so further
14462
+ * changes to the array are ignored.
14463
+ *
14464
+ * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
14465
+ * allowed in this array.
14466
+ *
14467
+ * Note: **an empty whitelist array will block all URLs**!
14468
+ *
14469
+ * @return {Array} the currently set whitelist array.
14470
+ *
14471
+ * The **default value** when no whitelist has been explicitly set is `['self']` allowing only
14472
+ * same origin resource requests.
14473
+ *
14474
+ * @description
14475
+ * Sets/Gets the whitelist of trusted resource URLs.
14476
+ */
14477
+ this.resourceUrlWhitelist = function (value) {
14478
+ if (arguments.length) {
14479
+ resourceUrlWhitelist = adjustMatchers(value);
14480
+ }
14481
+ return resourceUrlWhitelist;
14482
+ };
14483
+
14484
+ /**
14485
+ * @ngdoc method
14486
+ * @name $sceDelegateProvider#resourceUrlBlacklist
14487
+ * @kind function
14488
+ *
14489
+ * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value
14490
+ * provided. This must be an array or null. A snapshot of this array is used so further
14491
+ * changes to the array are ignored.
14492
+ *
14493
+ * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
14494
+ * allowed in this array.
14495
+ *
14496
+ * The typical usage for the blacklist is to **block
14497
+ * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
14498
+ * these would otherwise be trusted but actually return content from the redirected domain.
14499
+ *
14500
+ * Finally, **the blacklist overrides the whitelist** and has the final say.
14501
+ *
14502
+ * @return {Array} the currently set blacklist array.
14503
+ *
14504
+ * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there
14505
+ * is no blacklist.)
14506
+ *
14507
+ * @description
14508
+ * Sets/Gets the blacklist of trusted resource URLs.
14509
+ */
14510
+
14511
+ this.resourceUrlBlacklist = function (value) {
14512
+ if (arguments.length) {
14513
+ resourceUrlBlacklist = adjustMatchers(value);
14514
+ }
14515
+ return resourceUrlBlacklist;
14516
+ };
14517
+
14518
+ this.$get = ['$injector', function($injector) {
14519
+
14520
+ var htmlSanitizer = function htmlSanitizer(html) {
14521
+ throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
14522
+ };
14523
+
14524
+ if ($injector.has('$sanitize')) {
14525
+ htmlSanitizer = $injector.get('$sanitize');
14526
+ }
14527
+
14528
+
14529
+ function matchUrl(matcher, parsedUrl) {
14530
+ if (matcher === 'self') {
14531
+ return urlIsSameOrigin(parsedUrl);
14532
+ } else {
14533
+ // definitely a regex. See adjustMatchers()
14534
+ return !!matcher.exec(parsedUrl.href);
14535
+ }
14536
+ }
14537
+
14538
+ function isResourceUrlAllowedByPolicy(url) {
14539
+ var parsedUrl = urlResolve(url.toString());
14540
+ var i, n, allowed = false;
14541
+ // Ensure that at least one item from the whitelist allows this url.
14542
+ for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {
14543
+ if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {
14544
+ allowed = true;
14545
+ break;
14546
+ }
14547
+ }
14548
+ if (allowed) {
14549
+ // Ensure that no item from the blacklist blocked this url.
14550
+ for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {
14551
+ if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {
14552
+ allowed = false;
14553
+ break;
14554
+ }
14555
+ }
14556
+ }
14557
+ return allowed;
14558
+ }
14559
+
14560
+ function generateHolderType(Base) {
14561
+ var holderType = function TrustedValueHolderType(trustedValue) {
14562
+ this.$$unwrapTrustedValue = function() {
14563
+ return trustedValue;
14564
+ };
14565
+ };
14566
+ if (Base) {
14567
+ holderType.prototype = new Base();
14568
+ }
14569
+ holderType.prototype.valueOf = function sceValueOf() {
14570
+ return this.$$unwrapTrustedValue();
14571
+ };
14572
+ holderType.prototype.toString = function sceToString() {
14573
+ return this.$$unwrapTrustedValue().toString();
14574
+ };
14575
+ return holderType;
14576
+ }
14577
+
14578
+ var trustedValueHolderBase = generateHolderType(),
14579
+ byType = {};
14580
+
14581
+ byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);
14582
+ byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);
14583
+ byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);
14584
+ byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);
14585
+ byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);
14586
+
14587
+ /**
14588
+ * @ngdoc method
14589
+ * @name $sceDelegate#trustAs
14590
+ *
14591
+ * @description
14592
+ * Returns an object that is trusted by angular for use in specified strict
14593
+ * contextual escaping contexts (such as ng-bind-html, ng-include, any src
14594
+ * attribute interpolation, any dom event binding attribute interpolation
14595
+ * such as for onclick, etc.) that uses the provided value.
14596
+ * See {@link ng.$sce $sce} for enabling strict contextual escaping.
14597
+ *
14598
+ * @param {string} type The kind of context in which this value is safe for use. e.g. url,
14599
+ * resourceUrl, html, js and css.
14600
+ * @param {*} value The value that that should be considered trusted/safe.
14601
+ * @returns {*} A value that can be used to stand in for the provided `value` in places
14602
+ * where Angular expects a $sce.trustAs() return value.
14603
+ */
14604
+ function trustAs(type, trustedValue) {
14605
+ var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
14606
+ if (!Constructor) {
14607
+ throw $sceMinErr('icontext',
14608
+ 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',
14609
+ type, trustedValue);
14610
+ }
14611
+ if (trustedValue === null || trustedValue === undefined || trustedValue === '') {
14612
+ return trustedValue;
14613
+ }
14614
+ // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting
14615
+ // mutable objects, we ensure here that the value passed in is actually a string.
14616
+ if (typeof trustedValue !== 'string') {
14617
+ throw $sceMinErr('itype',
14618
+ 'Attempted to trust a non-string value in a content requiring a string: Context: {0}',
14619
+ type);
14620
+ }
14621
+ return new Constructor(trustedValue);
14622
+ }
14623
+
14624
+ /**
14625
+ * @ngdoc method
14626
+ * @name $sceDelegate#valueOf
14627
+ *
14628
+ * @description
14629
+ * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs
14630
+ * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link
14631
+ * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.
14632
+ *
14633
+ * If the passed parameter is not a value that had been returned by {@link
14634
+ * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.
14635
+ *
14636
+ * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}
14637
+ * call or anything else.
14638
+ * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
14639
+ * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns
14640
+ * `value` unchanged.
14641
+ */
14642
+ function valueOf(maybeTrusted) {
14643
+ if (maybeTrusted instanceof trustedValueHolderBase) {
14644
+ return maybeTrusted.$$unwrapTrustedValue();
14645
+ } else {
14646
+ return maybeTrusted;
14647
+ }
14648
+ }
14649
+
14650
+ /**
14651
+ * @ngdoc method
14652
+ * @name $sceDelegate#getTrusted
14653
+ *
14654
+ * @description
14655
+ * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and
14656
+ * returns the originally supplied value if the queried context type is a supertype of the
14657
+ * created type. If this condition isn't satisfied, throws an exception.
14658
+ *
14659
+ * @param {string} type The kind of context in which this value is to be used.
14660
+ * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs
14661
+ * `$sceDelegate.trustAs`} call.
14662
+ * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs
14663
+ * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception.
14664
+ */
14665
+ function getTrusted(type, maybeTrusted) {
14666
+ if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') {
14667
+ return maybeTrusted;
14668
+ }
14669
+ var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
14670
+ if (constructor && maybeTrusted instanceof constructor) {
14671
+ return maybeTrusted.$$unwrapTrustedValue();
14672
+ }
14673
+ // If we get here, then we may only take one of two actions.
14674
+ // 1. sanitize the value for the requested type, or
14675
+ // 2. throw an exception.
14676
+ if (type === SCE_CONTEXTS.RESOURCE_URL) {
14677
+ if (isResourceUrlAllowedByPolicy(maybeTrusted)) {
14678
+ return maybeTrusted;
14679
+ } else {
14680
+ throw $sceMinErr('insecurl',
14681
+ 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}',
14682
+ maybeTrusted.toString());
14683
+ }
14684
+ } else if (type === SCE_CONTEXTS.HTML) {
14685
+ return htmlSanitizer(maybeTrusted);
14686
+ }
14687
+ throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
14688
+ }
14689
+
14690
+ return { trustAs: trustAs,
14691
+ getTrusted: getTrusted,
14692
+ valueOf: valueOf };
14693
+ }];
14694
+}
14695
+
14696
+
14697
+/**
14698
+ * @ngdoc provider
14699
+ * @name $sceProvider
14700
+ * @description
14701
+ *
14702
+ * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.
14703
+ * - enable/disable Strict Contextual Escaping (SCE) in a module
14704
+ * - override the default implementation with a custom delegate
14705
+ *
14706
+ * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.
14707
+ */
14708
+
14709
+/* jshint maxlen: false*/
14710
+
14711
+/**
14712
+ * @ngdoc service
14713
+ * @name $sce
14714
+ * @kind function
14715
+ *
14716
+ * @description
14717
+ *
14718
+ * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.
14719
+ *
14720
+ * # Strict Contextual Escaping
14721
+ *
14722
+ * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain
14723
+ * contexts to result in a value that is marked as safe to use for that context. One example of
14724
+ * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer
14725
+ * to these contexts as privileged or SCE contexts.
14726
+ *
14727
+ * As of version 1.2, Angular ships with SCE enabled by default.
14728
+ *
14729
+ * Note: When enabled (the default), IE8 in quirks mode is not supported. In this mode, IE8 allows
14730
+ * one to execute arbitrary javascript by the use of the expression() syntax. Refer
14731
+ * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.
14732
+ * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`
14733
+ * to the top of your HTML document.
14734
+ *
14735
+ * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for
14736
+ * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
14737
+ *
14738
+ * Here's an example of a binding in a privileged context:
14739
+ *
14740
+ * ```
14741
+ * <input ng-model="userHtml">
14742
+ * <div ng-bind-html="userHtml"></div>
14743
+ * ```
14744
+ *
14745
+ * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE
14746
+ * disabled, this application allows the user to render arbitrary HTML into the DIV.
14747
+ * In a more realistic example, one may be rendering user comments, blog articles, etc. via
14748
+ * bindings. (HTML is just one example of a context where rendering user controlled input creates
14749
+ * security vulnerabilities.)
14750
+ *
14751
+ * For the case of HTML, you might use a library, either on the client side, or on the server side,
14752
+ * to sanitize unsafe HTML before binding to the value and rendering it in the document.
14753
+ *
14754
+ * How would you ensure that every place that used these types of bindings was bound to a value that
14755
+ * was sanitized by your library (or returned as safe for rendering by your server?) How can you
14756
+ * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some
14757
+ * properties/fields and forgot to update the binding to the sanitized value?
14758
+ *
14759
+ * To be secure by default, you want to ensure that any such bindings are disallowed unless you can
14760
+ * determine that something explicitly says it's safe to use a value for binding in that
14761
+ * context. You can then audit your code (a simple grep would do) to ensure that this is only done
14762
+ * for those values that you can easily tell are safe - because they were received from your server,
14763
+ * sanitized by your library, etc. You can organize your codebase to help with this - perhaps
14764
+ * allowing only the files in a specific directory to do this. Ensuring that the internal API
14765
+ * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.
14766
+ *
14767
+ * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}
14768
+ * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to
14769
+ * obtain values that will be accepted by SCE / privileged contexts.
14770
+ *
14771
+ *
14772
+ * ## How does it work?
14773
+ *
14774
+ * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted
14775
+ * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link
14776
+ * ng.$sce#parse $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the
14777
+ * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
14778
+ *
14779
+ * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
14780
+ * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly
14781
+ * simplified):
14782
+ *
14783
+ * ```
14784
+ * var ngBindHtmlDirective = ['$sce', function($sce) {
14785
+ * return function(scope, element, attr) {
14786
+ * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
14787
+ * element.html(value || '');
14788
+ * });
14789
+ * };
14790
+ * }];
14791
+ * ```
14792
+ *
14793
+ * ## Impact on loading templates
14794
+ *
14795
+ * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as
14796
+ * `templateUrl`'s specified by {@link guide/directive directives}.
14797
+ *
14798
+ * By default, Angular only loads templates from the same domain and protocol as the application
14799
+ * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl
14800
+ * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or
14801
+ * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist
14802
+ * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.
14803
+ *
14804
+ * *Please note*:
14805
+ * The browser's
14806
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
14807
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
14808
+ * policy apply in addition to this and may further restrict whether the template is successfully
14809
+ * loaded. This means that without the right CORS policy, loading templates from a different domain
14810
+ * won't work on all browsers. Also, loading templates from `file://` URL does not work on some
14811
+ * browsers.
14812
+ *
14813
+ * ## This feels like too much overhead
14814
+ *
14815
+ * It's important to remember that SCE only applies to interpolation expressions.
14816
+ *
14817
+ * If your expressions are constant literals, they're automatically trusted and you don't need to
14818
+ * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.
14819
+ * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works.
14820
+ *
14821
+ * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
14822
+ * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here.
14823
+ *
14824
+ * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load
14825
+ * templates in `ng-include` from your application's domain without having to even know about SCE.
14826
+ * It blocks loading templates from other domains or loading templates over http from an https
14827
+ * served document. You can change these by setting your own custom {@link
14828
+ * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link
14829
+ * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.
14830
+ *
14831
+ * This significantly reduces the overhead. It is far easier to pay the small overhead and have an
14832
+ * application that's secure and can be audited to verify that with much more ease than bolting
14833
+ * security onto an application later.
14834
+ *
14835
+ * <a name="contexts"></a>
14836
+ * ## What trusted context types are supported?
14837
+ *
14838
+ * | Context | Notes |
14839
+ * |---------------------|----------------|
14840
+ * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |
14841
+ * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |
14842
+ * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
14843
+ * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
14844
+ * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. |
14845
+ *
14846
+ * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
14847
+ *
14848
+ * Each element in these arrays must be one of the following:
14849
+ *
14850
+ * - **'self'**
14851
+ * - The special **string**, `'self'`, can be used to match against all URLs of the **same
14852
+ * domain** as the application document using the **same protocol**.
14853
+ * - **String** (except the special value `'self'`)
14854
+ * - The string is matched against the full *normalized / absolute URL* of the resource
14855
+ * being tested (substring matches are not good enough.)
14856
+ * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters
14857
+ * match themselves.
14858
+ * - `*`: matches zero or more occurrences of any character other than one of the following 6
14859
+ * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use
14860
+ * in a whitelist.
14861
+ * - `**`: matches zero or more occurrences of *any* character. As such, it's not
14862
+ * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g.
14863
+ * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might
14864
+ * not have been the intention.) Its usage at the very end of the path is ok. (e.g.
14865
+ * http://foo.example.com/templates/**).
14866
+ * - **RegExp** (*see caveat below*)
14867
+ * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax
14868
+ * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to
14869
+ * accidentally introduce a bug when one updates a complex expression (imho, all regexes should
14870
+ * have good test coverage.). For instance, the use of `.` in the regex is correct only in a
14871
+ * small number of cases. A `.` character in the regex used when matching the scheme or a
14872
+ * subdomain could be matched against a `:` or literal `.` that was likely not intended. It
14873
+ * is highly recommended to use the string patterns and only fall back to regular expressions
14874
+ * if they as a last resort.
14875
+ * - The regular expression must be an instance of RegExp (i.e. not a string.) It is
14876
+ * matched against the **entire** *normalized / absolute URL* of the resource being tested
14877
+ * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags
14878
+ * present on the RegExp (such as multiline, global, ignoreCase) are ignored.
14879
+ * - If you are generating your JavaScript from some other templating engine (not
14880
+ * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),
14881
+ * remember to escape your regular expression (and be aware that you might need more than
14882
+ * one level of escaping depending on your templating engine and the way you interpolated
14883
+ * the value.) Do make use of your platform's escaping mechanism as it might be good
14884
+ * enough before coding your own. e.g. Ruby has
14885
+ * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)
14886
+ * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).
14887
+ * Javascript lacks a similar built in function for escaping. Take a look at Google
14888
+ * Closure library's [goog.string.regExpEscape(s)](
14889
+ * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).
14890
+ *
14891
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.
14892
+ *
14893
+ * ## Show me an example using SCE.
14894
+ *
14895
+ * <example module="mySceApp" deps="angular-sanitize.js">
14896
+ * <file name="index.html">
14897
+ * <div ng-controller="AppController as myCtrl">
14898
+ * <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
14899
+ * <b>User comments</b><br>
14900
+ * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when
14901
+ * $sanitize is available. If $sanitize isn't available, this results in an error instead of an
14902
+ * exploit.
14903
+ * <div class="well">
14904
+ * <div ng-repeat="userComment in myCtrl.userComments">
14905
+ * <b>{{userComment.name}}</b>:
14906
+ * <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span>
14907
+ * <br>
14908
+ * </div>
14909
+ * </div>
14910
+ * </div>
14911
+ * </file>
14912
+ *
14913
+ * <file name="script.js">
14914
+ * angular.module('mySceApp', ['ngSanitize'])
14915
+ * .controller('AppController', ['$http', '$templateCache', '$sce',
14916
+ * function($http, $templateCache, $sce) {
14917
+ * var self = this;
14918
+ * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) {
14919
+ * self.userComments = userComments;
14920
+ * });
14921
+ * self.explicitlyTrustedHtml = $sce.trustAsHtml(
14922
+ * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
14923
+ * 'sanitization.&quot;">Hover over this text.</span>');
14924
+ * }]);
14925
+ * </file>
14926
+ *
14927
+ * <file name="test_data.json">
14928
+ * [
14929
+ * { "name": "Alice",
14930
+ * "htmlComment":
14931
+ * "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>"
14932
+ * },
14933
+ * { "name": "Bob",
14934
+ * "htmlComment": "<i>Yes!</i> Am I the only other one?"
14935
+ * }
14936
+ * ]
14937
+ * </file>
14938
+ *
14939
+ * <file name="protractor.js" type="protractor">
14940
+ * describe('SCE doc demo', function() {
14941
+ * it('should sanitize untrusted values', function() {
14942
+ * expect(element.all(by.css('.htmlComment')).first().getInnerHtml())
14943
+ * .toBe('<span>Is <i>anyone</i> reading this?</span>');
14944
+ * });
14945
+ *
14946
+ * it('should NOT sanitize explicitly trusted values', function() {
14947
+ * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(
14948
+ * '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
14949
+ * 'sanitization.&quot;">Hover over this text.</span>');
14950
+ * });
14951
+ * });
14952
+ * </file>
14953
+ * </example>
14954
+ *
14955
+ *
14956
+ *
14957
+ * ## Can I disable SCE completely?
14958
+ *
14959
+ * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits
14960
+ * for little coding overhead. It will be much harder to take an SCE disabled application and
14961
+ * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE
14962
+ * for cases where you have a lot of existing code that was written before SCE was introduced and
14963
+ * you're migrating them a module at a time.
14964
+ *
14965
+ * That said, here's how you can completely disable SCE:
14966
+ *
14967
+ * ```
14968
+ * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
14969
+ * // Completely disable SCE. For demonstration purposes only!
14970
+ * // Do not use in new projects.
14971
+ * $sceProvider.enabled(false);
14972
+ * });
14973
+ * ```
14974
+ *
14975
+ */
14976
+/* jshint maxlen: 100 */
14977
+
14978
+function $SceProvider() {
14979
+ var enabled = true;
14980
+
14981
+ /**
14982
+ * @ngdoc method
14983
+ * @name $sceProvider#enabled
14984
+ * @kind function
14985
+ *
14986
+ * @param {boolean=} value If provided, then enables/disables SCE.
14987
+ * @return {boolean} true if SCE is enabled, false otherwise.
14988
+ *
14989
+ * @description
14990
+ * Enables/disables SCE and returns the current value.
14991
+ */
14992
+ this.enabled = function (value) {
14993
+ if (arguments.length) {
14994
+ enabled = !!value;
14995
+ }
14996
+ return enabled;
14997
+ };
14998
+
14999
+
15000
+ /* Design notes on the default implementation for SCE.
15001
+ *
15002
+ * The API contract for the SCE delegate
15003
+ * -------------------------------------
15004
+ * The SCE delegate object must provide the following 3 methods:
15005
+ *
15006
+ * - trustAs(contextEnum, value)
15007
+ * This method is used to tell the SCE service that the provided value is OK to use in the
15008
+ * contexts specified by contextEnum. It must return an object that will be accepted by
15009
+ * getTrusted() for a compatible contextEnum and return this value.
15010
+ *
15011
+ * - valueOf(value)
15012
+ * For values that were not produced by trustAs(), return them as is. For values that were
15013
+ * produced by trustAs(), return the corresponding input value to trustAs. Basically, if
15014
+ * trustAs is wrapping the given values into some type, this operation unwraps it when given
15015
+ * such a value.
15016
+ *
15017
+ * - getTrusted(contextEnum, value)
15018
+ * This function should return the a value that is safe to use in the context specified by
15019
+ * contextEnum or throw and exception otherwise.
15020
+ *
15021
+ * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be
15022
+ * opaque or wrapped in some holder object. That happens to be an implementation detail. For
15023
+ * instance, an implementation could maintain a registry of all trusted objects by context. In
15024
+ * such a case, trustAs() would return the same object that was passed in. getTrusted() would
15025
+ * return the same object passed in if it was found in the registry under a compatible context or
15026
+ * throw an exception otherwise. An implementation might only wrap values some of the time based
15027
+ * on some criteria. getTrusted() might return a value and not throw an exception for special
15028
+ * constants or objects even if not wrapped. All such implementations fulfill this contract.
15029
+ *
15030
+ *
15031
+ * A note on the inheritance model for SCE contexts
15032
+ * ------------------------------------------------
15033
+ * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This
15034
+ * is purely an implementation details.
15035
+ *
15036
+ * The contract is simply this:
15037
+ *
15038
+ * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)
15039
+ * will also succeed.
15040
+ *
15041
+ * Inheritance happens to capture this in a natural way. In some future, we
15042
+ * may not use inheritance anymore. That is OK because no code outside of
15043
+ * sce.js and sceSpecs.js would need to be aware of this detail.
15044
+ */
15045
+
15046
+ this.$get = ['$parse', '$sniffer', '$sceDelegate', function(
15047
+ $parse, $sniffer, $sceDelegate) {
15048
+ // Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows
15049
+ // the "expression(javascript expression)" syntax which is insecure.
15050
+ if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) {
15051
+ throw $sceMinErr('iequirks',
15052
+ 'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' +
15053
+ 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' +
15054
+ 'document. See http://docs.angularjs.org/api/ng.$sce for more information.');
15055
+ }
15056
+
15057
+ var sce = shallowCopy(SCE_CONTEXTS);
15058
+
15059
+ /**
15060
+ * @ngdoc method
15061
+ * @name $sce#isEnabled
15062
+ * @kind function
15063
+ *
15064
+ * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you
15065
+ * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
15066
+ *
15067
+ * @description
15068
+ * Returns a boolean indicating if SCE is enabled.
15069
+ */
15070
+ sce.isEnabled = function () {
15071
+ return enabled;
15072
+ };
15073
+ sce.trustAs = $sceDelegate.trustAs;
15074
+ sce.getTrusted = $sceDelegate.getTrusted;
15075
+ sce.valueOf = $sceDelegate.valueOf;
15076
+
15077
+ if (!enabled) {
15078
+ sce.trustAs = sce.getTrusted = function(type, value) { return value; };
15079
+ sce.valueOf = identity;
15080
+ }
15081
+
15082
+ /**
15083
+ * @ngdoc method
15084
+ * @name $sce#parseAs
15085
+ *
15086
+ * @description
15087
+ * Converts Angular {@link guide/expression expression} into a function. This is like {@link
15088
+ * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it
15089
+ * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,
15090
+ * *result*)}
15091
+ *
15092
+ * @param {string} type The kind of SCE context in which this result will be used.
15093
+ * @param {string} expression String expression to compile.
15094
+ * @returns {function(context, locals)} a function which represents the compiled expression:
15095
+ *
15096
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
15097
+ * are evaluated against (typically a scope object).
15098
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15099
+ * `context`.
15100
+ */
15101
+ sce.parseAs = function sceParseAs(type, expr) {
15102
+ var parsed = $parse(expr);
15103
+ if (parsed.literal && parsed.constant) {
15104
+ return parsed;
15105
+ } else {
15106
+ return $parse(expr, function (value) {
15107
+ return sce.getTrusted(type, value);
15108
+ });
15109
+ }
15110
+ };
15111
+
15112
+ /**
15113
+ * @ngdoc method
15114
+ * @name $sce#trustAs
15115
+ *
15116
+ * @description
15117
+ * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such,
15118
+ * returns an object that is trusted by angular for use in specified strict contextual
15119
+ * escaping contexts (such as ng-bind-html, ng-include, any src attribute
15120
+ * interpolation, any dom event binding attribute interpolation such as for onclick, etc.)
15121
+ * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual
15122
+ * escaping.
15123
+ *
15124
+ * @param {string} type The kind of context in which this value is safe for use. e.g. url,
15125
+ * resource_url, html, js and css.
15126
+ * @param {*} value The value that that should be considered trusted/safe.
15127
+ * @returns {*} A value that can be used to stand in for the provided `value` in places
15128
+ * where Angular expects a $sce.trustAs() return value.
15129
+ */
15130
+
15131
+ /**
15132
+ * @ngdoc method
15133
+ * @name $sce#trustAsHtml
15134
+ *
15135
+ * @description
15136
+ * Shorthand method. `$sce.trustAsHtml(value)` →
15137
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}
15138
+ *
15139
+ * @param {*} value The value to trustAs.
15140
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml
15141
+ * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives
15142
+ * only accept expressions that are either literal constants or are the
15143
+ * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
15144
+ */
15145
+
15146
+ /**
15147
+ * @ngdoc method
15148
+ * @name $sce#trustAsUrl
15149
+ *
15150
+ * @description
15151
+ * Shorthand method. `$sce.trustAsUrl(value)` →
15152
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}
15153
+ *
15154
+ * @param {*} value The value to trustAs.
15155
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl
15156
+ * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives
15157
+ * only accept expressions that are either literal constants or are the
15158
+ * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
15159
+ */
15160
+
15161
+ /**
15162
+ * @ngdoc method
15163
+ * @name $sce#trustAsResourceUrl
15164
+ *
15165
+ * @description
15166
+ * Shorthand method. `$sce.trustAsResourceUrl(value)` →
15167
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}
15168
+ *
15169
+ * @param {*} value The value to trustAs.
15170
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl
15171
+ * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives
15172
+ * only accept expressions that are either literal constants or are the return
15173
+ * value of {@link ng.$sce#trustAs $sce.trustAs}.)
15174
+ */
15175
+
15176
+ /**
15177
+ * @ngdoc method
15178
+ * @name $sce#trustAsJs
15179
+ *
15180
+ * @description
15181
+ * Shorthand method. `$sce.trustAsJs(value)` →
15182
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}
15183
+ *
15184
+ * @param {*} value The value to trustAs.
15185
+ * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs
15186
+ * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives
15187
+ * only accept expressions that are either literal constants or are the
15188
+ * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
15189
+ */
15190
+
15191
+ /**
15192
+ * @ngdoc method
15193
+ * @name $sce#getTrusted
15194
+ *
15195
+ * @description
15196
+ * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such,
15197
+ * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the
15198
+ * originally supplied value if the queried context type is a supertype of the created type.
15199
+ * If this condition isn't satisfied, throws an exception.
15200
+ *
15201
+ * @param {string} type The kind of context in which this value is to be used.
15202
+ * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}
15203
+ * call.
15204
+ * @returns {*} The value the was originally provided to
15205
+ * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.
15206
+ * Otherwise, throws an exception.
15207
+ */
15208
+
15209
+ /**
15210
+ * @ngdoc method
15211
+ * @name $sce#getTrustedHtml
15212
+ *
15213
+ * @description
15214
+ * Shorthand method. `$sce.getTrustedHtml(value)` →
15215
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}
15216
+ *
15217
+ * @param {*} value The value to pass to `$sce.getTrusted`.
15218
+ * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`
15219
+ */
15220
+
15221
+ /**
15222
+ * @ngdoc method
15223
+ * @name $sce#getTrustedCss
15224
+ *
15225
+ * @description
15226
+ * Shorthand method. `$sce.getTrustedCss(value)` →
15227
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}
15228
+ *
15229
+ * @param {*} value The value to pass to `$sce.getTrusted`.
15230
+ * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`
15231
+ */
15232
+
15233
+ /**
15234
+ * @ngdoc method
15235
+ * @name $sce#getTrustedUrl
15236
+ *
15237
+ * @description
15238
+ * Shorthand method. `$sce.getTrustedUrl(value)` →
15239
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}
15240
+ *
15241
+ * @param {*} value The value to pass to `$sce.getTrusted`.
15242
+ * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`
15243
+ */
15244
+
15245
+ /**
15246
+ * @ngdoc method
15247
+ * @name $sce#getTrustedResourceUrl
15248
+ *
15249
+ * @description
15250
+ * Shorthand method. `$sce.getTrustedResourceUrl(value)` →
15251
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}
15252
+ *
15253
+ * @param {*} value The value to pass to `$sceDelegate.getTrusted`.
15254
+ * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
15255
+ */
15256
+
15257
+ /**
15258
+ * @ngdoc method
15259
+ * @name $sce#getTrustedJs
15260
+ *
15261
+ * @description
15262
+ * Shorthand method. `$sce.getTrustedJs(value)` →
15263
+ * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}
15264
+ *
15265
+ * @param {*} value The value to pass to `$sce.getTrusted`.
15266
+ * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`
15267
+ */
15268
+
15269
+ /**
15270
+ * @ngdoc method
15271
+ * @name $sce#parseAsHtml
15272
+ *
15273
+ * @description
15274
+ * Shorthand method. `$sce.parseAsHtml(expression string)` →
15275
+ * {@link ng.$sce#parse `$sce.parseAs($sce.HTML, value)`}
15276
+ *
15277
+ * @param {string} expression String expression to compile.
15278
+ * @returns {function(context, locals)} a function which represents the compiled expression:
15279
+ *
15280
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
15281
+ * are evaluated against (typically a scope object).
15282
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15283
+ * `context`.
15284
+ */
15285
+
15286
+ /**
15287
+ * @ngdoc method
15288
+ * @name $sce#parseAsCss
15289
+ *
15290
+ * @description
15291
+ * Shorthand method. `$sce.parseAsCss(value)` →
15292
+ * {@link ng.$sce#parse `$sce.parseAs($sce.CSS, value)`}
15293
+ *
15294
+ * @param {string} expression String expression to compile.
15295
+ * @returns {function(context, locals)} a function which represents the compiled expression:
15296
+ *
15297
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
15298
+ * are evaluated against (typically a scope object).
15299
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15300
+ * `context`.
15301
+ */
15302
+
15303
+ /**
15304
+ * @ngdoc method
15305
+ * @name $sce#parseAsUrl
15306
+ *
15307
+ * @description
15308
+ * Shorthand method. `$sce.parseAsUrl(value)` →
15309
+ * {@link ng.$sce#parse `$sce.parseAs($sce.URL, value)`}
15310
+ *
15311
+ * @param {string} expression String expression to compile.
15312
+ * @returns {function(context, locals)} a function which represents the compiled expression:
15313
+ *
15314
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
15315
+ * are evaluated against (typically a scope object).
15316
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15317
+ * `context`.
15318
+ */
15319
+
15320
+ /**
15321
+ * @ngdoc method
15322
+ * @name $sce#parseAsResourceUrl
15323
+ *
15324
+ * @description
15325
+ * Shorthand method. `$sce.parseAsResourceUrl(value)` →
15326
+ * {@link ng.$sce#parse `$sce.parseAs($sce.RESOURCE_URL, value)`}
15327
+ *
15328
+ * @param {string} expression String expression to compile.
15329
+ * @returns {function(context, locals)} a function which represents the compiled expression:
15330
+ *
15331
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
15332
+ * are evaluated against (typically a scope object).
15333
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15334
+ * `context`.
15335
+ */
15336
+
15337
+ /**
15338
+ * @ngdoc method
15339
+ * @name $sce#parseAsJs
15340
+ *
15341
+ * @description
15342
+ * Shorthand method. `$sce.parseAsJs(value)` →
15343
+ * {@link ng.$sce#parse `$sce.parseAs($sce.JS, value)`}
15344
+ *
15345
+ * @param {string} expression String expression to compile.
15346
+ * @returns {function(context, locals)} a function which represents the compiled expression:
15347
+ *
15348
+ * * `context` – `{object}` – an object against which any expressions embedded in the strings
15349
+ * are evaluated against (typically a scope object).
15350
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values in
15351
+ * `context`.
15352
+ */
15353
+
15354
+ // Shorthand delegations.
15355
+ var parse = sce.parseAs,
15356
+ getTrusted = sce.getTrusted,
15357
+ trustAs = sce.trustAs;
15358
+
15359
+ forEach(SCE_CONTEXTS, function (enumValue, name) {
15360
+ var lName = lowercase(name);
15361
+ sce[camelCase("parse_as_" + lName)] = function (expr) {
15362
+ return parse(enumValue, expr);
15363
+ };
15364
+ sce[camelCase("get_trusted_" + lName)] = function (value) {
15365
+ return getTrusted(enumValue, value);
15366
+ };
15367
+ sce[camelCase("trust_as_" + lName)] = function (value) {
15368
+ return trustAs(enumValue, value);
15369
+ };
15370
+ });
15371
+
15372
+ return sce;
15373
+ }];
15374
+}
15375
+
15376
+/**
15377
+ * !!! This is an undocumented "private" service !!!
15378
+ *
15379
+ * @name $sniffer
15380
+ * @requires $window
15381
+ * @requires $document
15382
+ *
15383
+ * @property {boolean} history Does the browser support html5 history api ?
15384
+ * @property {boolean} transitions Does the browser support CSS transition events ?
15385
+ * @property {boolean} animations Does the browser support CSS animation events ?
15386
+ *
15387
+ * @description
15388
+ * This is very simple implementation of testing browser's features.
15389
+ */
15390
+function $SnifferProvider() {
15391
+ this.$get = ['$window', '$document', function($window, $document) {
15392
+ var eventSupport = {},
15393
+ android =
15394
+ int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
15395
+ boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
15396
+ document = $document[0] || {},
15397
+ documentMode = document.documentMode,
15398
+ vendorPrefix,
15399
+ vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,
15400
+ bodyStyle = document.body && document.body.style,
15401
+ transitions = false,
15402
+ animations = false,
15403
+ match;
15404
+
15405
+ if (bodyStyle) {
15406
+ for(var prop in bodyStyle) {
15407
+ if(match = vendorRegex.exec(prop)) {
15408
+ vendorPrefix = match[0];
15409
+ vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
15410
+ break;
15411
+ }
15412
+ }
15413
+
15414
+ if(!vendorPrefix) {
15415
+ vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
15416
+ }
15417
+
15418
+ transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
15419
+ animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
15420
+
15421
+ if (android && (!transitions||!animations)) {
15422
+ transitions = isString(document.body.style.webkitTransition);
15423
+ animations = isString(document.body.style.webkitAnimation);
15424
+ }
15425
+ }
15426
+
15427
+
15428
+ return {
15429
+ // Android has history.pushState, but it does not update location correctly
15430
+ // so let's not use the history API at all.
15431
+ // http://code.google.com/p/android/issues/detail?id=17471
15432
+ // https://github.com/angular/angular.js/issues/904
15433
+
15434
+ // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
15435
+ // so let's not use the history API also
15436
+ // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
15437
+ // jshint -W018
15438
+ history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
15439
+ // jshint +W018
15440
+ hasEvent: function(event) {
15441
+ // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
15442
+ // it. In particular the event is not fired when backspace or delete key are pressed or
15443
+ // when cut operation is performed.
15444
+ if (event == 'input' && msie == 9) return false;
15445
+
15446
+ if (isUndefined(eventSupport[event])) {
15447
+ var divElm = document.createElement('div');
15448
+ eventSupport[event] = 'on' + event in divElm;
15449
+ }
15450
+
15451
+ return eventSupport[event];
15452
+ },
15453
+ csp: csp(),
15454
+ vendorPrefix: vendorPrefix,
15455
+ transitions : transitions,
15456
+ animations : animations,
15457
+ android: android,
15458
+ msie : msie,
15459
+ msieDocumentMode: documentMode
15460
+ };
15461
+ }];
15462
+}
15463
+
15464
+var $compileMinErr = minErr('$compile');
15465
+
15466
+/**
15467
+ * @ngdoc service
15468
+ * @name $templateRequest
15469
+ *
15470
+ * @description
15471
+ * The `$templateRequest` service downloads the provided template using `$http` and, upon success,
15472
+ * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data
15473
+ * of the HTTP request is empty then a `$compile` error will be thrown (the exception can be thwarted
15474
+ * by setting the 2nd parameter of the function to true).
15475
+ *
15476
+ * @param {string} tpl The HTTP request template URL
15477
+ * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
15478
+ *
15479
+ * @return {Promise} the HTTP Promise for the given.
15480
+ *
15481
+ * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
15482
+ */
15483
+function $TemplateRequestProvider() {
15484
+ this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) {
15485
+ function handleRequestFn(tpl, ignoreRequestError) {
15486
+ var self = handleRequestFn;
15487
+ self.totalPendingRequests++;
15488
+
15489
+ return $http.get(tpl, { cache : $templateCache })
15490
+ .then(function(response) {
15491
+ var html = response.data;
15492
+ if(!html || html.length === 0) {
15493
+ return handleError();
15494
+ }
15495
+
15496
+ self.totalPendingRequests--;
15497
+ $templateCache.put(tpl, html);
15498
+ return html;
15499
+ }, handleError);
15500
+
15501
+ function handleError() {
15502
+ self.totalPendingRequests--;
15503
+ if (!ignoreRequestError) {
15504
+ throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl);
15505
+ }
15506
+ return $q.reject();
15507
+ }
15508
+ }
15509
+
15510
+ handleRequestFn.totalPendingRequests = 0;
15511
+
15512
+ return handleRequestFn;
15513
+ }];
15514
+}
15515
+
15516
+function $$TestabilityProvider() {
15517
+ this.$get = ['$rootScope', '$browser', '$location',
15518
+ function($rootScope, $browser, $location) {
15519
+
15520
+ /**
15521
+ * @name $testability
15522
+ *
15523
+ * @description
15524
+ * The private $$testability service provides a collection of methods for use when debugging
15525
+ * or by automated test and debugging tools.
15526
+ */
15527
+ var testability = {};
15528
+
15529
+ /**
15530
+ * @name $$testability#findBindings
15531
+ *
15532
+ * @description
15533
+ * Returns an array of elements that are bound (via ng-bind or {{}})
15534
+ * to expressions matching the input.
15535
+ *
15536
+ * @param {Element} element The element root to search from.
15537
+ * @param {string} expression The binding expression to match.
15538
+ * @param {boolean} opt_exactMatch If true, only returns exact matches
15539
+ * for the expression. Filters and whitespace are ignored.
15540
+ */
15541
+ testability.findBindings = function(element, expression, opt_exactMatch) {
15542
+ var bindings = element.getElementsByClassName('ng-binding');
15543
+ var matches = [];
15544
+ forEach(bindings, function(binding) {
15545
+ var dataBinding = angular.element(binding).data('$binding');
15546
+ if (dataBinding) {
15547
+ forEach(dataBinding, function(bindingName) {
15548
+ if (opt_exactMatch) {
15549
+ var matcher = new RegExp('(^|\\s)' + expression + '(\\s|\\||$)');
15550
+ if (matcher.test(bindingName)) {
15551
+ matches.push(binding);
15552
+ }
15553
+ } else {
15554
+ if (bindingName.indexOf(expression) != -1) {
15555
+ matches.push(binding);
15556
+ }
15557
+ }
15558
+ });
15559
+ }
15560
+ });
15561
+ return matches;
15562
+ };
15563
+
15564
+ /**
15565
+ * @name $$testability#findModels
15566
+ *
15567
+ * @description
15568
+ * Returns an array of elements that are two-way found via ng-model to
15569
+ * expressions matching the input.
15570
+ *
15571
+ * @param {Element} element The element root to search from.
15572
+ * @param {string} expression The model expression to match.
15573
+ * @param {boolean} opt_exactMatch If true, only returns exact matches
15574
+ * for the expression.
15575
+ */
15576
+ testability.findModels = function(element, expression, opt_exactMatch) {
15577
+ var prefixes = ['ng-', 'data-ng-', 'ng\\:'];
15578
+ for (var p = 0; p < prefixes.length; ++p) {
15579
+ var attributeEquals = opt_exactMatch ? '=' : '*=';
15580
+ var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]';
15581
+ var elements = element.querySelectorAll(selector);
15582
+ if (elements.length) {
15583
+ return elements;
15584
+ }
15585
+ }
15586
+ };
15587
+
15588
+ /**
15589
+ * @name $$testability#getLocation
15590
+ *
15591
+ * @description
15592
+ * Shortcut for getting the location in a browser agnostic way. Returns
15593
+ * the path, search, and hash. (e.g. /path?a=b#hash)
15594
+ */
15595
+ testability.getLocation = function() {
15596
+ return $location.url();
15597
+ };
15598
+
15599
+ /**
15600
+ * @name $$testability#setLocation
15601
+ *
15602
+ * @description
15603
+ * Shortcut for navigating to a location without doing a full page reload.
15604
+ *
15605
+ * @param {string} url The location url (path, search and hash,
15606
+ * e.g. /path?a=b#hash) to go to.
15607
+ */
15608
+ testability.setLocation = function(url) {
15609
+ if (url !== $location.url()) {
15610
+ $location.url(url);
15611
+ $rootScope.$digest();
15612
+ }
15613
+ };
15614
+
15615
+ /**
15616
+ * @name $$testability#whenStable
15617
+ *
15618
+ * @description
15619
+ * Calls the callback when $timeout and $http requests are completed.
15620
+ *
15621
+ * @param {function} callback
15622
+ */
15623
+ testability.whenStable = function(callback) {
15624
+ $browser.notifyWhenNoOutstandingRequests(callback);
15625
+ };
15626
+
15627
+ return testability;
15628
+ }];
15629
+}
15630
+
15631
+function $TimeoutProvider() {
15632
+ this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',
15633
+ function($rootScope, $browser, $q, $$q, $exceptionHandler) {
15634
+ var deferreds = {};
15635
+
15636
+
15637
+ /**
15638
+ * @ngdoc service
15639
+ * @name $timeout
15640
+ *
15641
+ * @description
15642
+ * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch
15643
+ * block and delegates any exceptions to
15644
+ * {@link ng.$exceptionHandler $exceptionHandler} service.
15645
+ *
15646
+ * The return value of registering a timeout function is a promise, which will be resolved when
15647
+ * the timeout is reached and the timeout function is executed.
15648
+ *
15649
+ * To cancel a timeout request, call `$timeout.cancel(promise)`.
15650
+ *
15651
+ * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to
15652
+ * synchronously flush the queue of deferred functions.
15653
+ *
15654
+ * @param {function()} fn A function, whose execution should be delayed.
15655
+ * @param {number=} [delay=0] Delay in milliseconds.
15656
+ * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
15657
+ * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
15658
+ * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this
15659
+ * promise will be resolved with is the return value of the `fn` function.
15660
+ *
15661
+ */
15662
+ function timeout(fn, delay, invokeApply) {
15663
+ var skipApply = (isDefined(invokeApply) && !invokeApply),
15664
+ deferred = (skipApply ? $$q : $q).defer(),
15665
+ promise = deferred.promise,
15666
+ timeoutId;
15667
+
15668
+ timeoutId = $browser.defer(function() {
15669
+ try {
15670
+ deferred.resolve(fn());
15671
+ } catch(e) {
15672
+ deferred.reject(e);
15673
+ $exceptionHandler(e);
15674
+ }
15675
+ finally {
15676
+ delete deferreds[promise.$$timeoutId];
15677
+ }
15678
+
15679
+ if (!skipApply) $rootScope.$apply();
15680
+ }, delay);
15681
+
15682
+ promise.$$timeoutId = timeoutId;
15683
+ deferreds[timeoutId] = deferred;
15684
+
15685
+ return promise;
15686
+ }
15687
+
15688
+
15689
+ /**
15690
+ * @ngdoc method
15691
+ * @name $timeout#cancel
15692
+ *
15693
+ * @description
15694
+ * Cancels a task associated with the `promise`. As a result of this, the promise will be
15695
+ * resolved with a rejection.
15696
+ *
15697
+ * @param {Promise=} promise Promise returned by the `$timeout` function.
15698
+ * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
15699
+ * canceled.
15700
+ */
15701
+ timeout.cancel = function(promise) {
15702
+ if (promise && promise.$$timeoutId in deferreds) {
15703
+ deferreds[promise.$$timeoutId].reject('canceled');
15704
+ delete deferreds[promise.$$timeoutId];
15705
+ return $browser.defer.cancel(promise.$$timeoutId);
15706
+ }
15707
+ return false;
15708
+ };
15709
+
15710
+ return timeout;
15711
+ }];
15712
+}
15713
+
15714
+// NOTE: The usage of window and document instead of $window and $document here is
15715
+// deliberate. This service depends on the specific behavior of anchor nodes created by the
15716
+// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and
15717
+// cause us to break tests. In addition, when the browser resolves a URL for XHR, it
15718
+// doesn't know about mocked locations and resolves URLs to the real document - which is
15719
+// exactly the behavior needed here. There is little value is mocking these out for this
15720
+// service.
15721
+var urlParsingNode = document.createElement("a");
15722
+var originUrl = urlResolve(window.location.href, true);
15723
+
15724
+
15725
+/**
15726
+ *
15727
+ * Implementation Notes for non-IE browsers
15728
+ * ----------------------------------------
15729
+ * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,
15730
+ * results both in the normalizing and parsing of the URL. Normalizing means that a relative
15731
+ * URL will be resolved into an absolute URL in the context of the application document.
15732
+ * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related
15733
+ * properties are all populated to reflect the normalized URL. This approach has wide
15734
+ * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See
15735
+ * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
15736
+ *
15737
+ * Implementation Notes for IE
15738
+ * ---------------------------
15739
+ * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other
15740
+ * browsers. However, the parsed components will not be set if the URL assigned did not specify
15741
+ * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We
15742
+ * work around that by performing the parsing in a 2nd step by taking a previously normalized
15743
+ * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the
15744
+ * properties such as protocol, hostname, port, etc.
15745
+ *
15746
+ * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one
15747
+ * uses the inner HTML approach to assign the URL as part of an HTML snippet -
15748
+ * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL.
15749
+ * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception.
15750
+ * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that
15751
+ * method and IE < 8 is unsupported.
15752
+ *
15753
+ * References:
15754
+ * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement
15755
+ * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
15756
+ * http://url.spec.whatwg.org/#urlutils
15757
+ * https://github.com/angular/angular.js/pull/2902
15758
+ * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
15759
+ *
15760
+ * @kind function
15761
+ * @param {string} url The URL to be parsed.
15762
+ * @description Normalizes and parses a URL.
15763
+ * @returns {object} Returns the normalized URL as a dictionary.
15764
+ *
15765
+ * | member name | Description |
15766
+ * |---------------|----------------|
15767
+ * | href | A normalized version of the provided URL if it was not an absolute URL |
15768
+ * | protocol | The protocol including the trailing colon |
15769
+ * | host | The host and port (if the port is non-default) of the normalizedUrl |
15770
+ * | search | The search params, minus the question mark |
15771
+ * | hash | The hash string, minus the hash symbol
15772
+ * | hostname | The hostname
15773
+ * | port | The port, without ":"
15774
+ * | pathname | The pathname, beginning with "/"
15775
+ *
15776
+ */
15777
+function urlResolve(url, base) {
15778
+ var href = url;
15779
+
15780
+ if (msie) {
15781
+ // Normalize before parse. Refer Implementation Notes on why this is
15782
+ // done in two steps on IE.
15783
+ urlParsingNode.setAttribute("href", href);
15784
+ href = urlParsingNode.href;
15785
+ }
15786
+
15787
+ urlParsingNode.setAttribute('href', href);
15788
+
15789
+ // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
15790
+ return {
15791
+ href: urlParsingNode.href,
15792
+ protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
15793
+ host: urlParsingNode.host,
15794
+ search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
15795
+ hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
15796
+ hostname: urlParsingNode.hostname,
15797
+ port: urlParsingNode.port,
15798
+ pathname: (urlParsingNode.pathname.charAt(0) === '/')
15799
+ ? urlParsingNode.pathname
15800
+ : '/' + urlParsingNode.pathname
15801
+ };
15802
+}
15803
+
15804
+/**
15805
+ * Parse a request URL and determine whether this is a same-origin request as the application document.
15806
+ *
15807
+ * @param {string|object} requestUrl The url of the request as a string that will be resolved
15808
+ * or a parsed URL object.
15809
+ * @returns {boolean} Whether the request is for the same origin as the application document.
15810
+ */
15811
+function urlIsSameOrigin(requestUrl) {
15812
+ var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;
15813
+ return (parsed.protocol === originUrl.protocol &&
15814
+ parsed.host === originUrl.host);
15815
+}
15816
+
15817
+/**
15818
+ * @ngdoc service
15819
+ * @name $window
15820
+ *
15821
+ * @description
15822
+ * A reference to the browser's `window` object. While `window`
15823
+ * is globally available in JavaScript, it causes testability problems, because
15824
+ * it is a global variable. In angular we always refer to it through the
15825
+ * `$window` service, so it may be overridden, removed or mocked for testing.
15826
+ *
15827
+ * Expressions, like the one defined for the `ngClick` directive in the example
15828
+ * below, are evaluated with respect to the current scope. Therefore, there is
15829
+ * no risk of inadvertently coding in a dependency on a global value in such an
15830
+ * expression.
15831
+ *
15832
+ * @example
15833
+ <example module="windowExample">
15834
+ <file name="index.html">
15835
+ <script>
15836
+ angular.module('windowExample', [])
15837
+ .controller('ExampleController', ['$scope', '$window', function ($scope, $window) {
15838
+ $scope.greeting = 'Hello, World!';
15839
+ $scope.doGreeting = function(greeting) {
15840
+ $window.alert(greeting);
15841
+ };
15842
+ }]);
15843
+ </script>
15844
+ <div ng-controller="ExampleController">
15845
+ <input type="text" ng-model="greeting" />
15846
+ <button ng-click="doGreeting(greeting)">ALERT</button>
15847
+ </div>
15848
+ </file>
15849
+ <file name="protractor.js" type="protractor">
15850
+ it('should display the greeting in the input box', function() {
15851
+ element(by.model('greeting')).sendKeys('Hello, E2E Tests');
15852
+ // If we click the button it will block the test runner
15853
+ // element(':button').click();
15854
+ });
15855
+ </file>
15856
+ </example>
15857
+ */
15858
+function $WindowProvider(){
15859
+ this.$get = valueFn(window);
15860
+}
15861
+
15862
+/* global currencyFilter: true,
15863
+ dateFilter: true,
15864
+ filterFilter: true,
15865
+ jsonFilter: true,
15866
+ limitToFilter: true,
15867
+ lowercaseFilter: true,
15868
+ numberFilter: true,
15869
+ orderByFilter: true,
15870
+ uppercaseFilter: true,
15871
+ */
15872
+
15873
+/**
15874
+ * @ngdoc provider
15875
+ * @name $filterProvider
15876
+ * @description
15877
+ *
15878
+ * Filters are just functions which transform input to an output. However filters need to be
15879
+ * Dependency Injected. To achieve this a filter definition consists of a factory function which is
15880
+ * annotated with dependencies and is responsible for creating a filter function.
15881
+ *
15882
+ * ```js
15883
+ * // Filter registration
15884
+ * function MyModule($provide, $filterProvider) {
15885
+ * // create a service to demonstrate injection (not always needed)
15886
+ * $provide.value('greet', function(name){
15887
+ * return 'Hello ' + name + '!';
15888
+ * });
15889
+ *
15890
+ * // register a filter factory which uses the
15891
+ * // greet service to demonstrate DI.
15892
+ * $filterProvider.register('greet', function(greet){
15893
+ * // return the filter function which uses the greet service
15894
+ * // to generate salutation
15895
+ * return function(text) {
15896
+ * // filters need to be forgiving so check input validity
15897
+ * return text && greet(text) || text;
15898
+ * };
15899
+ * });
15900
+ * }
15901
+ * ```
15902
+ *
15903
+ * The filter function is registered with the `$injector` under the filter name suffix with
15904
+ * `Filter`.
15905
+ *
15906
+ * ```js
15907
+ * it('should be the same instance', inject(
15908
+ * function($filterProvider) {
15909
+ * $filterProvider.register('reverse', function(){
15910
+ * return ...;
15911
+ * });
15912
+ * },
15913
+ * function($filter, reverseFilter) {
15914
+ * expect($filter('reverse')).toBe(reverseFilter);
15915
+ * });
15916
+ * ```
15917
+ *
15918
+ *
15919
+ * For more information about how angular filters work, and how to create your own filters, see
15920
+ * {@link guide/filter Filters} in the Angular Developer Guide.
15921
+ */
15922
+
15923
+/**
15924
+ * @ngdoc service
15925
+ * @name $filter
15926
+ * @kind function
15927
+ * @description
15928
+ * Filters are used for formatting data displayed to the user.
15929
+ *
15930
+ * The general syntax in templates is as follows:
15931
+ *
15932
+ * {{ expression [| filter_name[:parameter_value] ... ] }}
15933
+ *
15934
+ * @param {String} name Name of the filter function to retrieve
15935
+ * @return {Function} the filter function
15936
+ * @example
15937
+ <example name="$filter" module="filterExample">
15938
+ <file name="index.html">
15939
+ <div ng-controller="MainCtrl">
15940
+ <h3>{{ originalText }}</h3>
15941
+ <h3>{{ filteredText }}</h3>
15942
+ </div>
15943
+ </file>
15944
+
15945
+ <file name="script.js">
15946
+ angular.module('filterExample', [])
15947
+ .controller('MainCtrl', function($scope, $filter) {
15948
+ $scope.originalText = 'hello';
15949
+ $scope.filteredText = $filter('uppercase')($scope.originalText);
15950
+ });
15951
+ </file>
15952
+ </example>
15953
+ */
15954
+$FilterProvider.$inject = ['$provide'];
15955
+function $FilterProvider($provide) {
15956
+ var suffix = 'Filter';
15957
+
15958
+ /**
15959
+ * @ngdoc method
15960
+ * @name $filterProvider#register
15961
+ * @param {string|Object} name Name of the filter function, or an object map of filters where
15962
+ * the keys are the filter names and the values are the filter factories.
15963
+ * @returns {Object} Registered filter instance, or if a map of filters was provided then a map
15964
+ * of the registered filter instances.
15965
+ */
15966
+ function register(name, factory) {
15967
+ if(isObject(name)) {
15968
+ var filters = {};
15969
+ forEach(name, function(filter, key) {
15970
+ filters[key] = register(key, filter);
15971
+ });
15972
+ return filters;
15973
+ } else {
15974
+ return $provide.factory(name + suffix, factory);
15975
+ }
15976
+ }
15977
+ this.register = register;
15978
+
15979
+ this.$get = ['$injector', function($injector) {
15980
+ return function(name) {
15981
+ return $injector.get(name + suffix);
15982
+ };
15983
+ }];
15984
+
15985
+ ////////////////////////////////////////
15986
+
15987
+ /* global
15988
+ currencyFilter: false,
15989
+ dateFilter: false,
15990
+ filterFilter: false,
15991
+ jsonFilter: false,
15992
+ limitToFilter: false,
15993
+ lowercaseFilter: false,
15994
+ numberFilter: false,
15995
+ orderByFilter: false,
15996
+ uppercaseFilter: false,
15997
+ */
15998
+
15999
+ register('currency', currencyFilter);
16000
+ register('date', dateFilter);
16001
+ register('filter', filterFilter);
16002
+ register('json', jsonFilter);
16003
+ register('limitTo', limitToFilter);
16004
+ register('lowercase', lowercaseFilter);
16005
+ register('number', numberFilter);
16006
+ register('orderBy', orderByFilter);
16007
+ register('uppercase', uppercaseFilter);
16008
+}
16009
+
16010
+/**
16011
+ * @ngdoc filter
16012
+ * @name filter
16013
+ * @kind function
16014
+ *
16015
+ * @description
16016
+ * Selects a subset of items from `array` and returns it as a new array.
16017
+ *
16018
+ * @param {Array} array The source array.
16019
+ * @param {string|Object|function()} expression The predicate to be used for selecting items from
16020
+ * `array`.
16021
+ *
16022
+ * Can be one of:
16023
+ *
16024
+ * - `string`: The string is evaluated as an expression and the resulting value is used for substring match against
16025
+ * the contents of the `array`. All strings or objects with string properties in `array` that contain this string
16026
+ * will be returned. The predicate can be negated by prefixing the string with `!`.
16027
+ *
16028
+ * - `Object`: A pattern object can be used to filter specific properties on objects contained
16029
+ * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
16030
+ * which have property `name` containing "M" and property `phone` containing "1". A special
16031
+ * property name `$` can be used (as in `{$:"text"}`) to accept a match against any
16032
+ * property of the object. That's equivalent to the simple substring match with a `string`
16033
+ * as described above. The predicate can be negated by prefixing the string with `!`.
16034
+ * For Example `{name: "!M"}` predicate will return an array of items which have property `name`
16035
+ * not containing "M".
16036
+ *
16037
+ * - `function(value, index)`: A predicate function can be used to write arbitrary filters. The
16038
+ * function is called for each element of `array`. The final result is an array of those
16039
+ * elements that the predicate returned true for.
16040
+ *
16041
+ * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
16042
+ * determining if the expected value (from the filter expression) and actual value (from
16043
+ * the object in the array) should be considered a match.
16044
+ *
16045
+ * Can be one of:
16046
+ *
16047
+ * - `function(actual, expected)`:
16048
+ * The function will be given the object value and the predicate value to compare and
16049
+ * should return true if the item should be included in filtered result.
16050
+ *
16051
+ * - `true`: A shorthand for `function(actual, expected) { return angular.equals(expected, actual)}`.
16052
+ * this is essentially strict comparison of expected and actual.
16053
+ *
16054
+ * - `false|undefined`: A short hand for a function which will look for a substring match in case
16055
+ * insensitive way.
16056
+ *
16057
+ * @example
16058
+ <example>
16059
+ <file name="index.html">
16060
+ <div ng-init="friends = [{name:'John', phone:'555-1276'},
16061
+ {name:'Mary', phone:'800-BIG-MARY'},
16062
+ {name:'Mike', phone:'555-4321'},
16063
+ {name:'Adam', phone:'555-5678'},
16064
+ {name:'Julie', phone:'555-8765'},
16065
+ {name:'Juliette', phone:'555-5678'}]"></div>
16066
+
16067
+ Search: <input ng-model="searchText">
16068
+ <table id="searchTextResults">
16069
+ <tr><th>Name</th><th>Phone</th></tr>
16070
+ <tr ng-repeat="friend in friends | filter:searchText">
16071
+ <td>{{friend.name}}</td>
16072
+ <td>{{friend.phone}}</td>
16073
+ </tr>
16074
+ </table>
16075
+ <hr>
16076
+ Any: <input ng-model="search.$"> <br>
16077
+ Name only <input ng-model="search.name"><br>
16078
+ Phone only <input ng-model="search.phone"><br>
16079
+ Equality <input type="checkbox" ng-model="strict"><br>
16080
+ <table id="searchObjResults">
16081
+ <tr><th>Name</th><th>Phone</th></tr>
16082
+ <tr ng-repeat="friendObj in friends | filter:search:strict">
16083
+ <td>{{friendObj.name}}</td>
16084
+ <td>{{friendObj.phone}}</td>
16085
+ </tr>
16086
+ </table>
16087
+ </file>
16088
+ <file name="protractor.js" type="protractor">
16089
+ var expectFriendNames = function(expectedNames, key) {
16090
+ element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {
16091
+ arr.forEach(function(wd, i) {
16092
+ expect(wd.getText()).toMatch(expectedNames[i]);
16093
+ });
16094
+ });
16095
+ };
16096
+
16097
+ it('should search across all fields when filtering with a string', function() {
16098
+ var searchText = element(by.model('searchText'));
16099
+ searchText.clear();
16100
+ searchText.sendKeys('m');
16101
+ expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');
16102
+
16103
+ searchText.clear();
16104
+ searchText.sendKeys('76');
16105
+ expectFriendNames(['John', 'Julie'], 'friend');
16106
+ });
16107
+
16108
+ it('should search in specific fields when filtering with a predicate object', function() {
16109
+ var searchAny = element(by.model('search.$'));
16110
+ searchAny.clear();
16111
+ searchAny.sendKeys('i');
16112
+ expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');
16113
+ });
16114
+ it('should use a equal comparison when comparator is true', function() {
16115
+ var searchName = element(by.model('search.name'));
16116
+ var strict = element(by.model('strict'));
16117
+ searchName.clear();
16118
+ searchName.sendKeys('Julie');
16119
+ strict.click();
16120
+ expectFriendNames(['Julie'], 'friendObj');
16121
+ });
16122
+ </file>
16123
+ </example>
16124
+ */
16125
+function filterFilter() {
16126
+ return function(array, expression, comparator) {
16127
+ if (!isArray(array)) return array;
16128
+
16129
+ var comparatorType = typeof(comparator),
16130
+ predicates = [];
16131
+
16132
+ predicates.check = function(value, index) {
16133
+ for (var j = 0; j < predicates.length; j++) {
16134
+ if(!predicates[j](value, index)) {
16135
+ return false;
16136
+ }
16137
+ }
16138
+ return true;
16139
+ };
16140
+
16141
+ if (comparatorType !== 'function') {
16142
+ if (comparatorType === 'boolean' && comparator) {
16143
+ comparator = function(obj, text) {
16144
+ return angular.equals(obj, text);
16145
+ };
16146
+ } else {
16147
+ comparator = function(obj, text) {
16148
+ if (obj && text && typeof obj === 'object' && typeof text === 'object') {
16149
+ for (var objKey in obj) {
16150
+ if (objKey.charAt(0) !== '$' && hasOwnProperty.call(obj, objKey) &&
16151
+ comparator(obj[objKey], text[objKey])) {
16152
+ return true;
16153
+ }
16154
+ }
16155
+ return false;
16156
+ }
16157
+ text = (''+text).toLowerCase();
16158
+ return (''+obj).toLowerCase().indexOf(text) > -1;
16159
+ };
16160
+ }
16161
+ }
16162
+
16163
+ var search = function(obj, text){
16164
+ if (typeof text == 'string' && text.charAt(0) === '!') {
16165
+ return !search(obj, text.substr(1));
16166
+ }
16167
+ switch (typeof obj) {
16168
+ case "boolean":
16169
+ case "number":
16170
+ case "string":
16171
+ return comparator(obj, text);
16172
+ case "object":
16173
+ switch (typeof text) {
16174
+ case "object":
16175
+ return comparator(obj, text);
16176
+ default:
16177
+ for ( var objKey in obj) {
16178
+ if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {
16179
+ return true;
16180
+ }
16181
+ }
16182
+ break;
16183
+ }
16184
+ return false;
16185
+ case "array":
16186
+ for ( var i = 0; i < obj.length; i++) {
16187
+ if (search(obj[i], text)) {
16188
+ return true;
16189
+ }
16190
+ }
16191
+ return false;
16192
+ default:
16193
+ return false;
16194
+ }
16195
+ };
16196
+ switch (typeof expression) {
16197
+ case "boolean":
16198
+ case "number":
16199
+ case "string":
16200
+ // Set up expression object and fall through
16201
+ expression = {$:expression};
16202
+ // jshint -W086
16203
+ case "object":
16204
+ // jshint +W086
16205
+ for (var key in expression) {
16206
+ (function(path) {
16207
+ if (typeof expression[path] === 'undefined') return;
16208
+ predicates.push(function(value) {
16209
+ return search(path == '$' ? value : (value && value[path]), expression[path]);
16210
+ });
16211
+ })(key);
16212
+ }
16213
+ break;
16214
+ case 'function':
16215
+ predicates.push(expression);
16216
+ break;
16217
+ default:
16218
+ return array;
16219
+ }
16220
+ var filtered = [];
16221
+ for ( var j = 0; j < array.length; j++) {
16222
+ var value = array[j];
16223
+ if (predicates.check(value, j)) {
16224
+ filtered.push(value);
16225
+ }
16226
+ }
16227
+ return filtered;
16228
+ };
16229
+}
16230
+
16231
+/**
16232
+ * @ngdoc filter
16233
+ * @name currency
16234
+ * @kind function
16235
+ *
16236
+ * @description
16237
+ * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default
16238
+ * symbol for current locale is used.
16239
+ *
16240
+ * @param {number} amount Input to filter.
16241
+ * @param {string=} symbol Currency symbol or identifier to be displayed.
16242
+ * @returns {string} Formatted number.
16243
+ *
16244
+ *
16245
+ * @example
16246
+ <example module="currencyExample">
16247
+ <file name="index.html">
16248
+ <script>
16249
+ angular.module('currencyExample', [])
16250
+ .controller('ExampleController', ['$scope', function($scope) {
16251
+ $scope.amount = 1234.56;
16252
+ }]);
16253
+ </script>
16254
+ <div ng-controller="ExampleController">
16255
+ <input type="number" ng-model="amount"> <br>
16256
+ default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br>
16257
+ custom currency identifier (USD$): <span>{{amount | currency:"USD$"}}</span>
16258
+ </div>
16259
+ </file>
16260
+ <file name="protractor.js" type="protractor">
16261
+ it('should init with 1234.56', function() {
16262
+ expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');
16263
+ expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('USD$1,234.56');
16264
+ });
16265
+ it('should update', function() {
16266
+ if (browser.params.browser == 'safari') {
16267
+ // Safari does not understand the minus key. See
16268
+ // https://github.com/angular/protractor/issues/481
16269
+ return;
16270
+ }
16271
+ element(by.model('amount')).clear();
16272
+ element(by.model('amount')).sendKeys('-1234');
16273
+ expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)');
16274
+ expect(element(by.binding('amount | currency:"USD$"')).getText()).toBe('(USD$1,234.00)');
16275
+ });
16276
+ </file>
16277
+ </example>
16278
+ */
16279
+currencyFilter.$inject = ['$locale'];
16280
+function currencyFilter($locale) {
16281
+ var formats = $locale.NUMBER_FORMATS;
16282
+ return function(amount, currencySymbol){
16283
+ if (isUndefined(currencySymbol)) currencySymbol = formats.CURRENCY_SYM;
16284
+
16285
+ // if null or undefined pass it through
16286
+ return (amount == null)
16287
+ ? amount
16288
+ : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2).
16289
+ replace(/\u00A4/g, currencySymbol);
16290
+ };
16291
+}
16292
+
16293
+/**
16294
+ * @ngdoc filter
16295
+ * @name number
16296
+ * @kind function
16297
+ *
16298
+ * @description
16299
+ * Formats a number as text.
16300
+ *
16301
+ * If the input is not a number an empty string is returned.
16302
+ *
16303
+ * @param {number|string} number Number to format.
16304
+ * @param {(number|string)=} fractionSize Number of decimal places to round the number to.
16305
+ * If this is not provided then the fraction size is computed from the current locale's number
16306
+ * formatting pattern. In the case of the default locale, it will be 3.
16307
+ * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.
16308
+ *
16309
+ * @example
16310
+ <example module="numberFilterExample">
16311
+ <file name="index.html">
16312
+ <script>
16313
+ angular.module('numberFilterExample', [])
16314
+ .controller('ExampleController', ['$scope', function($scope) {
16315
+ $scope.val = 1234.56789;
16316
+ }]);
16317
+ </script>
16318
+ <div ng-controller="ExampleController">
16319
+ Enter number: <input ng-model='val'><br>
16320
+ Default formatting: <span id='number-default'>{{val | number}}</span><br>
16321
+ No fractions: <span>{{val | number:0}}</span><br>
16322
+ Negative number: <span>{{-val | number:4}}</span>
16323
+ </div>
16324
+ </file>
16325
+ <file name="protractor.js" type="protractor">
16326
+ it('should format numbers', function() {
16327
+ expect(element(by.id('number-default')).getText()).toBe('1,234.568');
16328
+ expect(element(by.binding('val | number:0')).getText()).toBe('1,235');
16329
+ expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');
16330
+ });
16331
+
16332
+ it('should update', function() {
16333
+ element(by.model('val')).clear();
16334
+ element(by.model('val')).sendKeys('3374.333');
16335
+ expect(element(by.id('number-default')).getText()).toBe('3,374.333');
16336
+ expect(element(by.binding('val | number:0')).getText()).toBe('3,374');
16337
+ expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');
16338
+ });
16339
+ </file>
16340
+ </example>
16341
+ */
16342
+
16343
+
16344
+numberFilter.$inject = ['$locale'];
16345
+function numberFilter($locale) {
16346
+ var formats = $locale.NUMBER_FORMATS;
16347
+ return function(number, fractionSize) {
16348
+
16349
+ // if null or undefined pass it through
16350
+ return (number == null)
16351
+ ? number
16352
+ : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
16353
+ fractionSize);
16354
+ };
16355
+}
16356
+
16357
+var DECIMAL_SEP = '.';
16358
+function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
16359
+ if (!isFinite(number) || isObject(number)) return '';
16360
+
16361
+ var isNegative = number < 0;
16362
+ number = Math.abs(number);
16363
+ var numStr = number + '',
16364
+ formatedText = '',
16365
+ parts = [];
16366
+
16367
+ var hasExponent = false;
16368
+ if (numStr.indexOf('e') !== -1) {
16369
+ var match = numStr.match(/([\d\.]+)e(-?)(\d+)/);
16370
+ if (match && match[2] == '-' && match[3] > fractionSize + 1) {
16371
+ numStr = '0';
16372
+ number = 0;
16373
+ } else {
16374
+ formatedText = numStr;
16375
+ hasExponent = true;
16376
+ }
16377
+ }
16378
+
16379
+ if (!hasExponent) {
16380
+ var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;
16381
+
16382
+ // determine fractionSize if it is not specified
16383
+ if (isUndefined(fractionSize)) {
16384
+ fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);
16385
+ }
16386
+
16387
+ // safely round numbers in JS without hitting imprecisions of floating-point arithmetics
16388
+ // inspired by:
16389
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
16390
+ number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
16391
+
16392
+ if (number === 0) {
16393
+ isNegative = false;
16394
+ }
16395
+
16396
+ var fraction = ('' + number).split(DECIMAL_SEP);
16397
+ var whole = fraction[0];
16398
+ fraction = fraction[1] || '';
16399
+
16400
+ var i, pos = 0,
16401
+ lgroup = pattern.lgSize,
16402
+ group = pattern.gSize;
16403
+
16404
+ if (whole.length >= (lgroup + group)) {
16405
+ pos = whole.length - lgroup;
16406
+ for (i = 0; i < pos; i++) {
16407
+ if ((pos - i)%group === 0 && i !== 0) {
16408
+ formatedText += groupSep;
16409
+ }
16410
+ formatedText += whole.charAt(i);
16411
+ }
16412
+ }
16413
+
16414
+ for (i = pos; i < whole.length; i++) {
16415
+ if ((whole.length - i)%lgroup === 0 && i !== 0) {
16416
+ formatedText += groupSep;
16417
+ }
16418
+ formatedText += whole.charAt(i);
16419
+ }
16420
+
16421
+ // format fraction part.
16422
+ while(fraction.length < fractionSize) {
16423
+ fraction += '0';
16424
+ }
16425
+
16426
+ if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
16427
+ } else {
16428
+
16429
+ if (fractionSize > 0 && number > -1 && number < 1) {
16430
+ formatedText = number.toFixed(fractionSize);
16431
+ }
16432
+ }
16433
+
16434
+ parts.push(isNegative ? pattern.negPre : pattern.posPre);
16435
+ parts.push(formatedText);
16436
+ parts.push(isNegative ? pattern.negSuf : pattern.posSuf);
16437
+ return parts.join('');
16438
+}
16439
+
16440
+function padNumber(num, digits, trim) {
16441
+ var neg = '';
16442
+ if (num < 0) {
16443
+ neg = '-';
16444
+ num = -num;
16445
+ }
16446
+ num = '' + num;
16447
+ while(num.length < digits) num = '0' + num;
16448
+ if (trim)
16449
+ num = num.substr(num.length - digits);
16450
+ return neg + num;
16451
+}
16452
+
16453
+
16454
+function dateGetter(name, size, offset, trim) {
16455
+ offset = offset || 0;
16456
+ return function(date) {
16457
+ var value = date['get' + name]();
16458
+ if (offset > 0 || value > -offset)
16459
+ value += offset;
16460
+ if (value === 0 && offset == -12 ) value = 12;
16461
+ return padNumber(value, size, trim);
16462
+ };
16463
+}
16464
+
16465
+function dateStrGetter(name, shortForm) {
16466
+ return function(date, formats) {
16467
+ var value = date['get' + name]();
16468
+ var get = uppercase(shortForm ? ('SHORT' + name) : name);
16469
+
16470
+ return formats[get][value];
16471
+ };
16472
+}
16473
+
16474
+function timeZoneGetter(date) {
16475
+ var zone = -1 * date.getTimezoneOffset();
16476
+ var paddedZone = (zone >= 0) ? "+" : "";
16477
+
16478
+ paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +
16479
+ padNumber(Math.abs(zone % 60), 2);
16480
+
16481
+ return paddedZone;
16482
+}
16483
+
16484
+function getFirstThursdayOfYear(year) {
16485
+ // 0 = index of January
16486
+ var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();
16487
+ // 4 = index of Thursday (+1 to account for 1st = 5)
16488
+ // 11 = index of *next* Thursday (+1 account for 1st = 12)
16489
+ return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);
16490
+}
16491
+
16492
+function getThursdayThisWeek(datetime) {
16493
+ return new Date(datetime.getFullYear(), datetime.getMonth(),
16494
+ // 4 = index of Thursday
16495
+ datetime.getDate() + (4 - datetime.getDay()));
16496
+}
16497
+
16498
+function weekGetter(size) {
16499
+ return function(date) {
16500
+ var firstThurs = getFirstThursdayOfYear(date.getFullYear()),
16501
+ thisThurs = getThursdayThisWeek(date);
16502
+
16503
+ var diff = +thisThurs - +firstThurs,
16504
+ result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
16505
+
16506
+ return padNumber(result, size);
16507
+ };
16508
+}
16509
+
16510
+function ampmGetter(date, formats) {
16511
+ return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];
16512
+}
16513
+
16514
+var DATE_FORMATS = {
16515
+ yyyy: dateGetter('FullYear', 4),
16516
+ yy: dateGetter('FullYear', 2, 0, true),
16517
+ y: dateGetter('FullYear', 1),
16518
+ MMMM: dateStrGetter('Month'),
16519
+ MMM: dateStrGetter('Month', true),
16520
+ MM: dateGetter('Month', 2, 1),
16521
+ M: dateGetter('Month', 1, 1),
16522
+ dd: dateGetter('Date', 2),
16523
+ d: dateGetter('Date', 1),
16524
+ HH: dateGetter('Hours', 2),
16525
+ H: dateGetter('Hours', 1),
16526
+ hh: dateGetter('Hours', 2, -12),
16527
+ h: dateGetter('Hours', 1, -12),
16528
+ mm: dateGetter('Minutes', 2),
16529
+ m: dateGetter('Minutes', 1),
16530
+ ss: dateGetter('Seconds', 2),
16531
+ s: dateGetter('Seconds', 1),
16532
+ // while ISO 8601 requires fractions to be prefixed with `.` or `,`
16533
+ // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions
16534
+ sss: dateGetter('Milliseconds', 3),
16535
+ EEEE: dateStrGetter('Day'),
16536
+ EEE: dateStrGetter('Day', true),
16537
+ a: ampmGetter,
16538
+ Z: timeZoneGetter,
16539
+ ww: weekGetter(2),
16540
+ w: weekGetter(1)
16541
+};
16542
+
16543
+var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
16544
+ NUMBER_STRING = /^\-?\d+$/;
16545
+
16546
+/**
16547
+ * @ngdoc filter
16548
+ * @name date
16549
+ * @kind function
16550
+ *
16551
+ * @description
16552
+ * Formats `date` to a string based on the requested `format`.
16553
+ *
16554
+ * `format` string can be composed of the following elements:
16555
+ *
16556
+ * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
16557
+ * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
16558
+ * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
16559
+ * * `'MMMM'`: Month in year (January-December)
16560
+ * * `'MMM'`: Month in year (Jan-Dec)
16561
+ * * `'MM'`: Month in year, padded (01-12)
16562
+ * * `'M'`: Month in year (1-12)
16563
+ * * `'dd'`: Day in month, padded (01-31)
16564
+ * * `'d'`: Day in month (1-31)
16565
+ * * `'EEEE'`: Day in Week,(Sunday-Saturday)
16566
+ * * `'EEE'`: Day in Week, (Sun-Sat)
16567
+ * * `'HH'`: Hour in day, padded (00-23)
16568
+ * * `'H'`: Hour in day (0-23)
16569
+ * * `'hh'`: Hour in AM/PM, padded (01-12)
16570
+ * * `'h'`: Hour in AM/PM, (1-12)
16571
+ * * `'mm'`: Minute in hour, padded (00-59)
16572
+ * * `'m'`: Minute in hour (0-59)
16573
+ * * `'ss'`: Second in minute, padded (00-59)
16574
+ * * `'s'`: Second in minute (0-59)
16575
+ * * `'.sss' or ',sss'`: Millisecond in second, padded (000-999)
16576
+ * * `'a'`: AM/PM marker
16577
+ * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
16578
+ * * `'ww'`: ISO-8601 week of year (00-53)
16579
+ * * `'w'`: ISO-8601 week of year (0-53)
16580
+ *
16581
+ * `format` string can also be one of the following predefined
16582
+ * {@link guide/i18n localizable formats}:
16583
+ *
16584
+ * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale
16585
+ * (e.g. Sep 3, 2010 12:05:08 PM)
16586
+ * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM)
16587
+ * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale
16588
+ * (e.g. Friday, September 3, 2010)
16589
+ * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010)
16590
+ * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010)
16591
+ * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
16592
+ * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)
16593
+ * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)
16594
+ *
16595
+ * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.
16596
+ * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
16597
+ * (e.g. `"h 'o''clock'"`).
16598
+ *
16599
+ * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
16600
+ * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
16601
+ * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
16602
+ * specified in the string input, the time is considered to be in the local timezone.
16603
+ * @param {string=} format Formatting rules (see Description). If not specified,
16604
+ * `mediumDate` is used.
16605
+ * @param {string=} timezone Timezone to be used for formatting. Right now, only `'UTC'` is supported.
16606
+ * If not specified, the timezone of the browser will be used.
16607
+ * @returns {string} Formatted string or the input if input is not recognized as date/millis.
16608
+ *
16609
+ * @example
16610
+ <example>
16611
+ <file name="index.html">
16612
+ <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:
16613
+ <span>{{1288323623006 | date:'medium'}}</span><br>
16614
+ <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:
16615
+ <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>
16616
+ <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
16617
+ <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>
16618
+ <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>:
16619
+ <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br>
16620
+ </file>
16621
+ <file name="protractor.js" type="protractor">
16622
+ it('should format date', function() {
16623
+ expect(element(by.binding("1288323623006 | date:'medium'")).getText()).
16624
+ toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/);
16625
+ expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()).
16626
+ toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
16627
+ expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
16628
+ toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
16629
+ expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
16630
+ toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/);
16631
+ });
16632
+ </file>
16633
+ </example>
16634
+ */
16635
+dateFilter.$inject = ['$locale'];
16636
+function dateFilter($locale) {
16637
+
16638
+
16639
+ var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
16640
+ // 1 2 3 4 5 6 7 8 9 10 11
16641
+ function jsonStringToDate(string) {
16642
+ var match;
16643
+ if (match = string.match(R_ISO8601_STR)) {
16644
+ var date = new Date(0),
16645
+ tzHour = 0,
16646
+ tzMin = 0,
16647
+ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
16648
+ timeSetter = match[8] ? date.setUTCHours : date.setHours;
16649
+
16650
+ if (match[9]) {
16651
+ tzHour = int(match[9] + match[10]);
16652
+ tzMin = int(match[9] + match[11]);
16653
+ }
16654
+ dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3]));
16655
+ var h = int(match[4]||0) - tzHour;
16656
+ var m = int(match[5]||0) - tzMin;
16657
+ var s = int(match[6]||0);
16658
+ var ms = Math.round(parseFloat('0.' + (match[7]||0)) * 1000);
16659
+ timeSetter.call(date, h, m, s, ms);
16660
+ return date;
16661
+ }
16662
+ return string;
16663
+ }
16664
+
16665
+
16666
+ return function(date, format, timezone) {
16667
+ var text = '',
16668
+ parts = [],
16669
+ fn, match;
16670
+
16671
+ format = format || 'mediumDate';
16672
+ format = $locale.DATETIME_FORMATS[format] || format;
16673
+ if (isString(date)) {
16674
+ date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date);
16675
+ }
16676
+
16677
+ if (isNumber(date)) {
16678
+ date = new Date(date);
16679
+ }
16680
+
16681
+ if (!isDate(date)) {
16682
+ return date;
16683
+ }
16684
+
16685
+ while(format) {
16686
+ match = DATE_FORMATS_SPLIT.exec(format);
16687
+ if (match) {
16688
+ parts = concat(parts, match, 1);
16689
+ format = parts.pop();
16690
+ } else {
16691
+ parts.push(format);
16692
+ format = null;
16693
+ }
16694
+ }
16695
+
16696
+ if (timezone && timezone === 'UTC') {
16697
+ date = new Date(date.getTime());
16698
+ date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
16699
+ }
16700
+ forEach(parts, function(value){
16701
+ fn = DATE_FORMATS[value];
16702
+ text += fn ? fn(date, $locale.DATETIME_FORMATS)
16703
+ : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
16704
+ });
16705
+
16706
+ return text;
16707
+ };
16708
+}
16709
+
16710
+
16711
+/**
16712
+ * @ngdoc filter
16713
+ * @name json
16714
+ * @kind function
16715
+ *
16716
+ * @description
16717
+ * Allows you to convert a JavaScript object into JSON string.
16718
+ *
16719
+ * This filter is mostly useful for debugging. When using the double curly {{value}} notation
16720
+ * the binding is automatically converted to JSON.
16721
+ *
16722
+ * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.
16723
+ * @returns {string} JSON string.
16724
+ *
16725
+ *
16726
+ * @example
16727
+ <example>
16728
+ <file name="index.html">
16729
+ <pre>{{ {'name':'value'} | json }}</pre>
16730
+ </file>
16731
+ <file name="protractor.js" type="protractor">
16732
+ it('should jsonify filtered objects', function() {
16733
+ expect(element(by.binding("{'name':'value'}")).getText()).toMatch(/\{\n "name": ?"value"\n}/);
16734
+ });
16735
+ </file>
16736
+ </example>
16737
+ *
16738
+ */
16739
+function jsonFilter() {
16740
+ return function(object) {
16741
+ return toJson(object, true);
16742
+ };
16743
+}
16744
+
16745
+
16746
+/**
16747
+ * @ngdoc filter
16748
+ * @name lowercase
16749
+ * @kind function
16750
+ * @description
16751
+ * Converts string to lowercase.
16752
+ * @see angular.lowercase
16753
+ */
16754
+var lowercaseFilter = valueFn(lowercase);
16755
+
16756
+
16757
+/**
16758
+ * @ngdoc filter
16759
+ * @name uppercase
16760
+ * @kind function
16761
+ * @description
16762
+ * Converts string to uppercase.
16763
+ * @see angular.uppercase
16764
+ */
16765
+var uppercaseFilter = valueFn(uppercase);
16766
+
16767
+/**
16768
+ * @ngdoc filter
16769
+ * @name limitTo
16770
+ * @kind function
16771
+ *
16772
+ * @description
16773
+ * Creates a new array or string containing only a specified number of elements. The elements
16774
+ * are taken from either the beginning or the end of the source array, string or number, as specified by
16775
+ * the value and sign (positive or negative) of `limit`. If a number is used as input, it is
16776
+ * converted to a string.
16777
+ *
16778
+ * @param {Array|string|number} input Source array, string or number to be limited.
16779
+ * @param {string|number} limit The length of the returned array or string. If the `limit` number
16780
+ * is positive, `limit` number of items from the beginning of the source array/string are copied.
16781
+ * If the number is negative, `limit` number of items from the end of the source array/string
16782
+ * are copied. The `limit` will be trimmed if it exceeds `array.length`
16783
+ * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
16784
+ * had less than `limit` elements.
16785
+ *
16786
+ * @example
16787
+ <example module="limitToExample">
16788
+ <file name="index.html">
16789
+ <script>
16790
+ angular.module('limitToExample', [])
16791
+ .controller('ExampleController', ['$scope', function($scope) {
16792
+ $scope.numbers = [1,2,3,4,5,6,7,8,9];
16793
+ $scope.letters = "abcdefghi";
16794
+ $scope.longNumber = 2345432342;
16795
+ $scope.numLimit = 3;
16796
+ $scope.letterLimit = 3;
16797
+ $scope.longNumberLimit = 3;
16798
+ }]);
16799
+ </script>
16800
+ <div ng-controller="ExampleController">
16801
+ Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit">
16802
+ <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
16803
+ Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit">
16804
+ <p>Output letters: {{ letters | limitTo:letterLimit }}</p>
16805
+ Limit {{longNumber}} to: <input type="integer" ng-model="longNumberLimit">
16806
+ <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>
16807
+ </div>
16808
+ </file>
16809
+ <file name="protractor.js" type="protractor">
16810
+ var numLimitInput = element(by.model('numLimit'));
16811
+ var letterLimitInput = element(by.model('letterLimit'));
16812
+ var longNumberLimitInput = element(by.model('longNumberLimit'));
16813
+ var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));
16814
+ var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));
16815
+ var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));
16816
+
16817
+ it('should limit the number array to first three items', function() {
16818
+ expect(numLimitInput.getAttribute('value')).toBe('3');
16819
+ expect(letterLimitInput.getAttribute('value')).toBe('3');
16820
+ expect(longNumberLimitInput.getAttribute('value')).toBe('3');
16821
+ expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');
16822
+ expect(limitedLetters.getText()).toEqual('Output letters: abc');
16823
+ expect(limitedLongNumber.getText()).toEqual('Output long number: 234');
16824
+ });
16825
+
16826
+ // There is a bug in safari and protractor that doesn't like the minus key
16827
+ // it('should update the output when -3 is entered', function() {
16828
+ // numLimitInput.clear();
16829
+ // numLimitInput.sendKeys('-3');
16830
+ // letterLimitInput.clear();
16831
+ // letterLimitInput.sendKeys('-3');
16832
+ // longNumberLimitInput.clear();
16833
+ // longNumberLimitInput.sendKeys('-3');
16834
+ // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
16835
+ // expect(limitedLetters.getText()).toEqual('Output letters: ghi');
16836
+ // expect(limitedLongNumber.getText()).toEqual('Output long number: 342');
16837
+ // });
16838
+
16839
+ it('should not exceed the maximum size of input array', function() {
16840
+ numLimitInput.clear();
16841
+ numLimitInput.sendKeys('100');
16842
+ letterLimitInput.clear();
16843
+ letterLimitInput.sendKeys('100');
16844
+ longNumberLimitInput.clear();
16845
+ longNumberLimitInput.sendKeys('100');
16846
+ expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');
16847
+ expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');
16848
+ expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');
16849
+ });
16850
+ </file>
16851
+ </example>
16852
+*/
16853
+function limitToFilter(){
16854
+ return function(input, limit) {
16855
+ if (isNumber(input)) input = input.toString();
16856
+ if (!isArray(input) && !isString(input)) return input;
16857
+
16858
+ if (Math.abs(Number(limit)) === Infinity) {
16859
+ limit = Number(limit);
16860
+ } else {
16861
+ limit = int(limit);
16862
+ }
16863
+
16864
+ if (isString(input)) {
16865
+ //NaN check on limit
16866
+ if (limit) {
16867
+ return limit >= 0 ? input.slice(0, limit) : input.slice(limit, input.length);
16868
+ } else {
16869
+ return "";
16870
+ }
16871
+ }
16872
+
16873
+ var out = [],
16874
+ i, n;
16875
+
16876
+ // if abs(limit) exceeds maximum length, trim it
16877
+ if (limit > input.length)
16878
+ limit = input.length;
16879
+ else if (limit < -input.length)
16880
+ limit = -input.length;
16881
+
16882
+ if (limit > 0) {
16883
+ i = 0;
16884
+ n = limit;
16885
+ } else {
16886
+ i = input.length + limit;
16887
+ n = input.length;
16888
+ }
16889
+
16890
+ for (; i<n; i++) {
16891
+ out.push(input[i]);
16892
+ }
16893
+
16894
+ return out;
16895
+ };
16896
+}
16897
+
16898
+/**
16899
+ * @ngdoc filter
16900
+ * @name orderBy
16901
+ * @kind function
16902
+ *
16903
+ * @description
16904
+ * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically
16905
+ * for strings and numerically for numbers. Note: if you notice numbers are not being sorted
16906
+ * correctly, make sure they are actually being saved as numbers and not strings.
16907
+ *
16908
+ * @param {Array} array The array to sort.
16909
+ * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be
16910
+ * used by the comparator to determine the order of elements.
16911
+ *
16912
+ * Can be one of:
16913
+ *
16914
+ * - `function`: Getter function. The result of this function will be sorted using the
16915
+ * `<`, `=`, `>` operator.
16916
+ * - `string`: An Angular expression. The result of this expression is used to compare elements
16917
+ * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by
16918
+ * 3 first characters of a property called `name`). The result of a constant expression
16919
+ * is interpreted as a property name to be used in comparisons (for example `"special name"`
16920
+ * to sort object by the value of their `special name` property). An expression can be
16921
+ * optionally prefixed with `+` or `-` to control ascending or descending sort order
16922
+ * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array
16923
+ * element itself is used to compare where sorting.
16924
+ * - `Array`: An array of function or string predicates. The first predicate in the array
16925
+ * is used for sorting, but when two items are equivalent, the next predicate is used.
16926
+ *
16927
+ * If the predicate is missing or empty then it defaults to `'+'`.
16928
+ *
16929
+ * @param {boolean=} reverse Reverse the order of the array.
16930
+ * @returns {Array} Sorted copy of the source array.
16931
+ *
16932
+ * @example
16933
+ <example module="orderByExample">
16934
+ <file name="index.html">
16935
+ <script>
16936
+ angular.module('orderByExample', [])
16937
+ .controller('ExampleController', ['$scope', function($scope) {
16938
+ $scope.friends =
16939
+ [{name:'John', phone:'555-1212', age:10},
16940
+ {name:'Mary', phone:'555-9876', age:19},
16941
+ {name:'Mike', phone:'555-4321', age:21},
16942
+ {name:'Adam', phone:'555-5678', age:35},
16943
+ {name:'Julie', phone:'555-8765', age:29}];
16944
+ $scope.predicate = '-age';
16945
+ }]);
16946
+ </script>
16947
+ <div ng-controller="ExampleController">
16948
+ <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
16949
+ <hr/>
16950
+ [ <a href="" ng-click="predicate=''">unsorted</a> ]
16951
+ <table class="friend">
16952
+ <tr>
16953
+ <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a>
16954
+ (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th>
16955
+ <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th>
16956
+ <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th>
16957
+ </tr>
16958
+ <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
16959
+ <td>{{friend.name}}</td>
16960
+ <td>{{friend.phone}}</td>
16961
+ <td>{{friend.age}}</td>
16962
+ </tr>
16963
+ </table>
16964
+ </div>
16965
+ </file>
16966
+ </example>
16967
+ *
16968
+ * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the
16969
+ * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the
16970
+ * desired parameters.
16971
+ *
16972
+ * Example:
16973
+ *
16974
+ * @example
16975
+ <example module="orderByExample">
16976
+ <file name="index.html">
16977
+ <div ng-controller="ExampleController">
16978
+ <table class="friend">
16979
+ <tr>
16980
+ <th><a href="" ng-click="reverse=false;order('name', false)">Name</a>
16981
+ (<a href="" ng-click="order('-name',false)">^</a>)</th>
16982
+ <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th>
16983
+ <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th>
16984
+ </tr>
16985
+ <tr ng-repeat="friend in friends">
16986
+ <td>{{friend.name}}</td>
16987
+ <td>{{friend.phone}}</td>
16988
+ <td>{{friend.age}}</td>
16989
+ </tr>
16990
+ </table>
16991
+ </div>
16992
+ </file>
16993
+
16994
+ <file name="script.js">
16995
+ angular.module('orderByExample', [])
16996
+ .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {
16997
+ var orderBy = $filter('orderBy');
16998
+ $scope.friends = [
16999
+ { name: 'John', phone: '555-1212', age: 10 },
17000
+ { name: 'Mary', phone: '555-9876', age: 19 },
17001
+ { name: 'Mike', phone: '555-4321', age: 21 },
17002
+ { name: 'Adam', phone: '555-5678', age: 35 },
17003
+ { name: 'Julie', phone: '555-8765', age: 29 }
17004
+ ];
17005
+ $scope.order = function(predicate, reverse) {
17006
+ $scope.friends = orderBy($scope.friends, predicate, reverse);
17007
+ };
17008
+ $scope.order('-age',false);
17009
+ }]);
17010
+ </file>
17011
+</example>
17012
+ */
17013
+orderByFilter.$inject = ['$parse'];
17014
+function orderByFilter($parse){
17015
+ return function(array, sortPredicate, reverseOrder) {
17016
+ if (!(isArrayLike(array))) return array;
17017
+ sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];
17018
+ if (sortPredicate.length === 0) { sortPredicate = ['+']; }
17019
+ sortPredicate = sortPredicate.map(function(predicate){
17020
+ var descending = false, get = predicate || identity;
17021
+ if (isString(predicate)) {
17022
+ if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
17023
+ descending = predicate.charAt(0) == '-';
17024
+ predicate = predicate.substring(1);
17025
+ }
17026
+ if ( predicate === '' ) {
17027
+ // Effectively no predicate was passed so we compare identity
17028
+ return reverseComparator(function(a,b) {
17029
+ return compare(a, b);
17030
+ }, descending);
17031
+ }
17032
+ get = $parse(predicate);
17033
+ if (get.constant) {
17034
+ var key = get();
17035
+ return reverseComparator(function(a,b) {
17036
+ return compare(a[key], b[key]);
17037
+ }, descending);
17038
+ }
17039
+ }
17040
+ return reverseComparator(function(a,b){
17041
+ return compare(get(a),get(b));
17042
+ }, descending);
17043
+ });
17044
+ var arrayCopy = [];
17045
+ for ( var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); }
17046
+ return arrayCopy.sort(reverseComparator(comparator, reverseOrder));
17047
+
17048
+ function comparator(o1, o2){
17049
+ for ( var i = 0; i < sortPredicate.length; i++) {
17050
+ var comp = sortPredicate[i](o1, o2);
17051
+ if (comp !== 0) return comp;
17052
+ }
17053
+ return 0;
17054
+ }
17055
+ function reverseComparator(comp, descending) {
17056
+ return descending
17057
+ ? function(a,b){return comp(b,a);}
17058
+ : comp;
17059
+ }
17060
+ function compare(v1, v2){
17061
+ var t1 = typeof v1;
17062
+ var t2 = typeof v2;
17063
+ if (t1 == t2) {
17064
+ if (isDate(v1) && isDate(v2)) {
17065
+ v1 = v1.valueOf();
17066
+ v2 = v2.valueOf();
17067
+ }
17068
+ if (t1 == "string") {
17069
+ v1 = v1.toLowerCase();
17070
+ v2 = v2.toLowerCase();
17071
+ }
17072
+ if (v1 === v2) return 0;
17073
+ return v1 < v2 ? -1 : 1;
17074
+ } else {
17075
+ return t1 < t2 ? -1 : 1;
17076
+ }
17077
+ }
17078
+ };
17079
+}
17080
+
17081
+function ngDirective(directive) {
17082
+ if (isFunction(directive)) {
17083
+ directive = {
17084
+ link: directive
17085
+ };
17086
+ }
17087
+ directive.restrict = directive.restrict || 'AC';
17088
+ return valueFn(directive);
17089
+}
17090
+
17091
+/**
17092
+ * @ngdoc directive
17093
+ * @name a
17094
+ * @restrict E
17095
+ *
17096
+ * @description
17097
+ * Modifies the default behavior of the html A tag so that the default action is prevented when
17098
+ * the href attribute is empty.
17099
+ *
17100
+ * This change permits the easy creation of action links with the `ngClick` directive
17101
+ * without changing the location or causing page reloads, e.g.:
17102
+ * `<a href="" ng-click="list.addItem()">Add Item</a>`
17103
+ */
17104
+var htmlAnchorDirective = valueFn({
17105
+ restrict: 'E',
17106
+ compile: function(element, attr) {
17107
+ if (!attr.href && !attr.xlinkHref && !attr.name) {
17108
+ return function(scope, element) {
17109
+ // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
17110
+ var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
17111
+ 'xlink:href' : 'href';
17112
+ element.on('click', function(event){
17113
+ // if we have no href url, then don't navigate anywhere.
17114
+ if (!element.attr(href)) {
17115
+ event.preventDefault();
17116
+ }
17117
+ });
17118
+ };
17119
+ }
17120
+ }
17121
+});
17122
+
17123
+/**
17124
+ * @ngdoc directive
17125
+ * @name ngHref
17126
+ * @restrict A
17127
+ * @priority 99
17128
+ *
17129
+ * @description
17130
+ * Using Angular markup like `{{hash}}` in an href attribute will
17131
+ * make the link go to the wrong URL if the user clicks it before
17132
+ * Angular has a chance to replace the `{{hash}}` markup with its
17133
+ * value. Until Angular replaces the markup the link will be broken
17134
+ * and will most likely return a 404 error.
17135
+ *
17136
+ * The `ngHref` directive solves this problem.
17137
+ *
17138
+ * The wrong way to write it:
17139
+ * ```html
17140
+ * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
17141
+ * ```
17142
+ *
17143
+ * The correct way to write it:
17144
+ * ```html
17145
+ * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
17146
+ * ```
17147
+ *
17148
+ * @element A
17149
+ * @param {template} ngHref any string which can contain `{{}}` markup.
17150
+ *
17151
+ * @example
17152
+ * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes
17153
+ * in links and their different behaviors:
17154
+ <example>
17155
+ <file name="index.html">
17156
+ <input ng-model="value" /><br />
17157
+ <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
17158
+ <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
17159
+ <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br />
17160
+ <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
17161
+ <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
17162
+ <a id="link-6" ng-href="{{value}}">link</a> (link, change location)
17163
+ </file>
17164
+ <file name="protractor.js" type="protractor">
17165
+ it('should execute ng-click but not reload when href without value', function() {
17166
+ element(by.id('link-1')).click();
17167
+ expect(element(by.model('value')).getAttribute('value')).toEqual('1');
17168
+ expect(element(by.id('link-1')).getAttribute('href')).toBe('');
17169
+ });
17170
+
17171
+ it('should execute ng-click but not reload when href empty string', function() {
17172
+ element(by.id('link-2')).click();
17173
+ expect(element(by.model('value')).getAttribute('value')).toEqual('2');
17174
+ expect(element(by.id('link-2')).getAttribute('href')).toBe('');
17175
+ });
17176
+
17177
+ it('should execute ng-click and change url when ng-href specified', function() {
17178
+ expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/);
17179
+
17180
+ element(by.id('link-3')).click();
17181
+
17182
+ // At this point, we navigate away from an Angular page, so we need
17183
+ // to use browser.driver to get the base webdriver.
17184
+
17185
+ browser.wait(function() {
17186
+ return browser.driver.getCurrentUrl().then(function(url) {
17187
+ return url.match(/\/123$/);
17188
+ });
17189
+ }, 5000, 'page should navigate to /123');
17190
+ });
17191
+
17192
+ xit('should execute ng-click but not reload when href empty string and name specified', function() {
17193
+ element(by.id('link-4')).click();
17194
+ expect(element(by.model('value')).getAttribute('value')).toEqual('4');
17195
+ expect(element(by.id('link-4')).getAttribute('href')).toBe('');
17196
+ });
17197
+
17198
+ it('should execute ng-click but not reload when no href but name specified', function() {
17199
+ element(by.id('link-5')).click();
17200
+ expect(element(by.model('value')).getAttribute('value')).toEqual('5');
17201
+ expect(element(by.id('link-5')).getAttribute('href')).toBe(null);
17202
+ });
17203
+
17204
+ it('should only change url when only ng-href', function() {
17205
+ element(by.model('value')).clear();
17206
+ element(by.model('value')).sendKeys('6');
17207
+ expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/);
17208
+
17209
+ element(by.id('link-6')).click();
17210
+
17211
+ // At this point, we navigate away from an Angular page, so we need
17212
+ // to use browser.driver to get the base webdriver.
17213
+ browser.wait(function() {
17214
+ return browser.driver.getCurrentUrl().then(function(url) {
17215
+ return url.match(/\/6$/);
17216
+ });
17217
+ }, 5000, 'page should navigate to /6');
17218
+ });
17219
+ </file>
17220
+ </example>
17221
+ */
17222
+
17223
+/**
17224
+ * @ngdoc directive
17225
+ * @name ngSrc
17226
+ * @restrict A
17227
+ * @priority 99
17228
+ *
17229
+ * @description
17230
+ * Using Angular markup like `{{hash}}` in a `src` attribute doesn't
17231
+ * work right: The browser will fetch from the URL with the literal
17232
+ * text `{{hash}}` until Angular replaces the expression inside
17233
+ * `{{hash}}`. The `ngSrc` directive solves this problem.
17234
+ *
17235
+ * The buggy way to write it:
17236
+ * ```html
17237
+ * <img src="http://www.gravatar.com/avatar/{{hash}}"/>
17238
+ * ```
17239
+ *
17240
+ * The correct way to write it:
17241
+ * ```html
17242
+ * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/>
17243
+ * ```
17244
+ *
17245
+ * @element IMG
17246
+ * @param {template} ngSrc any string which can contain `{{}}` markup.
17247
+ */
17248
+
17249
+/**
17250
+ * @ngdoc directive
17251
+ * @name ngSrcset
17252
+ * @restrict A
17253
+ * @priority 99
17254
+ *
17255
+ * @description
17256
+ * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't
17257
+ * work right: The browser will fetch from the URL with the literal
17258
+ * text `{{hash}}` until Angular replaces the expression inside
17259
+ * `{{hash}}`. The `ngSrcset` directive solves this problem.
17260
+ *
17261
+ * The buggy way to write it:
17262
+ * ```html
17263
+ * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
17264
+ * ```
17265
+ *
17266
+ * The correct way to write it:
17267
+ * ```html
17268
+ * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
17269
+ * ```
17270
+ *
17271
+ * @element IMG
17272
+ * @param {template} ngSrcset any string which can contain `{{}}` markup.
17273
+ */
17274
+
17275
+/**
17276
+ * @ngdoc directive
17277
+ * @name ngDisabled
17278
+ * @restrict A
17279
+ * @priority 100
17280
+ *
17281
+ * @description
17282
+ *
17283
+ * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:
17284
+ * ```html
17285
+ * <div ng-init="scope = { isDisabled: false }">
17286
+ * <button disabled="{{scope.isDisabled}}">Disabled</button>
17287
+ * </div>
17288
+ * ```
17289
+ *
17290
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
17291
+ * such as disabled. (Their presence means true and their absence means false.)
17292
+ * If we put an Angular interpolation expression into such an attribute then the
17293
+ * binding information would be lost when the browser removes the attribute.
17294
+ * The `ngDisabled` directive solves this problem for the `disabled` attribute.
17295
+ * This complementary directive is not removed by the browser and so provides
17296
+ * a permanent reliable place to store the binding information.
17297
+ *
17298
+ * @example
17299
+ <example>
17300
+ <file name="index.html">
17301
+ Click me to toggle: <input type="checkbox" ng-model="checked"><br/>
17302
+ <button ng-model="button" ng-disabled="checked">Button</button>
17303
+ </file>
17304
+ <file name="protractor.js" type="protractor">
17305
+ it('should toggle button', function() {
17306
+ expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();
17307
+ element(by.model('checked')).click();
17308
+ expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();
17309
+ });
17310
+ </file>
17311
+ </example>
17312
+ *
17313
+ * @element INPUT
17314
+ * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,
17315
+ * then special attribute "disabled" will be set on the element
17316
+ */
17317
+
17318
+
17319
+/**
17320
+ * @ngdoc directive
17321
+ * @name ngChecked
17322
+ * @restrict A
17323
+ * @priority 100
17324
+ *
17325
+ * @description
17326
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
17327
+ * such as checked. (Their presence means true and their absence means false.)
17328
+ * If we put an Angular interpolation expression into such an attribute then the
17329
+ * binding information would be lost when the browser removes the attribute.
17330
+ * The `ngChecked` directive solves this problem for the `checked` attribute.
17331
+ * This complementary directive is not removed by the browser and so provides
17332
+ * a permanent reliable place to store the binding information.
17333
+ * @example
17334
+ <example>
17335
+ <file name="index.html">
17336
+ Check me to check both: <input type="checkbox" ng-model="master"><br/>
17337
+ <input id="checkSlave" type="checkbox" ng-checked="master">
17338
+ </file>
17339
+ <file name="protractor.js" type="protractor">
17340
+ it('should check both checkBoxes', function() {
17341
+ expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();
17342
+ element(by.model('master')).click();
17343
+ expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();
17344
+ });
17345
+ </file>
17346
+ </example>
17347
+ *
17348
+ * @element INPUT
17349
+ * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,
17350
+ * then special attribute "checked" will be set on the element
17351
+ */
17352
+
17353
+
17354
+/**
17355
+ * @ngdoc directive
17356
+ * @name ngReadonly
17357
+ * @restrict A
17358
+ * @priority 100
17359
+ *
17360
+ * @description
17361
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
17362
+ * such as readonly. (Their presence means true and their absence means false.)
17363
+ * If we put an Angular interpolation expression into such an attribute then the
17364
+ * binding information would be lost when the browser removes the attribute.
17365
+ * The `ngReadonly` directive solves this problem for the `readonly` attribute.
17366
+ * This complementary directive is not removed by the browser and so provides
17367
+ * a permanent reliable place to store the binding information.
17368
+ * @example
17369
+ <example>
17370
+ <file name="index.html">
17371
+ Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/>
17372
+ <input type="text" ng-readonly="checked" value="I'm Angular"/>
17373
+ </file>
17374
+ <file name="protractor.js" type="protractor">
17375
+ it('should toggle readonly attr', function() {
17376
+ expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy();
17377
+ element(by.model('checked')).click();
17378
+ expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy();
17379
+ });
17380
+ </file>
17381
+ </example>
17382
+ *
17383
+ * @element INPUT
17384
+ * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,
17385
+ * then special attribute "readonly" will be set on the element
17386
+ */
17387
+
17388
+
17389
+/**
17390
+ * @ngdoc directive
17391
+ * @name ngSelected
17392
+ * @restrict A
17393
+ * @priority 100
17394
+ *
17395
+ * @description
17396
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
17397
+ * such as selected. (Their presence means true and their absence means false.)
17398
+ * If we put an Angular interpolation expression into such an attribute then the
17399
+ * binding information would be lost when the browser removes the attribute.
17400
+ * The `ngSelected` directive solves this problem for the `selected` attribute.
17401
+ * This complementary directive is not removed by the browser and so provides
17402
+ * a permanent reliable place to store the binding information.
17403
+ *
17404
+ * @example
17405
+ <example>
17406
+ <file name="index.html">
17407
+ Check me to select: <input type="checkbox" ng-model="selected"><br/>
17408
+ <select>
17409
+ <option>Hello!</option>
17410
+ <option id="greet" ng-selected="selected">Greetings!</option>
17411
+ </select>
17412
+ </file>
17413
+ <file name="protractor.js" type="protractor">
17414
+ it('should select Greetings!', function() {
17415
+ expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();
17416
+ element(by.model('selected')).click();
17417
+ expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();
17418
+ });
17419
+ </file>
17420
+ </example>
17421
+ *
17422
+ * @element OPTION
17423
+ * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,
17424
+ * then special attribute "selected" will be set on the element
17425
+ */
17426
+
17427
+/**
17428
+ * @ngdoc directive
17429
+ * @name ngOpen
17430
+ * @restrict A
17431
+ * @priority 100
17432
+ *
17433
+ * @description
17434
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
17435
+ * such as open. (Their presence means true and their absence means false.)
17436
+ * If we put an Angular interpolation expression into such an attribute then the
17437
+ * binding information would be lost when the browser removes the attribute.
17438
+ * The `ngOpen` directive solves this problem for the `open` attribute.
17439
+ * This complementary directive is not removed by the browser and so provides
17440
+ * a permanent reliable place to store the binding information.
17441
+ * @example
17442
+ <example>
17443
+ <file name="index.html">
17444
+ Check me check multiple: <input type="checkbox" ng-model="open"><br/>
17445
+ <details id="details" ng-open="open">
17446
+ <summary>Show/Hide me</summary>
17447
+ </details>
17448
+ </file>
17449
+ <file name="protractor.js" type="protractor">
17450
+ it('should toggle open', function() {
17451
+ expect(element(by.id('details')).getAttribute('open')).toBeFalsy();
17452
+ element(by.model('open')).click();
17453
+ expect(element(by.id('details')).getAttribute('open')).toBeTruthy();
17454
+ });
17455
+ </file>
17456
+ </example>
17457
+ *
17458
+ * @element DETAILS
17459
+ * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,
17460
+ * then special attribute "open" will be set on the element
17461
+ */
17462
+
17463
+var ngAttributeAliasDirectives = {};
17464
+
17465
+
17466
+// boolean attrs are evaluated
17467
+forEach(BOOLEAN_ATTR, function(propName, attrName) {
17468
+ // binding to multiple is not supported
17469
+ if (propName == "multiple") return;
17470
+
17471
+ var normalized = directiveNormalize('ng-' + attrName);
17472
+ ngAttributeAliasDirectives[normalized] = function() {
17473
+ return {
17474
+ restrict: 'A',
17475
+ priority: 100,
17476
+ link: function(scope, element, attr) {
17477
+ scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
17478
+ attr.$set(attrName, !!value);
17479
+ });
17480
+ }
17481
+ };
17482
+ };
17483
+});
17484
+
17485
+// aliased input attrs are evaluated
17486
+forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {
17487
+ ngAttributeAliasDirectives[ngAttr] = function() {
17488
+ return {
17489
+ priority: 100,
17490
+ link: function(scope, element, attr) {
17491
+ //special case ngPattern when a literal regular expression value
17492
+ //is used as the expression (this way we don't have to watch anything).
17493
+ if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") {
17494
+ var match = attr.ngPattern.match(REGEX_STRING_REGEXP);
17495
+ if (match) {
17496
+ attr.$set("ngPattern", new RegExp(match[1], match[2]));
17497
+ return;
17498
+ }
17499
+ }
17500
+
17501
+ scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {
17502
+ attr.$set(ngAttr, value);
17503
+ });
17504
+ }
17505
+ };
17506
+ };
17507
+});
17508
+
17509
+// ng-src, ng-srcset, ng-href are interpolated
17510
+forEach(['src', 'srcset', 'href'], function(attrName) {
17511
+ var normalized = directiveNormalize('ng-' + attrName);
17512
+ ngAttributeAliasDirectives[normalized] = function() {
17513
+ return {
17514
+ priority: 99, // it needs to run after the attributes are interpolated
17515
+ link: function(scope, element, attr) {
17516
+ var propName = attrName,
17517
+ name = attrName;
17518
+
17519
+ if (attrName === 'href' &&
17520
+ toString.call(element.prop('href')) === '[object SVGAnimatedString]') {
17521
+ name = 'xlinkHref';
17522
+ attr.$attr[name] = 'xlink:href';
17523
+ propName = null;
17524
+ }
17525
+
17526
+ attr.$observe(normalized, function(value) {
17527
+ if (!value) {
17528
+ if (attrName === 'href') {
17529
+ attr.$set(name, null);
17530
+ }
17531
+ return;
17532
+ }
17533
+
17534
+ attr.$set(name, value);
17535
+
17536
+ // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
17537
+ // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need
17538
+ // to set the property as well to achieve the desired effect.
17539
+ // we use attr[attrName] value since $set can sanitize the url.
17540
+ if (msie && propName) element.prop(propName, attr[name]);
17541
+ });
17542
+ }
17543
+ };
17544
+ };
17545
+});
17546
+
17547
+/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true
17548
+ */
17549
+var nullFormCtrl = {
17550
+ $addControl: noop,
17551
+ $$renameControl: nullFormRenameControl,
17552
+ $removeControl: noop,
17553
+ $setValidity: noop,
17554
+ $setDirty: noop,
17555
+ $setPristine: noop,
17556
+ $setSubmitted: noop
17557
+},
17558
+SUBMITTED_CLASS = 'ng-submitted';
17559
+
17560
+function nullFormRenameControl(control, name) {
17561
+ control.$name = name;
17562
+}
17563
+
17564
+/**
17565
+ * @ngdoc type
17566
+ * @name form.FormController
17567
+ *
17568
+ * @property {boolean} $pristine True if user has not interacted with the form yet.
17569
+ * @property {boolean} $dirty True if user has already interacted with the form.
17570
+ * @property {boolean} $valid True if all of the containing forms and controls are valid.
17571
+ * @property {boolean} $invalid True if at least one containing control or form is invalid.
17572
+ * @property {boolean} $submitted True if user has submitted the form even if its invalid.
17573
+ *
17574
+ * @property {Object} $error Is an object hash, containing references to controls or
17575
+ * forms with failing validators, where:
17576
+ *
17577
+ * - keys are validation tokens (error names),
17578
+ * - values are arrays of controls or forms that have a failing validator for given error name.
17579
+ *
17580
+ * Built-in validation tokens:
17581
+ *
17582
+ * - `email`
17583
+ * - `max`
17584
+ * - `maxlength`
17585
+ * - `min`
17586
+ * - `minlength`
17587
+ * - `number`
17588
+ * - `pattern`
17589
+ * - `required`
17590
+ * - `url`
17591
+ *
17592
+ * @description
17593
+ * `FormController` keeps track of all its controls and nested forms as well as the state of them,
17594
+ * such as being valid/invalid or dirty/pristine.
17595
+ *
17596
+ * Each {@link ng.directive:form form} directive creates an instance
17597
+ * of `FormController`.
17598
+ *
17599
+ */
17600
+//asks for $scope to fool the BC controller module
17601
+FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];
17602
+function FormController(element, attrs, $scope, $animate, $interpolate) {
17603
+ var form = this,
17604
+ controls = [];
17605
+
17606
+ var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl;
17607
+
17608
+ // init state
17609
+ form.$error = {};
17610
+ form.$$success = {};
17611
+ form.$pending = undefined;
17612
+ form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);
17613
+ form.$dirty = false;
17614
+ form.$pristine = true;
17615
+ form.$valid = true;
17616
+ form.$invalid = false;
17617
+ form.$submitted = false;
17618
+
17619
+ parentForm.$addControl(form);
17620
+
17621
+ /**
17622
+ * @ngdoc method
17623
+ * @name form.FormController#$rollbackViewValue
17624
+ *
17625
+ * @description
17626
+ * Rollback all form controls pending updates to the `$modelValue`.
17627
+ *
17628
+ * Updates may be pending by a debounced event or because the input is waiting for a some future
17629
+ * event defined in `ng-model-options`. This method is typically needed by the reset button of
17630
+ * a form that uses `ng-model-options` to pend updates.
17631
+ */
17632
+ form.$rollbackViewValue = function() {
17633
+ forEach(controls, function(control) {
17634
+ control.$rollbackViewValue();
17635
+ });
17636
+ };
17637
+
17638
+ /**
17639
+ * @ngdoc method
17640
+ * @name form.FormController#$commitViewValue
17641
+ *
17642
+ * @description
17643
+ * Commit all form controls pending updates to the `$modelValue`.
17644
+ *
17645
+ * Updates may be pending by a debounced event or because the input is waiting for a some future
17646
+ * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`
17647
+ * usually handles calling this in response to input events.
17648
+ */
17649
+ form.$commitViewValue = function() {
17650
+ forEach(controls, function(control) {
17651
+ control.$commitViewValue();
17652
+ });
17653
+ };
17654
+
17655
+ /**
17656
+ * @ngdoc method
17657
+ * @name form.FormController#$addControl
17658
+ *
17659
+ * @description
17660
+ * Register a control with the form.
17661
+ *
17662
+ * Input elements using ngModelController do this automatically when they are linked.
17663
+ */
17664
+ form.$addControl = function(control) {
17665
+ // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
17666
+ // and not added to the scope. Now we throw an error.
17667
+ assertNotHasOwnProperty(control.$name, 'input');
17668
+ controls.push(control);
17669
+
17670
+ if (control.$name) {
17671
+ form[control.$name] = control;
17672
+ }
17673
+ };
17674
+
17675
+ // Private API: rename a form control
17676
+ form.$$renameControl = function(control, newName) {
17677
+ var oldName = control.$name;
17678
+
17679
+ if (form[oldName] === control) {
17680
+ delete form[oldName];
17681
+ }
17682
+ form[newName] = control;
17683
+ control.$name = newName;
17684
+ };
17685
+
17686
+ /**
17687
+ * @ngdoc method
17688
+ * @name form.FormController#$removeControl
17689
+ *
17690
+ * @description
17691
+ * Deregister a control from the form.
17692
+ *
17693
+ * Input elements using ngModelController do this automatically when they are destroyed.
17694
+ */
17695
+ form.$removeControl = function(control) {
17696
+ if (control.$name && form[control.$name] === control) {
17697
+ delete form[control.$name];
17698
+ }
17699
+ forEach(form.$pending, function(value, name) {
17700
+ form.$setValidity(name, null, control);
17701
+ });
17702
+ forEach(form.$error, function(value, name) {
17703
+ form.$setValidity(name, null, control);
17704
+ });
17705
+
17706
+ arrayRemove(controls, control);
17707
+ };
17708
+
17709
+
17710
+ /**
17711
+ * @ngdoc method
17712
+ * @name form.FormController#$setValidity
17713
+ *
17714
+ * @description
17715
+ * Sets the validity of a form control.
17716
+ *
17717
+ * This method will also propagate to parent forms.
17718
+ */
17719
+ addSetValidityMethod({
17720
+ ctrl: this,
17721
+ $element: element,
17722
+ set: function(object, property, control) {
17723
+ var list = object[property];
17724
+ if (!list) {
17725
+ object[property] = [control];
17726
+ } else {
17727
+ var index = list.indexOf(control);
17728
+ if (index === -1) {
17729
+ list.push(control);
17730
+ }
17731
+ }
17732
+ },
17733
+ unset: function(object, property, control) {
17734
+ var list = object[property];
17735
+ if (!list) {
17736
+ return;
17737
+ }
17738
+ arrayRemove(list, control);
17739
+ if (list.length === 0) {
17740
+ delete object[property];
17741
+ }
17742
+ },
17743
+ parentForm: parentForm,
17744
+ $animate: $animate
17745
+ });
17746
+
17747
+ /**
17748
+ * @ngdoc method
17749
+ * @name form.FormController#$setDirty
17750
+ *
17751
+ * @description
17752
+ * Sets the form to a dirty state.
17753
+ *
17754
+ * This method can be called to add the 'ng-dirty' class and set the form to a dirty
17755
+ * state (ng-dirty class). This method will also propagate to parent forms.
17756
+ */
17757
+ form.$setDirty = function() {
17758
+ $animate.removeClass(element, PRISTINE_CLASS);
17759
+ $animate.addClass(element, DIRTY_CLASS);
17760
+ form.$dirty = true;
17761
+ form.$pristine = false;
17762
+ parentForm.$setDirty();
17763
+ };
17764
+
17765
+ /**
17766
+ * @ngdoc method
17767
+ * @name form.FormController#$setPristine
17768
+ *
17769
+ * @description
17770
+ * Sets the form to its pristine state.
17771
+ *
17772
+ * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
17773
+ * state (ng-pristine class). This method will also propagate to all the controls contained
17774
+ * in this form.
17775
+ *
17776
+ * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
17777
+ * saving or resetting it.
17778
+ */
17779
+ form.$setPristine = function () {
17780
+ $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
17781
+ form.$dirty = false;
17782
+ form.$pristine = true;
17783
+ form.$submitted = false;
17784
+ forEach(controls, function(control) {
17785
+ control.$setPristine();
17786
+ });
17787
+ };
17788
+
17789
+ /**
17790
+ * @ngdoc method
17791
+ * @name form.FormController#$setUntouched
17792
+ *
17793
+ * @description
17794
+ * Sets the form to its untouched state.
17795
+ *
17796
+ * This method can be called to remove the 'ng-touched' class and set the form controls to their
17797
+ * untouched state (ng-untouched class).
17798
+ *
17799
+ * Setting a form controls back to their untouched state is often useful when setting the form
17800
+ * back to its pristine state.
17801
+ */
17802
+ form.$setUntouched = function () {
17803
+ forEach(controls, function(control) {
17804
+ control.$setUntouched();
17805
+ });
17806
+ };
17807
+
17808
+ /**
17809
+ * @ngdoc method
17810
+ * @name form.FormController#$setSubmitted
17811
+ *
17812
+ * @description
17813
+ * Sets the form to its submitted state.
17814
+ */
17815
+ form.$setSubmitted = function () {
17816
+ $animate.addClass(element, SUBMITTED_CLASS);
17817
+ form.$submitted = true;
17818
+ parentForm.$setSubmitted();
17819
+ };
17820
+}
17821
+
17822
+/**
17823
+ * @ngdoc directive
17824
+ * @name ngForm
17825
+ * @restrict EAC
17826
+ *
17827
+ * @description
17828
+ * Nestable alias of {@link ng.directive:form `form`} directive. HTML
17829
+ * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a
17830
+ * sub-group of controls needs to be determined.
17831
+ *
17832
+ * Note: the purpose of `ngForm` is to group controls,
17833
+ * but not to be a replacement for the `<form>` tag with all of its capabilities
17834
+ * (e.g. posting to the server, ...).
17835
+ *
17836
+ * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into
17837
+ * related scope, under this name.
17838
+ *
17839
+ */
17840
+
17841
+ /**
17842
+ * @ngdoc directive
17843
+ * @name form
17844
+ * @restrict E
17845
+ *
17846
+ * @description
17847
+ * Directive that instantiates
17848
+ * {@link form.FormController FormController}.
17849
+ *
17850
+ * If the `name` attribute is specified, the form controller is published onto the current scope under
17851
+ * this name.
17852
+ *
17853
+ * # Alias: {@link ng.directive:ngForm `ngForm`}
17854
+ *
17855
+ * In Angular forms can be nested. This means that the outer form is valid when all of the child
17856
+ * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so
17857
+ * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to
17858
+ * `<form>` but can be nested. This allows you to have nested forms, which is very useful when
17859
+ * using Angular validation directives in forms that are dynamically generated using the
17860
+ * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`
17861
+ * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an
17862
+ * `ngForm` directive and nest these in an outer `form` element.
17863
+ *
17864
+ *
17865
+ * # CSS classes
17866
+ * - `ng-valid` is set if the form is valid.
17867
+ * - `ng-invalid` is set if the form is invalid.
17868
+ * - `ng-pristine` is set if the form is pristine.
17869
+ * - `ng-dirty` is set if the form is dirty.
17870
+ * - `ng-submitted` is set if the form was submitted.
17871
+ *
17872
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
17873
+ *
17874
+ *
17875
+ * # Submitting a form and preventing the default action
17876
+ *
17877
+ * Since the role of forms in client-side Angular applications is different than in classical
17878
+ * roundtrip apps, it is desirable for the browser not to translate the form submission into a full
17879
+ * page reload that sends the data to the server. Instead some javascript logic should be triggered
17880
+ * to handle the form submission in an application-specific way.
17881
+ *
17882
+ * For this reason, Angular prevents the default action (form submission to the server) unless the
17883
+ * `<form>` element has an `action` attribute specified.
17884
+ *
17885
+ * You can use one of the following two ways to specify what javascript method should be called when
17886
+ * a form is submitted:
17887
+ *
17888
+ * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element
17889
+ * - {@link ng.directive:ngClick ngClick} directive on the first
17890
+ * button or input field of type submit (input[type=submit])
17891
+ *
17892
+ * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}
17893
+ * or {@link ng.directive:ngClick ngClick} directives.
17894
+ * This is because of the following form submission rules in the HTML specification:
17895
+ *
17896
+ * - If a form has only one input field then hitting enter in this field triggers form submit
17897
+ * (`ngSubmit`)
17898
+ * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter
17899
+ * doesn't trigger submit
17900
+ * - if a form has one or more input fields and one or more buttons or input[type=submit] then
17901
+ * hitting enter in any of the input fields will trigger the click handler on the *first* button or
17902
+ * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)
17903
+ *
17904
+ * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is
17905
+ * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
17906
+ * to have access to the updated model.
17907
+ *
17908
+ * ## Animation Hooks
17909
+ *
17910
+ * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.
17911
+ * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any
17912
+ * other validations that are performed within the form. Animations in ngForm are similar to how
17913
+ * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well
17914
+ * as JS animations.
17915
+ *
17916
+ * The following example shows a simple way to utilize CSS transitions to style a form element
17917
+ * that has been rendered as invalid after it has been validated:
17918
+ *
17919
+ * <pre>
17920
+ * //be sure to include ngAnimate as a module to hook into more
17921
+ * //advanced animations
17922
+ * .my-form {
17923
+ * transition:0.5s linear all;
17924
+ * background: white;
17925
+ * }
17926
+ * .my-form.ng-invalid {
17927
+ * background: red;
17928
+ * color:white;
17929
+ * }
17930
+ * </pre>
17931
+ *
17932
+ * @example
17933
+ <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
17934
+ <file name="index.html">
17935
+ <script>
17936
+ angular.module('formExample', [])
17937
+ .controller('FormController', ['$scope', function($scope) {
17938
+ $scope.userType = 'guest';
17939
+ }]);
17940
+ </script>
17941
+ <style>
17942
+ .my-form {
17943
+ -webkit-transition:all linear 0.5s;
17944
+ transition:all linear 0.5s;
17945
+ background: transparent;
17946
+ }
17947
+ .my-form.ng-invalid {
17948
+ background: red;
17949
+ }
17950
+ </style>
17951
+ <form name="myForm" ng-controller="FormController" class="my-form">
17952
+ userType: <input name="input" ng-model="userType" required>
17953
+ <span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
17954
+ <tt>userType = {{userType}}</tt><br>
17955
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br>
17956
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br>
17957
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
17958
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
17959
+ </form>
17960
+ </file>
17961
+ <file name="protractor.js" type="protractor">
17962
+ it('should initialize to model', function() {
17963
+ var userType = element(by.binding('userType'));
17964
+ var valid = element(by.binding('myForm.input.$valid'));
17965
+
17966
+ expect(userType.getText()).toContain('guest');
17967
+ expect(valid.getText()).toContain('true');
17968
+ });
17969
+
17970
+ it('should be invalid if empty', function() {
17971
+ var userType = element(by.binding('userType'));
17972
+ var valid = element(by.binding('myForm.input.$valid'));
17973
+ var userInput = element(by.model('userType'));
17974
+
17975
+ userInput.clear();
17976
+ userInput.sendKeys('');
17977
+
17978
+ expect(userType.getText()).toEqual('userType =');
17979
+ expect(valid.getText()).toContain('false');
17980
+ });
17981
+ </file>
17982
+ </example>
17983
+ *
17984
+ * @param {string=} name Name of the form. If specified, the form controller will be published into
17985
+ * related scope, under this name.
17986
+ */
17987
+var formDirectiveFactory = function(isNgForm) {
17988
+ return ['$timeout', function($timeout) {
17989
+ var formDirective = {
17990
+ name: 'form',
17991
+ restrict: isNgForm ? 'EAC' : 'E',
17992
+ controller: FormController,
17993
+ compile: function ngFormCompile(formElement) {
17994
+ // Setup initial state of the control
17995
+ formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);
17996
+
17997
+ return {
17998
+ pre: function ngFormPreLink(scope, formElement, attr, controller) {
17999
+ // if `action` attr is not present on the form, prevent the default action (submission)
18000
+ if (!('action' in attr)) {
18001
+ // we can't use jq events because if a form is destroyed during submission the default
18002
+ // action is not prevented. see #1238
18003
+ //
18004
+ // IE 9 is not affected because it doesn't fire a submit event and try to do a full
18005
+ // page reload if the form was destroyed by submission of the form via a click handler
18006
+ // on a button in the form. Looks like an IE9 specific bug.
18007
+ var handleFormSubmission = function(event) {
18008
+ scope.$apply(function() {
18009
+ controller.$commitViewValue();
18010
+ controller.$setSubmitted();
18011
+ });
18012
+
18013
+ event.preventDefault
18014
+ ? event.preventDefault()
18015
+ : event.returnValue = false; // IE
18016
+ };
18017
+
18018
+ addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
18019
+
18020
+ // unregister the preventDefault listener so that we don't not leak memory but in a
18021
+ // way that will achieve the prevention of the default action.
18022
+ formElement.on('$destroy', function() {
18023
+ $timeout(function() {
18024
+ removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);
18025
+ }, 0, false);
18026
+ });
18027
+ }
18028
+
18029
+ var parentFormCtrl = controller.$$parentForm,
18030
+ alias = controller.$name;
18031
+
18032
+ if (alias) {
18033
+ setter(scope, alias, controller, alias);
18034
+ attr.$observe(attr.name ? 'name' : 'ngForm', function(newValue) {
18035
+ if (alias === newValue) return;
18036
+ setter(scope, alias, undefined, alias);
18037
+ alias = newValue;
18038
+ setter(scope, alias, controller, alias);
18039
+ parentFormCtrl.$$renameControl(controller, alias);
18040
+ });
18041
+ }
18042
+ if (parentFormCtrl !== nullFormCtrl) {
18043
+ formElement.on('$destroy', function() {
18044
+ parentFormCtrl.$removeControl(controller);
18045
+ if (alias) {
18046
+ setter(scope, alias, undefined, alias);
18047
+ }
18048
+ extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
18049
+ });
18050
+ }
18051
+ }
18052
+ };
18053
+ }
18054
+ };
18055
+
18056
+ return formDirective;
18057
+ }];
18058
+};
18059
+
18060
+var formDirective = formDirectiveFactory();
18061
+var ngFormDirective = formDirectiveFactory(true);
18062
+
18063
+/* global VALID_CLASS: true,
18064
+ INVALID_CLASS: true,
18065
+ PRISTINE_CLASS: true,
18066
+ DIRTY_CLASS: true,
18067
+ UNTOUCHED_CLASS: true,
18068
+ TOUCHED_CLASS: true,
18069
+*/
18070
+
18071
+// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
18072
+var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
18073
+var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;
18074
+var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
18075
+var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/;
18076
+var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
18077
+var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
18078
+var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;
18079
+var MONTH_REGEXP = /^(\d{4})-(\d\d)$/;
18080
+var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
18081
+var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
18082
+
18083
+var $ngModelMinErr = new minErr('ngModel');
18084
+
18085
+var inputType = {
18086
+
18087
+ /**
18088
+ * @ngdoc input
18089
+ * @name input[text]
18090
+ *
18091
+ * @description
18092
+ * Standard HTML text input with angular data binding, inherited by most of the `input` elements.
18093
+ *
18094
+ * *NOTE* Not every feature offered is available for all input types.
18095
+ *
18096
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18097
+ * @param {string=} name Property name of the form under which the control is published.
18098
+ * @param {string=} required Adds `required` validation error key if the value is not entered.
18099
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18100
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18101
+ * `required` when you want to data-bind to the `required` attribute.
18102
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
18103
+ * minlength.
18104
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
18105
+ * maxlength.
18106
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
18107
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
18108
+ * patterns defined as scope expressions.
18109
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18110
+ * interaction with the input element.
18111
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
18112
+ * This parameter is ignored for input[type=password] controls, which will never trim the
18113
+ * input.
18114
+ *
18115
+ * @example
18116
+ <example name="text-input-directive" module="textInputExample">
18117
+ <file name="index.html">
18118
+ <script>
18119
+ angular.module('textInputExample', [])
18120
+ .controller('ExampleController', ['$scope', function($scope) {
18121
+ $scope.text = 'guest';
18122
+ $scope.word = /^\s*\w*\s*$/;
18123
+ }]);
18124
+ </script>
18125
+ <form name="myForm" ng-controller="ExampleController">
18126
+ Single word: <input type="text" name="input" ng-model="text"
18127
+ ng-pattern="word" required ng-trim="false">
18128
+ <span class="error" ng-show="myForm.input.$error.required">
18129
+ Required!</span>
18130
+ <span class="error" ng-show="myForm.input.$error.pattern">
18131
+ Single word only!</span>
18132
+
18133
+ <tt>text = {{text}}</tt><br/>
18134
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18135
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18136
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18137
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18138
+ </form>
18139
+ </file>
18140
+ <file name="protractor.js" type="protractor">
18141
+ var text = element(by.binding('text'));
18142
+ var valid = element(by.binding('myForm.input.$valid'));
18143
+ var input = element(by.model('text'));
18144
+
18145
+ it('should initialize to model', function() {
18146
+ expect(text.getText()).toContain('guest');
18147
+ expect(valid.getText()).toContain('true');
18148
+ });
18149
+
18150
+ it('should be invalid if empty', function() {
18151
+ input.clear();
18152
+ input.sendKeys('');
18153
+
18154
+ expect(text.getText()).toEqual('text =');
18155
+ expect(valid.getText()).toContain('false');
18156
+ });
18157
+
18158
+ it('should be invalid if multi word', function() {
18159
+ input.clear();
18160
+ input.sendKeys('hello world');
18161
+
18162
+ expect(valid.getText()).toContain('false');
18163
+ });
18164
+ </file>
18165
+ </example>
18166
+ */
18167
+ 'text': textInputType,
18168
+
18169
+ /**
18170
+ * @ngdoc input
18171
+ * @name input[date]
18172
+ *
18173
+ * @description
18174
+ * Input with date validation and transformation. In browsers that do not yet support
18175
+ * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601
18176
+ * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many
18177
+ * modern browsers do not yet support this input type, it is important to provide cues to users on the
18178
+ * expected input format via a placeholder or label. The model must always be a Date object.
18179
+ *
18180
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
18181
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18182
+ *
18183
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18184
+ * @param {string=} name Property name of the form under which the control is published.
18185
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18186
+ * valid ISO date string (yyyy-MM-dd).
18187
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
18188
+ * a valid ISO date string (yyyy-MM-dd).
18189
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18190
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18191
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18192
+ * `required` when you want to data-bind to the `required` attribute.
18193
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18194
+ * interaction with the input element.
18195
+ *
18196
+ * @example
18197
+ <example name="date-input-directive" module="dateInputExample">
18198
+ <file name="index.html">
18199
+ <script>
18200
+ angular.module('dateInputExample', [])
18201
+ .controller('DateController', ['$scope', function($scope) {
18202
+ $scope.value = new Date(2013, 9, 22);
18203
+ }]);
18204
+ </script>
18205
+ <form name="myForm" ng-controller="DateController as dateCtrl">
18206
+ Pick a date in 2013:
18207
+ <input type="date" id="exampleInput" name="input" ng-model="value"
18208
+ placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required />
18209
+ <span class="error" ng-show="myForm.input.$error.required">
18210
+ Required!</span>
18211
+ <span class="error" ng-show="myForm.input.$error.date">
18212
+ Not a valid date!</span>
18213
+ <tt>value = {{value | date: "yyyy-MM-dd"}}</tt><br/>
18214
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18215
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18216
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18217
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18218
+ </form>
18219
+ </file>
18220
+ <file name="protractor.js" type="protractor">
18221
+ var value = element(by.binding('value | date: "yyyy-MM-dd"'));
18222
+ var valid = element(by.binding('myForm.input.$valid'));
18223
+ var input = element(by.model('value'));
18224
+
18225
+ // currently protractor/webdriver does not support
18226
+ // sending keys to all known HTML5 input controls
18227
+ // for various browsers (see https://github.com/angular/protractor/issues/562).
18228
+ function setInput(val) {
18229
+ // set the value of the element and force validation.
18230
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
18231
+ "ipt.value = '" + val + "';" +
18232
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18233
+ browser.executeScript(scr);
18234
+ }
18235
+
18236
+ it('should initialize to model', function() {
18237
+ expect(value.getText()).toContain('2013-10-22');
18238
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
18239
+ });
18240
+
18241
+ it('should be invalid if empty', function() {
18242
+ setInput('');
18243
+ expect(value.getText()).toEqual('value =');
18244
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18245
+ });
18246
+
18247
+ it('should be invalid if over max', function() {
18248
+ setInput('2015-01-01');
18249
+ expect(value.getText()).toContain('');
18250
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18251
+ });
18252
+ </file>
18253
+ </example>
18254
+ */
18255
+ 'date': createDateInputType('date', DATE_REGEXP,
18256
+ createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),
18257
+ 'yyyy-MM-dd'),
18258
+
18259
+ /**
18260
+ * @ngdoc input
18261
+ * @name input[dateTimeLocal]
18262
+ *
18263
+ * @description
18264
+ * Input with datetime validation and transformation. In browsers that do not yet support
18265
+ * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
18266
+ * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`. The model must be a Date object.
18267
+ *
18268
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
18269
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18270
+ *
18271
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18272
+ * @param {string=} name Property name of the form under which the control is published.
18273
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18274
+ * valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
18275
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
18276
+ * a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss).
18277
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18278
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18279
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18280
+ * `required` when you want to data-bind to the `required` attribute.
18281
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18282
+ * interaction with the input element.
18283
+ *
18284
+ * @example
18285
+ <example name="datetimelocal-input-directive" module="dateExample">
18286
+ <file name="index.html">
18287
+ <script>
18288
+ angular.module('dateExample', [])
18289
+ .controller('DateController', ['$scope', function($scope) {
18290
+ $scope.value = new Date(2010, 11, 28, 14, 57);
18291
+ }]);
18292
+ </script>
18293
+ <form name="myForm" ng-controller="DateController as dateCtrl">
18294
+ Pick a date between in 2013:
18295
+ <input type="datetime-local" id="exampleInput" name="input" ng-model="value"
18296
+ placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required />
18297
+ <span class="error" ng-show="myForm.input.$error.required">
18298
+ Required!</span>
18299
+ <span class="error" ng-show="myForm.input.$error.datetimelocal">
18300
+ Not a valid date!</span>
18301
+ <tt>value = {{value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/>
18302
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18303
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18304
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18305
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18306
+ </form>
18307
+ </file>
18308
+ <file name="protractor.js" type="protractor">
18309
+ var value = element(by.binding('value | date: "yyyy-MM-ddTHH:mm:ss"'));
18310
+ var valid = element(by.binding('myForm.input.$valid'));
18311
+ var input = element(by.model('value'));
18312
+
18313
+ // currently protractor/webdriver does not support
18314
+ // sending keys to all known HTML5 input controls
18315
+ // for various browsers (https://github.com/angular/protractor/issues/562).
18316
+ function setInput(val) {
18317
+ // set the value of the element and force validation.
18318
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
18319
+ "ipt.value = '" + val + "';" +
18320
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18321
+ browser.executeScript(scr);
18322
+ }
18323
+
18324
+ it('should initialize to model', function() {
18325
+ expect(value.getText()).toContain('2010-12-28T14:57:00');
18326
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
18327
+ });
18328
+
18329
+ it('should be invalid if empty', function() {
18330
+ setInput('');
18331
+ expect(value.getText()).toEqual('value =');
18332
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18333
+ });
18334
+
18335
+ it('should be invalid if over max', function() {
18336
+ setInput('2015-01-01T23:59:00');
18337
+ expect(value.getText()).toContain('');
18338
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18339
+ });
18340
+ </file>
18341
+ </example>
18342
+ */
18343
+ 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,
18344
+ createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),
18345
+ 'yyyy-MM-ddTHH:mm:ss.sss'),
18346
+
18347
+ /**
18348
+ * @ngdoc input
18349
+ * @name input[time]
18350
+ *
18351
+ * @description
18352
+ * Input with time validation and transformation. In browsers that do not yet support
18353
+ * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
18354
+ * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
18355
+ * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
18356
+ *
18357
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
18358
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18359
+ *
18360
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18361
+ * @param {string=} name Property name of the form under which the control is published.
18362
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18363
+ * valid ISO time format (HH:mm:ss).
18364
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a
18365
+ * valid ISO time format (HH:mm:ss).
18366
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18367
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18368
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18369
+ * `required` when you want to data-bind to the `required` attribute.
18370
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18371
+ * interaction with the input element.
18372
+ *
18373
+ * @example
18374
+ <example name="time-input-directive" module="timeExample">
18375
+ <file name="index.html">
18376
+ <script>
18377
+ angular.module('timeExample', [])
18378
+ .controller('DateController', ['$scope', function($scope) {
18379
+ $scope.value = new Date(1970, 0, 1, 14, 57, 0);
18380
+ }]);
18381
+ </script>
18382
+ <form name="myForm" ng-controller="DateController as dateCtrl">
18383
+ Pick a between 8am and 5pm:
18384
+ <input type="time" id="exampleInput" name="input" ng-model="value"
18385
+ placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
18386
+ <span class="error" ng-show="myForm.input.$error.required">
18387
+ Required!</span>
18388
+ <span class="error" ng-show="myForm.input.$error.time">
18389
+ Not a valid date!</span>
18390
+ <tt>value = {{value | date: "HH:mm:ss"}}</tt><br/>
18391
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18392
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18393
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18394
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18395
+ </form>
18396
+ </file>
18397
+ <file name="protractor.js" type="protractor">
18398
+ var value = element(by.binding('value | date: "HH:mm:ss"'));
18399
+ var valid = element(by.binding('myForm.input.$valid'));
18400
+ var input = element(by.model('value'));
18401
+
18402
+ // currently protractor/webdriver does not support
18403
+ // sending keys to all known HTML5 input controls
18404
+ // for various browsers (https://github.com/angular/protractor/issues/562).
18405
+ function setInput(val) {
18406
+ // set the value of the element and force validation.
18407
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
18408
+ "ipt.value = '" + val + "';" +
18409
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18410
+ browser.executeScript(scr);
18411
+ }
18412
+
18413
+ it('should initialize to model', function() {
18414
+ expect(value.getText()).toContain('14:57:00');
18415
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
18416
+ });
18417
+
18418
+ it('should be invalid if empty', function() {
18419
+ setInput('');
18420
+ expect(value.getText()).toEqual('value =');
18421
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18422
+ });
18423
+
18424
+ it('should be invalid if over max', function() {
18425
+ setInput('23:59:00');
18426
+ expect(value.getText()).toContain('');
18427
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18428
+ });
18429
+ </file>
18430
+ </example>
18431
+ */
18432
+ 'time': createDateInputType('time', TIME_REGEXP,
18433
+ createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),
18434
+ 'HH:mm:ss.sss'),
18435
+
18436
+ /**
18437
+ * @ngdoc input
18438
+ * @name input[week]
18439
+ *
18440
+ * @description
18441
+ * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support
18442
+ * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
18443
+ * week format (yyyy-W##), for example: `2013-W02`. The model must always be a Date object.
18444
+ *
18445
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
18446
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18447
+ *
18448
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18449
+ * @param {string=} name Property name of the form under which the control is published.
18450
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
18451
+ * valid ISO week format (yyyy-W##).
18452
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
18453
+ * a valid ISO week format (yyyy-W##).
18454
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18455
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18456
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18457
+ * `required` when you want to data-bind to the `required` attribute.
18458
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18459
+ * interaction with the input element.
18460
+ *
18461
+ * @example
18462
+ <example name="week-input-directive" module="weekExample">
18463
+ <file name="index.html">
18464
+ <script>
18465
+ angular.module('weekExample', [])
18466
+ .controller('DateController', ['$scope', function($scope) {
18467
+ $scope.value = new Date(2013, 0, 3);
18468
+ }]);
18469
+ </script>
18470
+ <form name="myForm" ng-controller="DateController as dateCtrl">
18471
+ Pick a date between in 2013:
18472
+ <input id="exampleInput" type="week" name="input" ng-model="value"
18473
+ placeholder="YYYY-W##" min="2012-W32" max="2013-W52" required />
18474
+ <span class="error" ng-show="myForm.input.$error.required">
18475
+ Required!</span>
18476
+ <span class="error" ng-show="myForm.input.$error.week">
18477
+ Not a valid date!</span>
18478
+ <tt>value = {{value | date: "yyyy-Www"}}</tt><br/>
18479
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18480
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18481
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18482
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18483
+ </form>
18484
+ </file>
18485
+ <file name="protractor.js" type="protractor">
18486
+ var value = element(by.binding('value | date: "yyyy-Www"'));
18487
+ var valid = element(by.binding('myForm.input.$valid'));
18488
+ var input = element(by.model('value'));
18489
+
18490
+ // currently protractor/webdriver does not support
18491
+ // sending keys to all known HTML5 input controls
18492
+ // for various browsers (https://github.com/angular/protractor/issues/562).
18493
+ function setInput(val) {
18494
+ // set the value of the element and force validation.
18495
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
18496
+ "ipt.value = '" + val + "';" +
18497
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18498
+ browser.executeScript(scr);
18499
+ }
18500
+
18501
+ it('should initialize to model', function() {
18502
+ expect(value.getText()).toContain('2013-W01');
18503
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
18504
+ });
18505
+
18506
+ it('should be invalid if empty', function() {
18507
+ setInput('');
18508
+ expect(value.getText()).toEqual('value =');
18509
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18510
+ });
18511
+
18512
+ it('should be invalid if over max', function() {
18513
+ setInput('2015-W01');
18514
+ expect(value.getText()).toContain('');
18515
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18516
+ });
18517
+ </file>
18518
+ </example>
18519
+ */
18520
+ 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),
18521
+
18522
+ /**
18523
+ * @ngdoc input
18524
+ * @name input[month]
18525
+ *
18526
+ * @description
18527
+ * Input with month validation and transformation. In browsers that do not yet support
18528
+ * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
18529
+ * month format (yyyy-MM), for example: `2009-01`. The model must always be a Date object. In the event the model is
18530
+ * not set to the first of the month, the first of that model's month is assumed.
18531
+ *
18532
+ * The timezone to be used to read/write the `Date` instance in the model can be defined using
18533
+ * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
18534
+ *
18535
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18536
+ * @param {string=} name Property name of the form under which the control is published.
18537
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be
18538
+ * a valid ISO month format (yyyy-MM).
18539
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must
18540
+ * be a valid ISO month format (yyyy-MM).
18541
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18542
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18543
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18544
+ * `required` when you want to data-bind to the `required` attribute.
18545
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18546
+ * interaction with the input element.
18547
+ *
18548
+ * @example
18549
+ <example name="month-input-directive" module="monthExample">
18550
+ <file name="index.html">
18551
+ <script>
18552
+ angular.module('monthExample', [])
18553
+ .controller('DateController', ['$scope', function($scope) {
18554
+ $scope.value = new Date(2013, 9, 1);
18555
+ }]);
18556
+ </script>
18557
+ <form name="myForm" ng-controller="DateController as dateCtrl">
18558
+ Pick a month int 2013:
18559
+ <input id="exampleInput" type="month" name="input" ng-model="value"
18560
+ placeholder="yyyy-MM" min="2013-01" max="2013-12" required />
18561
+ <span class="error" ng-show="myForm.input.$error.required">
18562
+ Required!</span>
18563
+ <span class="error" ng-show="myForm.input.$error.month">
18564
+ Not a valid month!</span>
18565
+ <tt>value = {{value | date: "yyyy-MM"}}</tt><br/>
18566
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18567
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18568
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18569
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18570
+ </form>
18571
+ </file>
18572
+ <file name="protractor.js" type="protractor">
18573
+ var value = element(by.binding('value | date: "yyyy-MM"'));
18574
+ var valid = element(by.binding('myForm.input.$valid'));
18575
+ var input = element(by.model('value'));
18576
+
18577
+ // currently protractor/webdriver does not support
18578
+ // sending keys to all known HTML5 input controls
18579
+ // for various browsers (https://github.com/angular/protractor/issues/562).
18580
+ function setInput(val) {
18581
+ // set the value of the element and force validation.
18582
+ var scr = "var ipt = document.getElementById('exampleInput'); " +
18583
+ "ipt.value = '" + val + "';" +
18584
+ "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
18585
+ browser.executeScript(scr);
18586
+ }
18587
+
18588
+ it('should initialize to model', function() {
18589
+ expect(value.getText()).toContain('2013-10');
18590
+ expect(valid.getText()).toContain('myForm.input.$valid = true');
18591
+ });
18592
+
18593
+ it('should be invalid if empty', function() {
18594
+ setInput('');
18595
+ expect(value.getText()).toEqual('value =');
18596
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18597
+ });
18598
+
18599
+ it('should be invalid if over max', function() {
18600
+ setInput('2015-01');
18601
+ expect(value.getText()).toContain('');
18602
+ expect(valid.getText()).toContain('myForm.input.$valid = false');
18603
+ });
18604
+ </file>
18605
+ </example>
18606
+ */
18607
+ 'month': createDateInputType('month', MONTH_REGEXP,
18608
+ createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),
18609
+ 'yyyy-MM'),
18610
+
18611
+ /**
18612
+ * @ngdoc input
18613
+ * @name input[number]
18614
+ *
18615
+ * @description
18616
+ * Text input with number validation and transformation. Sets the `number` validation
18617
+ * error if not a valid number.
18618
+ *
18619
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18620
+ * @param {string=} name Property name of the form under which the control is published.
18621
+ * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
18622
+ * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
18623
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18624
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18625
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18626
+ * `required` when you want to data-bind to the `required` attribute.
18627
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
18628
+ * minlength.
18629
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
18630
+ * maxlength.
18631
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
18632
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
18633
+ * patterns defined as scope expressions.
18634
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18635
+ * interaction with the input element.
18636
+ *
18637
+ * @example
18638
+ <example name="number-input-directive" module="numberExample">
18639
+ <file name="index.html">
18640
+ <script>
18641
+ angular.module('numberExample', [])
18642
+ .controller('ExampleController', ['$scope', function($scope) {
18643
+ $scope.value = 12;
18644
+ }]);
18645
+ </script>
18646
+ <form name="myForm" ng-controller="ExampleController">
18647
+ Number: <input type="number" name="input" ng-model="value"
18648
+ min="0" max="99" required>
18649
+ <span class="error" ng-show="myForm.input.$error.required">
18650
+ Required!</span>
18651
+ <span class="error" ng-show="myForm.input.$error.number">
18652
+ Not valid number!</span>
18653
+ <tt>value = {{value}}</tt><br/>
18654
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18655
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18656
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18657
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18658
+ </form>
18659
+ </file>
18660
+ <file name="protractor.js" type="protractor">
18661
+ var value = element(by.binding('value'));
18662
+ var valid = element(by.binding('myForm.input.$valid'));
18663
+ var input = element(by.model('value'));
18664
+
18665
+ it('should initialize to model', function() {
18666
+ expect(value.getText()).toContain('12');
18667
+ expect(valid.getText()).toContain('true');
18668
+ });
18669
+
18670
+ it('should be invalid if empty', function() {
18671
+ input.clear();
18672
+ input.sendKeys('');
18673
+ expect(value.getText()).toEqual('value =');
18674
+ expect(valid.getText()).toContain('false');
18675
+ });
18676
+
18677
+ it('should be invalid if over max', function() {
18678
+ input.clear();
18679
+ input.sendKeys('123');
18680
+ expect(value.getText()).toEqual('value =');
18681
+ expect(valid.getText()).toContain('false');
18682
+ });
18683
+ </file>
18684
+ </example>
18685
+ */
18686
+ 'number': numberInputType,
18687
+
18688
+
18689
+ /**
18690
+ * @ngdoc input
18691
+ * @name input[url]
18692
+ *
18693
+ * @description
18694
+ * Text input with URL validation. Sets the `url` validation error key if the content is not a
18695
+ * valid URL.
18696
+ *
18697
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18698
+ * @param {string=} name Property name of the form under which the control is published.
18699
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18700
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18701
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18702
+ * `required` when you want to data-bind to the `required` attribute.
18703
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
18704
+ * minlength.
18705
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
18706
+ * maxlength.
18707
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
18708
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
18709
+ * patterns defined as scope expressions.
18710
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18711
+ * interaction with the input element.
18712
+ *
18713
+ * @example
18714
+ <example name="url-input-directive" module="urlExample">
18715
+ <file name="index.html">
18716
+ <script>
18717
+ angular.module('urlExample', [])
18718
+ .controller('ExampleController', ['$scope', function($scope) {
18719
+ $scope.text = 'http://google.com';
18720
+ }]);
18721
+ </script>
18722
+ <form name="myForm" ng-controller="ExampleController">
18723
+ URL: <input type="url" name="input" ng-model="text" required>
18724
+ <span class="error" ng-show="myForm.input.$error.required">
18725
+ Required!</span>
18726
+ <span class="error" ng-show="myForm.input.$error.url">
18727
+ Not valid url!</span>
18728
+ <tt>text = {{text}}</tt><br/>
18729
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18730
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18731
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18732
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18733
+ <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>
18734
+ </form>
18735
+ </file>
18736
+ <file name="protractor.js" type="protractor">
18737
+ var text = element(by.binding('text'));
18738
+ var valid = element(by.binding('myForm.input.$valid'));
18739
+ var input = element(by.model('text'));
18740
+
18741
+ it('should initialize to model', function() {
18742
+ expect(text.getText()).toContain('http://google.com');
18743
+ expect(valid.getText()).toContain('true');
18744
+ });
18745
+
18746
+ it('should be invalid if empty', function() {
18747
+ input.clear();
18748
+ input.sendKeys('');
18749
+
18750
+ expect(text.getText()).toEqual('text =');
18751
+ expect(valid.getText()).toContain('false');
18752
+ });
18753
+
18754
+ it('should be invalid if not url', function() {
18755
+ input.clear();
18756
+ input.sendKeys('box');
18757
+
18758
+ expect(valid.getText()).toContain('false');
18759
+ });
18760
+ </file>
18761
+ </example>
18762
+ */
18763
+ 'url': urlInputType,
18764
+
18765
+
18766
+ /**
18767
+ * @ngdoc input
18768
+ * @name input[email]
18769
+ *
18770
+ * @description
18771
+ * Text input with email validation. Sets the `email` validation error key if not a valid email
18772
+ * address.
18773
+ *
18774
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18775
+ * @param {string=} name Property name of the form under which the control is published.
18776
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
18777
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
18778
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
18779
+ * `required` when you want to data-bind to the `required` attribute.
18780
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
18781
+ * minlength.
18782
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
18783
+ * maxlength.
18784
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
18785
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
18786
+ * patterns defined as scope expressions.
18787
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18788
+ * interaction with the input element.
18789
+ *
18790
+ * @example
18791
+ <example name="email-input-directive" module="emailExample">
18792
+ <file name="index.html">
18793
+ <script>
18794
+ angular.module('emailExample', [])
18795
+ .controller('ExampleController', ['$scope', function($scope) {
18796
+ $scope.text = 'me@example.com';
18797
+ }]);
18798
+ </script>
18799
+ <form name="myForm" ng-controller="ExampleController">
18800
+ Email: <input type="email" name="input" ng-model="text" required>
18801
+ <span class="error" ng-show="myForm.input.$error.required">
18802
+ Required!</span>
18803
+ <span class="error" ng-show="myForm.input.$error.email">
18804
+ Not valid email!</span>
18805
+ <tt>text = {{text}}</tt><br/>
18806
+ <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
18807
+ <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
18808
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
18809
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
18810
+ <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
18811
+ </form>
18812
+ </file>
18813
+ <file name="protractor.js" type="protractor">
18814
+ var text = element(by.binding('text'));
18815
+ var valid = element(by.binding('myForm.input.$valid'));
18816
+ var input = element(by.model('text'));
18817
+
18818
+ it('should initialize to model', function() {
18819
+ expect(text.getText()).toContain('me@example.com');
18820
+ expect(valid.getText()).toContain('true');
18821
+ });
18822
+
18823
+ it('should be invalid if empty', function() {
18824
+ input.clear();
18825
+ input.sendKeys('');
18826
+ expect(text.getText()).toEqual('text =');
18827
+ expect(valid.getText()).toContain('false');
18828
+ });
18829
+
18830
+ it('should be invalid if not email', function() {
18831
+ input.clear();
18832
+ input.sendKeys('xxx');
18833
+
18834
+ expect(valid.getText()).toContain('false');
18835
+ });
18836
+ </file>
18837
+ </example>
18838
+ */
18839
+ 'email': emailInputType,
18840
+
18841
+
18842
+ /**
18843
+ * @ngdoc input
18844
+ * @name input[radio]
18845
+ *
18846
+ * @description
18847
+ * HTML radio button.
18848
+ *
18849
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18850
+ * @param {string} value The value to which the expression should be set when selected.
18851
+ * @param {string=} name Property name of the form under which the control is published.
18852
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18853
+ * interaction with the input element.
18854
+ * @param {string} ngValue Angular expression which sets the value to which the expression should
18855
+ * be set when selected.
18856
+ *
18857
+ * @example
18858
+ <example name="radio-input-directive" module="radioExample">
18859
+ <file name="index.html">
18860
+ <script>
18861
+ angular.module('radioExample', [])
18862
+ .controller('ExampleController', ['$scope', function($scope) {
18863
+ $scope.color = 'blue';
18864
+ $scope.specialValue = {
18865
+ "id": "12345",
18866
+ "value": "green"
18867
+ };
18868
+ }]);
18869
+ </script>
18870
+ <form name="myForm" ng-controller="ExampleController">
18871
+ <input type="radio" ng-model="color" value="red"> Red <br/>
18872
+ <input type="radio" ng-model="color" ng-value="specialValue"> Green <br/>
18873
+ <input type="radio" ng-model="color" value="blue"> Blue <br/>
18874
+ <tt>color = {{color | json}}</tt><br/>
18875
+ </form>
18876
+ Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`.
18877
+ </file>
18878
+ <file name="protractor.js" type="protractor">
18879
+ it('should change state', function() {
18880
+ var color = element(by.binding('color'));
18881
+
18882
+ expect(color.getText()).toContain('blue');
18883
+
18884
+ element.all(by.model('color')).get(0).click();
18885
+
18886
+ expect(color.getText()).toContain('red');
18887
+ });
18888
+ </file>
18889
+ </example>
18890
+ */
18891
+ 'radio': radioInputType,
18892
+
18893
+
18894
+ /**
18895
+ * @ngdoc input
18896
+ * @name input[checkbox]
18897
+ *
18898
+ * @description
18899
+ * HTML checkbox.
18900
+ *
18901
+ * @param {string} ngModel Assignable angular expression to data-bind to.
18902
+ * @param {string=} name Property name of the form under which the control is published.
18903
+ * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
18904
+ * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
18905
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
18906
+ * interaction with the input element.
18907
+ *
18908
+ * @example
18909
+ <example name="checkbox-input-directive" module="checkboxExample">
18910
+ <file name="index.html">
18911
+ <script>
18912
+ angular.module('checkboxExample', [])
18913
+ .controller('ExampleController', ['$scope', function($scope) {
18914
+ $scope.value1 = true;
18915
+ $scope.value2 = 'YES'
18916
+ }]);
18917
+ </script>
18918
+ <form name="myForm" ng-controller="ExampleController">
18919
+ Value1: <input type="checkbox" ng-model="value1"> <br/>
18920
+ Value2: <input type="checkbox" ng-model="value2"
18921
+ ng-true-value="'YES'" ng-false-value="'NO'"> <br/>
18922
+ <tt>value1 = {{value1}}</tt><br/>
18923
+ <tt>value2 = {{value2}}</tt><br/>
18924
+ </form>
18925
+ </file>
18926
+ <file name="protractor.js" type="protractor">
18927
+ it('should change state', function() {
18928
+ var value1 = element(by.binding('value1'));
18929
+ var value2 = element(by.binding('value2'));
18930
+
18931
+ expect(value1.getText()).toContain('true');
18932
+ expect(value2.getText()).toContain('YES');
18933
+
18934
+ element(by.model('value1')).click();
18935
+ element(by.model('value2')).click();
18936
+
18937
+ expect(value1.getText()).toContain('false');
18938
+ expect(value2.getText()).toContain('NO');
18939
+ });
18940
+ </file>
18941
+ </example>
18942
+ */
18943
+ 'checkbox': checkboxInputType,
18944
+
18945
+ 'hidden': noop,
18946
+ 'button': noop,
18947
+ 'submit': noop,
18948
+ 'reset': noop,
18949
+ 'file': noop
18950
+};
18951
+
18952
+function testFlags(validity, flags) {
18953
+ var i, flag;
18954
+ if (flags) {
18955
+ for (i=0; i<flags.length; ++i) {
18956
+ flag = flags[i];
18957
+ if (validity[flag]) {
18958
+ return true;
18959
+ }
18960
+ }
18961
+ }
18962
+ return false;
18963
+}
18964
+
18965
+function stringBasedInputType(ctrl) {
18966
+ ctrl.$formatters.push(function(value) {
18967
+ return ctrl.$isEmpty(value) ? value : value.toString();
18968
+ });
18969
+}
18970
+
18971
+function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
18972
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
18973
+ stringBasedInputType(ctrl);
18974
+}
18975
+
18976
+function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
18977
+ var validity = element.prop(VALIDITY_STATE_PROPERTY);
18978
+ var placeholder = element[0].placeholder, noevent = {};
18979
+ var type = lowercase(element[0].type);
18980
+
18981
+ // In composition mode, users are still inputing intermediate text buffer,
18982
+ // hold the listener until composition is done.
18983
+ // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
18984
+ if (!$sniffer.android) {
18985
+ var composing = false;
18986
+
18987
+ element.on('compositionstart', function(data) {
18988
+ composing = true;
18989
+ });
18990
+
18991
+ element.on('compositionend', function() {
18992
+ composing = false;
18993
+ listener();
18994
+ });
18995
+ }
18996
+
18997
+ var listener = function(ev) {
18998
+ if (composing) return;
18999
+ var value = element.val(),
19000
+ event = ev && ev.type;
19001
+
19002
+ // IE (11 and under) seem to emit an 'input' event if the placeholder value changes.
19003
+ // We don't want to dirty the value when this happens, so we abort here. Unfortunately,
19004
+ // IE also sends input events for other non-input-related things, (such as focusing on a
19005
+ // form control), so this change is not entirely enough to solve this.
19006
+ if (msie && (ev || noevent).type === 'input' && element[0].placeholder !== placeholder) {
19007
+ placeholder = element[0].placeholder;
19008
+ return;
19009
+ }
19010
+
19011
+ // By default we will trim the value
19012
+ // If the attribute ng-trim exists we will avoid trimming
19013
+ // If input type is 'password', the value is never trimmed
19014
+ if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {
19015
+ value = trim(value);
19016
+ }
19017
+
19018
+ // If a control is suffering from bad input (due to native validators), browsers discard its
19019
+ // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the
19020
+ // control's value is the same empty value twice in a row.
19021
+ if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {
19022
+ ctrl.$setViewValue(value, event);
19023
+ }
19024
+ };
19025
+
19026
+ // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the
19027
+ // input event on backspace, delete or cut
19028
+ if ($sniffer.hasEvent('input')) {
19029
+ element.on('input', listener);
19030
+ } else {
19031
+ var timeout;
19032
+
19033
+ var deferListener = function(ev) {
19034
+ if (!timeout) {
19035
+ timeout = $browser.defer(function() {
19036
+ listener(ev);
19037
+ timeout = null;
19038
+ });
19039
+ }
19040
+ };
19041
+
19042
+ element.on('keydown', function(event) {
19043
+ var key = event.keyCode;
19044
+
19045
+ // ignore
19046
+ // command modifiers arrows
19047
+ if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;
19048
+
19049
+ deferListener(event);
19050
+ });
19051
+
19052
+ // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it
19053
+ if ($sniffer.hasEvent('paste')) {
19054
+ element.on('paste cut', deferListener);
19055
+ }
19056
+ }
19057
+
19058
+ // if user paste into input using mouse on older browser
19059
+ // or form autocomplete on newer browser, we need "change" event to catch it
19060
+ element.on('change', listener);
19061
+
19062
+ ctrl.$render = function() {
19063
+ element.val(ctrl.$isEmpty(ctrl.$modelValue) ? '' : ctrl.$viewValue);
19064
+ };
19065
+}
19066
+
19067
+function weekParser(isoWeek, existingDate) {
19068
+ if (isDate(isoWeek)) {
19069
+ return isoWeek;
19070
+ }
19071
+
19072
+ if (isString(isoWeek)) {
19073
+ WEEK_REGEXP.lastIndex = 0;
19074
+ var parts = WEEK_REGEXP.exec(isoWeek);
19075
+ if (parts) {
19076
+ var year = +parts[1],
19077
+ week = +parts[2],
19078
+ hours = 0,
19079
+ minutes = 0,
19080
+ seconds = 0,
19081
+ milliseconds = 0,
19082
+ firstThurs = getFirstThursdayOfYear(year),
19083
+ addDays = (week - 1) * 7;
19084
+
19085
+ if (existingDate) {
19086
+ hours = existingDate.getHours();
19087
+ minutes = existingDate.getMinutes();
19088
+ seconds = existingDate.getSeconds();
19089
+ milliseconds = existingDate.getMilliseconds();
19090
+ }
19091
+
19092
+ return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);
19093
+ }
19094
+ }
19095
+
19096
+ return NaN;
19097
+}
19098
+
19099
+function createDateParser(regexp, mapping) {
19100
+ return function(iso, date) {
19101
+ var parts, map;
19102
+
19103
+ if (isDate(iso)) {
19104
+ return iso;
19105
+ }
19106
+
19107
+ if (isString(iso)) {
19108
+ // When a date is JSON'ified to wraps itself inside of an extra
19109
+ // set of double quotes. This makes the date parsing code unable
19110
+ // to match the date string and parse it as a date.
19111
+ if (iso.charAt(0) == '"' && iso.charAt(iso.length-1) == '"') {
19112
+ iso = iso.substring(1, iso.length-1);
19113
+ }
19114
+ if (ISO_DATE_REGEXP.test(iso)) {
19115
+ return new Date(iso);
19116
+ }
19117
+ regexp.lastIndex = 0;
19118
+ parts = regexp.exec(iso);
19119
+
19120
+ if (parts) {
19121
+ parts.shift();
19122
+ if (date) {
19123
+ map = {
19124
+ yyyy: date.getFullYear(),
19125
+ MM: date.getMonth() + 1,
19126
+ dd: date.getDate(),
19127
+ HH: date.getHours(),
19128
+ mm: date.getMinutes(),
19129
+ ss: date.getSeconds(),
19130
+ sss: date.getMilliseconds() / 1000
19131
+ };
19132
+ } else {
19133
+ map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };
19134
+ }
19135
+
19136
+ forEach(parts, function(part, index) {
19137
+ if (index < mapping.length) {
19138
+ map[mapping[index]] = +part;
19139
+ }
19140
+ });
19141
+ return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);
19142
+ }
19143
+ }
19144
+
19145
+ return NaN;
19146
+ };
19147
+}
19148
+
19149
+function createDateInputType(type, regexp, parseDate, format) {
19150
+ return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {
19151
+ badInputChecker(scope, element, attr, ctrl);
19152
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19153
+ var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;
19154
+ var previousDate;
19155
+
19156
+ ctrl.$$parserName = type;
19157
+ ctrl.$parsers.push(function(value) {
19158
+ if (ctrl.$isEmpty(value)) return null;
19159
+ if (regexp.test(value)) {
19160
+ // Note: We cannot read ctrl.$modelValue, as there might be a different
19161
+ // parser/formatter in the processing chain so that the model
19162
+ // contains some different data format!
19163
+ var parsedDate = parseDate(value, previousDate);
19164
+ if (timezone === 'UTC') {
19165
+ parsedDate.setMinutes(parsedDate.getMinutes() - parsedDate.getTimezoneOffset());
19166
+ }
19167
+ return parsedDate;
19168
+ }
19169
+ return undefined;
19170
+ });
19171
+
19172
+ ctrl.$formatters.push(function(value) {
19173
+ if (!ctrl.$isEmpty(value)) {
19174
+ if (!isDate(value)) {
19175
+ throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
19176
+ }
19177
+ previousDate = value;
19178
+ if (previousDate && timezone === 'UTC') {
19179
+ var timezoneOffset = 60000 * previousDate.getTimezoneOffset();
19180
+ previousDate = new Date(previousDate.getTime() + timezoneOffset);
19181
+ }
19182
+ return $filter('date')(value, format, timezone);
19183
+ } else {
19184
+ previousDate = null;
19185
+ }
19186
+ return '';
19187
+ });
19188
+
19189
+ if (isDefined(attr.min) || attr.ngMin) {
19190
+ var minVal;
19191
+ ctrl.$validators.min = function(value) {
19192
+ return ctrl.$isEmpty(value) || isUndefined(minVal) || parseDate(value) >= minVal;
19193
+ };
19194
+ attr.$observe('min', function(val) {
19195
+ minVal = parseObservedDateValue(val);
19196
+ ctrl.$validate();
19197
+ });
19198
+ }
19199
+
19200
+ if (isDefined(attr.max) || attr.ngMax) {
19201
+ var maxVal;
19202
+ ctrl.$validators.max = function(value) {
19203
+ return ctrl.$isEmpty(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
19204
+ };
19205
+ attr.$observe('max', function(val) {
19206
+ maxVal = parseObservedDateValue(val);
19207
+ ctrl.$validate();
19208
+ });
19209
+ }
19210
+ // Override the standard $isEmpty to detect invalid dates as well
19211
+ ctrl.$isEmpty = function(value) {
19212
+ // Invalid Date: getTime() returns NaN
19213
+ return !value || (value.getTime && value.getTime() !== value.getTime());
19214
+ };
19215
+
19216
+ function parseObservedDateValue(val) {
19217
+ return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined;
19218
+ }
19219
+ };
19220
+}
19221
+
19222
+function badInputChecker(scope, element, attr, ctrl) {
19223
+ var node = element[0];
19224
+ var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);
19225
+ if (nativeValidation) {
19226
+ ctrl.$parsers.push(function(value) {
19227
+ var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};
19228
+ // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):
19229
+ // - also sets validity.badInput (should only be validity.typeMismatch).
19230
+ // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)
19231
+ // - can ignore this case as we can still read out the erroneous email...
19232
+ return validity.badInput && !validity.typeMismatch ? undefined : value;
19233
+ });
19234
+ }
19235
+}
19236
+
19237
+function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19238
+ badInputChecker(scope, element, attr, ctrl);
19239
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19240
+
19241
+ ctrl.$$parserName = 'number';
19242
+ ctrl.$parsers.push(function(value) {
19243
+ if (ctrl.$isEmpty(value)) return null;
19244
+ if (NUMBER_REGEXP.test(value)) return parseFloat(value);
19245
+ return undefined;
19246
+ });
19247
+
19248
+ ctrl.$formatters.push(function(value) {
19249
+ if (!ctrl.$isEmpty(value)) {
19250
+ if (!isNumber(value)) {
19251
+ throw $ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);
19252
+ }
19253
+ value = value.toString();
19254
+ }
19255
+ return value;
19256
+ });
19257
+
19258
+ if (attr.min || attr.ngMin) {
19259
+ var minVal;
19260
+ ctrl.$validators.min = function(value) {
19261
+ return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
19262
+ };
19263
+
19264
+ attr.$observe('min', function(val) {
19265
+ if (isDefined(val) && !isNumber(val)) {
19266
+ val = parseFloat(val, 10);
19267
+ }
19268
+ minVal = isNumber(val) && !isNaN(val) ? val : undefined;
19269
+ // TODO(matsko): implement validateLater to reduce number of validations
19270
+ ctrl.$validate();
19271
+ });
19272
+ }
19273
+
19274
+ if (attr.max || attr.ngMax) {
19275
+ var maxVal;
19276
+ ctrl.$validators.max = function(value) {
19277
+ return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
19278
+ };
19279
+
19280
+ attr.$observe('max', function(val) {
19281
+ if (isDefined(val) && !isNumber(val)) {
19282
+ val = parseFloat(val, 10);
19283
+ }
19284
+ maxVal = isNumber(val) && !isNaN(val) ? val : undefined;
19285
+ // TODO(matsko): implement validateLater to reduce number of validations
19286
+ ctrl.$validate();
19287
+ });
19288
+ }
19289
+}
19290
+
19291
+function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19292
+ // Note: no badInputChecker here by purpose as `url` is only a validation
19293
+ // in browsers, i.e. we can always read out input.value even if it is not valid!
19294
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19295
+ stringBasedInputType(ctrl);
19296
+
19297
+ ctrl.$$parserName = 'url';
19298
+ ctrl.$validators.url = function(value) {
19299
+ return ctrl.$isEmpty(value) || URL_REGEXP.test(value);
19300
+ };
19301
+}
19302
+
19303
+function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
19304
+ // Note: no badInputChecker here by purpose as `url` is only a validation
19305
+ // in browsers, i.e. we can always read out input.value even if it is not valid!
19306
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
19307
+ stringBasedInputType(ctrl);
19308
+
19309
+ ctrl.$$parserName = 'email';
19310
+ ctrl.$validators.email = function(value) {
19311
+ return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);
19312
+ };
19313
+}
19314
+
19315
+function radioInputType(scope, element, attr, ctrl) {
19316
+ // make the name unique, if not defined
19317
+ if (isUndefined(attr.name)) {
19318
+ element.attr('name', nextUid());
19319
+ }
19320
+
19321
+ var listener = function(ev) {
19322
+ if (element[0].checked) {
19323
+ ctrl.$setViewValue(attr.value, ev && ev.type);
19324
+ }
19325
+ };
19326
+
19327
+ element.on('click', listener);
19328
+
19329
+ ctrl.$render = function() {
19330
+ var value = attr.value;
19331
+ element[0].checked = (value == ctrl.$viewValue);
19332
+ };
19333
+
19334
+ attr.$observe('value', ctrl.$render);
19335
+}
19336
+
19337
+function parseConstantExpr($parse, context, name, expression, fallback) {
19338
+ var parseFn;
19339
+ if (isDefined(expression)) {
19340
+ parseFn = $parse(expression);
19341
+ if (!parseFn.constant) {
19342
+ throw minErr('ngModel')('constexpr', 'Expected constant expression for `{0}`, but saw ' +
19343
+ '`{1}`.', name, expression);
19344
+ }
19345
+ return parseFn(context);
19346
+ }
19347
+ return fallback;
19348
+}
19349
+
19350
+function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {
19351
+ var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);
19352
+ var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);
19353
+
19354
+ var listener = function(ev) {
19355
+ ctrl.$setViewValue(element[0].checked, ev && ev.type);
19356
+ };
19357
+
19358
+ element.on('click', listener);
19359
+
19360
+ ctrl.$render = function() {
19361
+ element[0].checked = ctrl.$viewValue;
19362
+ };
19363
+
19364
+ // Override the standard `$isEmpty` because an empty checkbox is never equal to the trueValue
19365
+ ctrl.$isEmpty = function(value) {
19366
+ return value !== trueValue;
19367
+ };
19368
+
19369
+ ctrl.$formatters.push(function(value) {
19370
+ return equals(value, trueValue);
19371
+ });
19372
+
19373
+ ctrl.$parsers.push(function(value) {
19374
+ return value ? trueValue : falseValue;
19375
+ });
19376
+}
19377
+
19378
+
19379
+/**
19380
+ * @ngdoc directive
19381
+ * @name textarea
19382
+ * @restrict E
19383
+ *
19384
+ * @description
19385
+ * HTML textarea element control with angular data-binding. The data-binding and validation
19386
+ * properties of this element are exactly the same as those of the
19387
+ * {@link ng.directive:input input element}.
19388
+ *
19389
+ * @param {string} ngModel Assignable angular expression to data-bind to.
19390
+ * @param {string=} name Property name of the form under which the control is published.
19391
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
19392
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
19393
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
19394
+ * `required` when you want to data-bind to the `required` attribute.
19395
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
19396
+ * minlength.
19397
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
19398
+ * maxlength.
19399
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
19400
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
19401
+ * patterns defined as scope expressions.
19402
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
19403
+ * interaction with the input element.
19404
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
19405
+ */
19406
+
19407
+
19408
+/**
19409
+ * @ngdoc directive
19410
+ * @name input
19411
+ * @restrict E
19412
+ *
19413
+ * @description
19414
+ * HTML input element control with angular data-binding. Input control follows HTML5 input types
19415
+ * and polyfills the HTML5 validation behavior for older browsers.
19416
+ *
19417
+ * *NOTE* Not every feature offered is available for all input types.
19418
+ *
19419
+ * @param {string} ngModel Assignable angular expression to data-bind to.
19420
+ * @param {string=} name Property name of the form under which the control is published.
19421
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
19422
+ * @param {boolean=} ngRequired Sets `required` attribute if set to true
19423
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
19424
+ * minlength.
19425
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
19426
+ * maxlength.
19427
+ * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
19428
+ * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
19429
+ * patterns defined as scope expressions.
19430
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
19431
+ * interaction with the input element.
19432
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
19433
+ * This parameter is ignored for input[type=password] controls, which will never trim the
19434
+ * input.
19435
+ *
19436
+ * @example
19437
+ <example name="input-directive" module="inputExample">
19438
+ <file name="index.html">
19439
+ <script>
19440
+ angular.module('inputExample', [])
19441
+ .controller('ExampleController', ['$scope', function($scope) {
19442
+ $scope.user = {name: 'guest', last: 'visitor'};
19443
+ }]);
19444
+ </script>
19445
+ <div ng-controller="ExampleController">
19446
+ <form name="myForm">
19447
+ User name: <input type="text" name="userName" ng-model="user.name" required>
19448
+ <span class="error" ng-show="myForm.userName.$error.required">
19449
+ Required!</span><br>
19450
+ Last name: <input type="text" name="lastName" ng-model="user.last"
19451
+ ng-minlength="3" ng-maxlength="10">
19452
+ <span class="error" ng-show="myForm.lastName.$error.minlength">
19453
+ Too short!</span>
19454
+ <span class="error" ng-show="myForm.lastName.$error.maxlength">
19455
+ Too long!</span><br>
19456
+ </form>
19457
+ <hr>
19458
+ <tt>user = {{user}}</tt><br/>
19459
+ <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br>
19460
+ <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br>
19461
+ <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br>
19462
+ <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br>
19463
+ <tt>myForm.$valid = {{myForm.$valid}}</tt><br>
19464
+ <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br>
19465
+ <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br>
19466
+ <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br>
19467
+ </div>
19468
+ </file>
19469
+ <file name="protractor.js" type="protractor">
19470
+ var user = element(by.exactBinding('user'));
19471
+ var userNameValid = element(by.binding('myForm.userName.$valid'));
19472
+ var lastNameValid = element(by.binding('myForm.lastName.$valid'));
19473
+ var lastNameError = element(by.binding('myForm.lastName.$error'));
19474
+ var formValid = element(by.binding('myForm.$valid'));
19475
+ var userNameInput = element(by.model('user.name'));
19476
+ var userLastInput = element(by.model('user.last'));
19477
+
19478
+ it('should initialize to model', function() {
19479
+ expect(user.getText()).toContain('{"name":"guest","last":"visitor"}');
19480
+ expect(userNameValid.getText()).toContain('true');
19481
+ expect(formValid.getText()).toContain('true');
19482
+ });
19483
+
19484
+ it('should be invalid if empty when required', function() {
19485
+ userNameInput.clear();
19486
+ userNameInput.sendKeys('');
19487
+
19488
+ expect(user.getText()).toContain('{"last":"visitor"}');
19489
+ expect(userNameValid.getText()).toContain('false');
19490
+ expect(formValid.getText()).toContain('false');
19491
+ });
19492
+
19493
+ it('should be valid if empty when min length is set', function() {
19494
+ userLastInput.clear();
19495
+ userLastInput.sendKeys('');
19496
+
19497
+ expect(user.getText()).toContain('{"name":"guest","last":""}');
19498
+ expect(lastNameValid.getText()).toContain('true');
19499
+ expect(formValid.getText()).toContain('true');
19500
+ });
19501
+
19502
+ it('should be invalid if less than required min length', function() {
19503
+ userLastInput.clear();
19504
+ userLastInput.sendKeys('xx');
19505
+
19506
+ expect(user.getText()).toContain('{"name":"guest"}');
19507
+ expect(lastNameValid.getText()).toContain('false');
19508
+ expect(lastNameError.getText()).toContain('minlength');
19509
+ expect(formValid.getText()).toContain('false');
19510
+ });
19511
+
19512
+ it('should be invalid if longer than max length', function() {
19513
+ userLastInput.clear();
19514
+ userLastInput.sendKeys('some ridiculously long name');
19515
+
19516
+ expect(user.getText()).toContain('{"name":"guest"}');
19517
+ expect(lastNameValid.getText()).toContain('false');
19518
+ expect(lastNameError.getText()).toContain('maxlength');
19519
+ expect(formValid.getText()).toContain('false');
19520
+ });
19521
+ </file>
19522
+ </example>
19523
+ */
19524
+var inputDirective = ['$browser', '$sniffer', '$filter', '$parse',
19525
+ function($browser, $sniffer, $filter, $parse) {
19526
+ return {
19527
+ restrict: 'E',
19528
+ require: ['?ngModel'],
19529
+ link: {
19530
+ pre: function(scope, element, attr, ctrls) {
19531
+ if (ctrls[0]) {
19532
+ (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,
19533
+ $browser, $filter, $parse);
19534
+ }
19535
+ }
19536
+ }
19537
+ };
19538
+}];
19539
+
19540
+var VALID_CLASS = 'ng-valid',
19541
+ INVALID_CLASS = 'ng-invalid',
19542
+ PRISTINE_CLASS = 'ng-pristine',
19543
+ DIRTY_CLASS = 'ng-dirty',
19544
+ UNTOUCHED_CLASS = 'ng-untouched',
19545
+ TOUCHED_CLASS = 'ng-touched',
19546
+ PENDING_CLASS = 'ng-pending';
19547
+
19548
+/**
19549
+ * @ngdoc type
19550
+ * @name ngModel.NgModelController
19551
+ *
19552
+ * @property {string} $viewValue Actual string value in the view.
19553
+ * @property {*} $modelValue The value in the model, that the control is bound to.
19554
+ * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
19555
+ the control reads value from the DOM. Each function is called, in turn, passing the value
19556
+ through to the next. The last return value is used to populate the model.
19557
+ Used to sanitize / convert the value as well as validation. For validation,
19558
+ the parsers should update the validity state using
19559
+ {@link ngModel.NgModelController#$setValidity $setValidity()},
19560
+ and return `undefined` for invalid values.
19561
+
19562
+ *
19563
+ * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
19564
+ the model value changes. Each function is called, in turn, passing the value through to the
19565
+ next. Used to format / convert values for display in the control and validation.
19566
+ * ```js
19567
+ * function formatter(value) {
19568
+ * if (value) {
19569
+ * return value.toUpperCase();
19570
+ * }
19571
+ * }
19572
+ * ngModel.$formatters.push(formatter);
19573
+ * ```
19574
+ *
19575
+ * @property {Object.<string, function>} $validators A collection of validators that are applied
19576
+ * whenever the model value changes. The key value within the object refers to the name of the
19577
+ * validator while the function refers to the validation operation. The validation operation is
19578
+ * provided with the model value as an argument and must return a true or false value depending
19579
+ * on the response of that validation.
19580
+ *
19581
+ * ```js
19582
+ * ngModel.$validators.validCharacters = function(modelValue, viewValue) {
19583
+ * var value = modelValue || viewValue;
19584
+ * return /[0-9]+/.test(value) &&
19585
+ * /[a-z]+/.test(value) &&
19586
+ * /[A-Z]+/.test(value) &&
19587
+ * /\W+/.test(value);
19588
+ * };
19589
+ * ```
19590
+ *
19591
+ * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to
19592
+ * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided
19593
+ * is expected to return a promise when it is run during the model validation process. Once the promise
19594
+ * is delivered then the validation status will be set to true when fulfilled and false when rejected.
19595
+ * When the asynchronous validators are triggered, each of the validators will run in parallel and the model
19596
+ * value will only be updated once all validators have been fulfilled. Also, keep in mind that all
19597
+ * asynchronous validators will only run once all synchronous validators have passed.
19598
+ *
19599
+ * Please note that if $http is used then it is important that the server returns a success HTTP response code
19600
+ * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.
19601
+ *
19602
+ * ```js
19603
+ * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
19604
+ * var value = modelValue || viewValue;
19605
+ *
19606
+ * // Lookup user by username
19607
+ * return $http.get('/api/users/' + value).
19608
+ * then(function resolved() {
19609
+ * //username exists, this means validation fails
19610
+ * return $q.reject('exists');
19611
+ * }, function rejected() {
19612
+ * //username does not exist, therefore this validation passes
19613
+ * return true;
19614
+ * });
19615
+ * };
19616
+ * ```
19617
+ *
19618
+ * @param {string} name The name of the validator.
19619
+ * @param {Function} validationFn The validation function that will be run.
19620
+ *
19621
+ * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the
19622
+ * view value has changed. It is called with no arguments, and its return value is ignored.
19623
+ * This can be used in place of additional $watches against the model value.
19624
+ *
19625
+ * @property {Object} $error An object hash with all failing validator ids as keys.
19626
+ * @property {Object} $pending An object hash with all pending validator ids as keys.
19627
+ *
19628
+ * @property {boolean} $untouched True if control has not lost focus yet.
19629
+ * @property {boolean} $touched True if control has lost focus.
19630
+ * @property {boolean} $pristine True if user has not interacted with the control yet.
19631
+ * @property {boolean} $dirty True if user has already interacted with the control.
19632
+ * @property {boolean} $valid True if there is no error.
19633
+ * @property {boolean} $invalid True if at least one error on the control.
19634
+ *
19635
+ * @description
19636
+ *
19637
+ * `NgModelController` provides API for the `ng-model` directive. The controller contains
19638
+ * services for data-binding, validation, CSS updates, and value formatting and parsing. It
19639
+ * purposefully does not contain any logic which deals with DOM rendering or listening to
19640
+ * DOM events. Such DOM related logic should be provided by other directives which make use of
19641
+ * `NgModelController` for data-binding.
19642
+ *
19643
+ * ## Custom Control Example
19644
+ * This example shows how to use `NgModelController` with a custom control to achieve
19645
+ * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
19646
+ * collaborate together to achieve the desired result.
19647
+ *
19648
+ * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element
19649
+ * contents be edited in place by the user. This will not work on older browsers.
19650
+ *
19651
+ * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}
19652
+ * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`).
19653
+ * However, as we are using `$sce` the model can still decide to to provide unsafe content if it marks
19654
+ * that content using the `$sce` service.
19655
+ *
19656
+ * <example name="NgModelController" module="customControl" deps="angular-sanitize.js">
19657
+ <file name="style.css">
19658
+ [contenteditable] {
19659
+ border: 1px solid black;
19660
+ background-color: white;
19661
+ min-height: 20px;
19662
+ }
19663
+
19664
+ .ng-invalid {
19665
+ border: 1px solid red;
19666
+ }
19667
+
19668
+ </file>
19669
+ <file name="script.js">
19670
+ angular.module('customControl', ['ngSanitize']).
19671
+ directive('contenteditable', ['$sce', function($sce) {
19672
+ return {
19673
+ restrict: 'A', // only activate on element attribute
19674
+ require: '?ngModel', // get a hold of NgModelController
19675
+ link: function(scope, element, attrs, ngModel) {
19676
+ if (!ngModel) return; // do nothing if no ng-model
19677
+
19678
+ // Specify how UI should be updated
19679
+ ngModel.$render = function() {
19680
+ element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
19681
+ };
19682
+
19683
+ // Listen for change events to enable binding
19684
+ element.on('blur keyup change', function() {
19685
+ scope.$apply(read);
19686
+ });
19687
+ read(); // initialize
19688
+
19689
+ // Write data to the model
19690
+ function read() {
19691
+ var html = element.html();
19692
+ // When we clear the content editable the browser leaves a <br> behind
19693
+ // If strip-br attribute is provided then we strip this out
19694
+ if ( attrs.stripBr && html == '<br>' ) {
19695
+ html = '';
19696
+ }
19697
+ ngModel.$setViewValue(html);
19698
+ }
19699
+ }
19700
+ };
19701
+ }]);
19702
+ </file>
19703
+ <file name="index.html">
19704
+ <form name="myForm">
19705
+ <div contenteditable
19706
+ name="myWidget" ng-model="userContent"
19707
+ strip-br="true"
19708
+ required>Change me!</div>
19709
+ <span ng-show="myForm.myWidget.$error.required">Required!</span>
19710
+ <hr>
19711
+ <textarea ng-model="userContent"></textarea>
19712
+ </form>
19713
+ </file>
19714
+ <file name="protractor.js" type="protractor">
19715
+ it('should data-bind and become invalid', function() {
19716
+ if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {
19717
+ // SafariDriver can't handle contenteditable
19718
+ // and Firefox driver can't clear contenteditables very well
19719
+ return;
19720
+ }
19721
+ var contentEditable = element(by.css('[contenteditable]'));
19722
+ var content = 'Change me!';
19723
+
19724
+ expect(contentEditable.getText()).toEqual(content);
19725
+
19726
+ contentEditable.clear();
19727
+ contentEditable.sendKeys(protractor.Key.BACK_SPACE);
19728
+ expect(contentEditable.getText()).toEqual('');
19729
+ expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);
19730
+ });
19731
+ </file>
19732
+ * </example>
19733
+ *
19734
+ *
19735
+ */
19736
+var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',
19737
+ function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
19738
+ this.$viewValue = Number.NaN;
19739
+ this.$modelValue = Number.NaN;
19740
+ this.$validators = {};
19741
+ this.$asyncValidators = {};
19742
+ this.$parsers = [];
19743
+ this.$formatters = [];
19744
+ this.$viewChangeListeners = [];
19745
+ this.$untouched = true;
19746
+ this.$touched = false;
19747
+ this.$pristine = true;
19748
+ this.$dirty = false;
19749
+ this.$valid = true;
19750
+ this.$invalid = false;
19751
+ this.$error = {}; // keep invalid keys here
19752
+ this.$$success = {}; // keep valid keys here
19753
+ this.$pending = undefined; // keep pending keys here
19754
+ this.$name = $interpolate($attr.name || '', false)($scope);
19755
+
19756
+
19757
+ var parsedNgModel = $parse($attr.ngModel),
19758
+ pendingDebounce = null,
19759
+ ctrl = this;
19760
+
19761
+ var ngModelGet = function ngModelGet() {
19762
+ var modelValue = parsedNgModel($scope);
19763
+ if (ctrl.$options && ctrl.$options.getterSetter && isFunction(modelValue)) {
19764
+ modelValue = modelValue();
19765
+ }
19766
+ return modelValue;
19767
+ };
19768
+
19769
+ var ngModelSet = function ngModelSet(newValue) {
19770
+ var getterSetter;
19771
+ if (ctrl.$options && ctrl.$options.getterSetter &&
19772
+ isFunction(getterSetter = parsedNgModel($scope))) {
19773
+
19774
+ getterSetter(ctrl.$modelValue);
19775
+ } else {
19776
+ parsedNgModel.assign($scope, ctrl.$modelValue);
19777
+ }
19778
+ };
19779
+
19780
+ this.$$setOptions = function(options) {
19781
+ ctrl.$options = options;
19782
+
19783
+ if (!parsedNgModel.assign && (!options || !options.getterSetter)) {
19784
+ throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
19785
+ $attr.ngModel, startingTag($element));
19786
+ }
19787
+ };
19788
+
19789
+ /**
19790
+ * @ngdoc method
19791
+ * @name ngModel.NgModelController#$render
19792
+ *
19793
+ * @description
19794
+ * Called when the view needs to be updated. It is expected that the user of the ng-model
19795
+ * directive will implement this method.
19796
+ *
19797
+ * The `$render()` method is invoked in the following situations:
19798
+ *
19799
+ * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last
19800
+ * committed value then `$render()` is called to update the input control.
19801
+ * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and
19802
+ * the `$viewValue` are different to last time.
19803
+ *
19804
+ * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of
19805
+ * `$modelValue` and `$viewValue` are actually different to their previous value. If `$modelValue`
19806
+ * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be
19807
+ * invoked if you only change a property on the objects.
19808
+ */
19809
+ this.$render = noop;
19810
+
19811
+ /**
19812
+ * @ngdoc method
19813
+ * @name ngModel.NgModelController#$isEmpty
19814
+ *
19815
+ * @description
19816
+ * This is called when we need to determine if the value of the input is empty.
19817
+ *
19818
+ * For instance, the required directive does this to work out if the input has data or not.
19819
+ * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.
19820
+ *
19821
+ * You can override this for input directives whose concept of being empty is different to the
19822
+ * default. The `checkboxInputType` directive does this because in its case a value of `false`
19823
+ * implies empty.
19824
+ *
19825
+ * @param {*} value Model value to check.
19826
+ * @returns {boolean} True if `value` is empty.
19827
+ */
19828
+ this.$isEmpty = function(value) {
19829
+ return isUndefined(value) || value === '' || value === null || value !== value;
19830
+ };
19831
+
19832
+ var parentForm = $element.inheritedData('$formController') || nullFormCtrl,
19833
+ currentValidationRunId = 0;
19834
+
19835
+ /**
19836
+ * @ngdoc method
19837
+ * @name ngModel.NgModelController#$setValidity
19838
+ *
19839
+ * @description
19840
+ * Change the validity state, and notifies the form.
19841
+ *
19842
+ * This method can be called within $parsers/$formatters. However, if possible, please use the
19843
+ * `ngModel.$validators` pipeline which is designed to call this method automatically.
19844
+ *
19845
+ * @param {string} validationErrorKey Name of the validator. the `validationErrorKey` will assign
19846
+ * to `$error[validationErrorKey]` and `$pending[validationErrorKey]`
19847
+ * so that it is available for data-binding.
19848
+ * The `validationErrorKey` should be in camelCase and will get converted into dash-case
19849
+ * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
19850
+ * class and can be bound to as `{{someForm.someControl.$error.myError}}` .
19851
+ * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
19852
+ * or skipped (null).
19853
+ */
19854
+ addSetValidityMethod({
19855
+ ctrl: this,
19856
+ $element: $element,
19857
+ set: function(object, property) {
19858
+ object[property] = true;
19859
+ },
19860
+ unset: function(object, property) {
19861
+ delete object[property];
19862
+ },
19863
+ parentForm: parentForm,
19864
+ $animate: $animate
19865
+ });
19866
+
19867
+ /**
19868
+ * @ngdoc method
19869
+ * @name ngModel.NgModelController#$setPristine
19870
+ *
19871
+ * @description
19872
+ * Sets the control to its pristine state.
19873
+ *
19874
+ * This method can be called to remove the 'ng-dirty' class and set the control to its pristine
19875
+ * state (ng-pristine class). A model is considered to be pristine when the model has not been changed
19876
+ * from when first compiled within then form.
19877
+ */
19878
+ this.$setPristine = function () {
19879
+ ctrl.$dirty = false;
19880
+ ctrl.$pristine = true;
19881
+ $animate.removeClass($element, DIRTY_CLASS);
19882
+ $animate.addClass($element, PRISTINE_CLASS);
19883
+ };
19884
+
19885
+ /**
19886
+ * @ngdoc method
19887
+ * @name ngModel.NgModelController#$setUntouched
19888
+ *
19889
+ * @description
19890
+ * Sets the control to its untouched state.
19891
+ *
19892
+ * This method can be called to remove the 'ng-touched' class and set the control to its
19893
+ * untouched state (ng-untouched class). Upon compilation, a model is set as untouched
19894
+ * by default, however this function can be used to restore that state if the model has
19895
+ * already been touched by the user.
19896
+ */
19897
+ this.$setUntouched = function() {
19898
+ ctrl.$touched = false;
19899
+ ctrl.$untouched = true;
19900
+ $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);
19901
+ };
19902
+
19903
+ /**
19904
+ * @ngdoc method
19905
+ * @name ngModel.NgModelController#$setTouched
19906
+ *
19907
+ * @description
19908
+ * Sets the control to its touched state.
19909
+ *
19910
+ * This method can be called to remove the 'ng-untouched' class and set the control to its
19911
+ * touched state (ng-touched class). A model is considered to be touched when the user has
19912
+ * first interacted (focussed) on the model input element and then shifted focus away (blurred)
19913
+ * from the input element.
19914
+ */
19915
+ this.$setTouched = function() {
19916
+ ctrl.$touched = true;
19917
+ ctrl.$untouched = false;
19918
+ $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);
19919
+ };
19920
+
19921
+ /**
19922
+ * @ngdoc method
19923
+ * @name ngModel.NgModelController#$rollbackViewValue
19924
+ *
19925
+ * @description
19926
+ * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,
19927
+ * which may be caused by a pending debounced event or because the input is waiting for a some
19928
+ * future event.
19929
+ *
19930
+ * If you have an input that uses `ng-model-options` to set up debounced events or events such
19931
+ * as blur you can have a situation where there is a period when the `$viewValue`
19932
+ * is out of synch with the ngModel's `$modelValue`.
19933
+ *
19934
+ * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue`
19935
+ * programmatically before these debounced/future events have resolved/occurred, because Angular's
19936
+ * dirty checking mechanism is not able to tell whether the model has actually changed or not.
19937
+ *
19938
+ * The `$rollbackViewValue()` method should be called before programmatically changing the model of an
19939
+ * input which may have such events pending. This is important in order to make sure that the
19940
+ * input field will be updated with the new model value and any pending operations are cancelled.
19941
+ *
19942
+ * <example name="ng-model-cancel-update" module="cancel-update-example">
19943
+ * <file name="app.js">
19944
+ * angular.module('cancel-update-example', [])
19945
+ *
19946
+ * .controller('CancelUpdateController', ['$scope', function($scope) {
19947
+ * $scope.resetWithCancel = function (e) {
19948
+ * if (e.keyCode == 27) {
19949
+ * $scope.myForm.myInput1.$rollbackViewValue();
19950
+ * $scope.myValue = '';
19951
+ * }
19952
+ * };
19953
+ * $scope.resetWithoutCancel = function (e) {
19954
+ * if (e.keyCode == 27) {
19955
+ * $scope.myValue = '';
19956
+ * }
19957
+ * };
19958
+ * }]);
19959
+ * </file>
19960
+ * <file name="index.html">
19961
+ * <div ng-controller="CancelUpdateController">
19962
+ * <p>Try typing something in each input. See that the model only updates when you
19963
+ * blur off the input.
19964
+ * </p>
19965
+ * <p>Now see what happens if you start typing then press the Escape key</p>
19966
+ *
19967
+ * <form name="myForm" ng-model-options="{ updateOn: 'blur' }">
19968
+ * <p>With $rollbackViewValue()</p>
19969
+ * <input name="myInput1" ng-model="myValue" ng-keydown="resetWithCancel($event)"><br/>
19970
+ * myValue: "{{ myValue }}"
19971
+ *
19972
+ * <p>Without $rollbackViewValue()</p>
19973
+ * <input name="myInput2" ng-model="myValue" ng-keydown="resetWithoutCancel($event)"><br/>
19974
+ * myValue: "{{ myValue }}"
19975
+ * </form>
19976
+ * </div>
19977
+ * </file>
19978
+ * </example>
19979
+ */
19980
+ this.$rollbackViewValue = function() {
19981
+ $timeout.cancel(pendingDebounce);
19982
+ ctrl.$viewValue = ctrl.$$lastCommittedViewValue;
19983
+ ctrl.$render();
19984
+ };
19985
+
19986
+ /**
19987
+ * @ngdoc method
19988
+ * @name ngModel.NgModelController#$validate
19989
+ *
19990
+ * @description
19991
+ * Runs each of the registered validators (first synchronous validators and then asynchronous validators).
19992
+ */
19993
+ this.$validate = function() {
19994
+ // ignore $validate before model is initialized
19995
+ if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
19996
+ return;
19997
+ }
19998
+ this.$$parseAndValidate();
19999
+ };
20000
+
20001
+ this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) {
20002
+ currentValidationRunId++;
20003
+ var localValidationRunId = currentValidationRunId;
20004
+
20005
+ // check parser error
20006
+ if (!processParseErrors(parseValid)) {
20007
+ validationDone(false);
20008
+ return;
20009
+ }
20010
+ if (!processSyncValidators()) {
20011
+ validationDone(false);
20012
+ return;
20013
+ }
20014
+ processAsyncValidators();
20015
+
20016
+ function processParseErrors(parseValid) {
20017
+ var errorKey = ctrl.$$parserName || 'parse';
20018
+ if (parseValid === undefined) {
20019
+ setValidity(errorKey, null);
20020
+ } else {
20021
+ setValidity(errorKey, parseValid);
20022
+ if (!parseValid) {
20023
+ forEach(ctrl.$validators, function(v, name) {
20024
+ setValidity(name, null);
20025
+ });
20026
+ forEach(ctrl.$asyncValidators, function(v, name) {
20027
+ setValidity(name, null);
20028
+ });
20029
+ return false;
20030
+ }
20031
+ }
20032
+ return true;
20033
+ }
20034
+
20035
+ function processSyncValidators() {
20036
+ var syncValidatorsValid = true;
20037
+ forEach(ctrl.$validators, function(validator, name) {
20038
+ var result = validator(modelValue, viewValue);
20039
+ syncValidatorsValid = syncValidatorsValid && result;
20040
+ setValidity(name, result);
20041
+ });
20042
+ if (!syncValidatorsValid) {
20043
+ forEach(ctrl.$asyncValidators, function(v, name) {
20044
+ setValidity(name, null);
20045
+ });
20046
+ return false;
20047
+ }
20048
+ return true;
20049
+ }
20050
+
20051
+ function processAsyncValidators() {
20052
+ var validatorPromises = [];
20053
+ var allValid = true;
20054
+ forEach(ctrl.$asyncValidators, function(validator, name) {
20055
+ var promise = validator(modelValue, viewValue);
20056
+ if (!isPromiseLike(promise)) {
20057
+ throw $ngModelMinErr("$asyncValidators",
20058
+ "Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
20059
+ }
20060
+ setValidity(name, undefined);
20061
+ validatorPromises.push(promise.then(function() {
20062
+ setValidity(name, true);
20063
+ }, function(error) {
20064
+ allValid = false;
20065
+ setValidity(name, false);
20066
+ }));
20067
+ });
20068
+ if (!validatorPromises.length) {
20069
+ validationDone(true);
20070
+ } else {
20071
+ $q.all(validatorPromises).then(function() {
20072
+ validationDone(allValid);
20073
+ }, noop);
20074
+ }
20075
+ }
20076
+
20077
+ function setValidity(name, isValid) {
20078
+ if (localValidationRunId === currentValidationRunId) {
20079
+ ctrl.$setValidity(name, isValid);
20080
+ }
20081
+ }
20082
+
20083
+ function validationDone(allValid) {
20084
+ if (localValidationRunId === currentValidationRunId) {
20085
+
20086
+ doneCallback(allValid);
20087
+ }
20088
+ }
20089
+ };
20090
+
20091
+ /**
20092
+ * @ngdoc method
20093
+ * @name ngModel.NgModelController#$commitViewValue
20094
+ *
20095
+ * @description
20096
+ * Commit a pending update to the `$modelValue`.
20097
+ *
20098
+ * Updates may be pending by a debounced event or because the input is waiting for a some future
20099
+ * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`
20100
+ * usually handles calling this in response to input events.
20101
+ */
20102
+ this.$commitViewValue = function() {
20103
+ var viewValue = ctrl.$viewValue;
20104
+
20105
+ $timeout.cancel(pendingDebounce);
20106
+
20107
+ // If the view value has not changed then we should just exit, except in the case where there is
20108
+ // a native validator on the element. In this case the validation state may have changed even though
20109
+ // the viewValue has stayed empty.
20110
+ if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {
20111
+ return;
20112
+ }
20113
+ ctrl.$$lastCommittedViewValue = viewValue;
20114
+
20115
+ // change to dirty
20116
+ if (ctrl.$pristine) {
20117
+ ctrl.$dirty = true;
20118
+ ctrl.$pristine = false;
20119
+ $animate.removeClass($element, PRISTINE_CLASS);
20120
+ $animate.addClass($element, DIRTY_CLASS);
20121
+ parentForm.$setDirty();
20122
+ }
20123
+ this.$$parseAndValidate();
20124
+ };
20125
+
20126
+ this.$$parseAndValidate = function() {
20127
+ var viewValue = ctrl.$$lastCommittedViewValue;
20128
+ var modelValue = viewValue;
20129
+ var parserValid = isUndefined(modelValue) ? undefined : true;
20130
+
20131
+ if (parserValid) {
20132
+ for(var i = 0; i < ctrl.$parsers.length; i++) {
20133
+ modelValue = ctrl.$parsers[i](modelValue);
20134
+ if (isUndefined(modelValue)) {
20135
+ parserValid = false;
20136
+ break;
20137
+ }
20138
+ }
20139
+ }
20140
+ if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
20141
+ // ctrl.$modelValue has not been touched yet...
20142
+ ctrl.$modelValue = ngModelGet();
20143
+ }
20144
+ var prevModelValue = ctrl.$modelValue;
20145
+ var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
20146
+ if (allowInvalid) {
20147
+ ctrl.$modelValue = modelValue;
20148
+ writeToModelIfNeeded();
20149
+ }
20150
+ ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {
20151
+ if (!allowInvalid) {
20152
+ // Note: Don't check ctrl.$valid here, as we could have
20153
+ // external validators (e.g. calculated on the server),
20154
+ // that just call $setValidity and need the model value
20155
+ // to calculate their validity.
20156
+ ctrl.$modelValue = allValid ? modelValue : undefined;
20157
+ writeToModelIfNeeded();
20158
+ }
20159
+ });
20160
+
20161
+ function writeToModelIfNeeded() {
20162
+ if (ctrl.$modelValue !== prevModelValue) {
20163
+ ctrl.$$writeModelToScope();
20164
+ }
20165
+ }
20166
+ };
20167
+
20168
+ this.$$writeModelToScope = function() {
20169
+ ngModelSet(ctrl.$modelValue);
20170
+ forEach(ctrl.$viewChangeListeners, function(listener) {
20171
+ try {
20172
+ listener();
20173
+ } catch(e) {
20174
+ $exceptionHandler(e);
20175
+ }
20176
+ });
20177
+ };
20178
+
20179
+ /**
20180
+ * @ngdoc method
20181
+ * @name ngModel.NgModelController#$setViewValue
20182
+ *
20183
+ * @description
20184
+ * Update the view value.
20185
+ *
20186
+ * This method should be called when an input directive want to change the view value; typically,
20187
+ * this is done from within a DOM event handler.
20188
+ *
20189
+ * For example {@link ng.directive:input input} calls it when the value of the input changes and
20190
+ * {@link ng.directive:select select} calls it when an option is selected.
20191
+ *
20192
+ * If the new `value` is an object (rather than a string or a number), we should make a copy of the
20193
+ * object before passing it to `$setViewValue`. This is because `ngModel` does not perform a deep
20194
+ * watch of objects, it only looks for a change of identity. If you only change the property of
20195
+ * the object then ngModel will not realise that the object has changed and will not invoke the
20196
+ * `$parsers` and `$validators` pipelines.
20197
+ *
20198
+ * For this reason, you should not change properties of the copy once it has been passed to
20199
+ * `$setViewValue`. Otherwise you may cause the model value on the scope to change incorrectly.
20200
+ *
20201
+ * When this method is called, the new `value` will be staged for committing through the `$parsers`
20202
+ * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged
20203
+ * value sent directly for processing, finally to be applied to `$modelValue` and then the
20204
+ * **expression** specified in the `ng-model` attribute.
20205
+ *
20206
+ * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called.
20207
+ *
20208
+ * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`
20209
+ * and the `default` trigger is not listed, all those actions will remain pending until one of the
20210
+ * `updateOn` events is triggered on the DOM element.
20211
+ * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}
20212
+ * directive is used with a custom debounce for this particular event.
20213
+ *
20214
+ * Note that calling this function does not trigger a `$digest`.
20215
+ *
20216
+ * @param {string} value Value from the view.
20217
+ * @param {string} trigger Event that triggered the update.
20218
+ */
20219
+ this.$setViewValue = function(value, trigger) {
20220
+ ctrl.$viewValue = value;
20221
+ if (!ctrl.$options || ctrl.$options.updateOnDefault) {
20222
+ ctrl.$$debounceViewValueCommit(trigger);
20223
+ }
20224
+ };
20225
+
20226
+ this.$$debounceViewValueCommit = function(trigger) {
20227
+ var debounceDelay = 0,
20228
+ options = ctrl.$options,
20229
+ debounce;
20230
+
20231
+ if (options && isDefined(options.debounce)) {
20232
+ debounce = options.debounce;
20233
+ if (isNumber(debounce)) {
20234
+ debounceDelay = debounce;
20235
+ } else if (isNumber(debounce[trigger])) {
20236
+ debounceDelay = debounce[trigger];
20237
+ } else if (isNumber(debounce['default'])) {
20238
+ debounceDelay = debounce['default'];
20239
+ }
20240
+ }
20241
+
20242
+ $timeout.cancel(pendingDebounce);
20243
+ if (debounceDelay) {
20244
+ pendingDebounce = $timeout(function() {
20245
+ ctrl.$commitViewValue();
20246
+ }, debounceDelay);
20247
+ } else if ($rootScope.$$phase) {
20248
+ ctrl.$commitViewValue();
20249
+ } else {
20250
+ $scope.$apply(function() {
20251
+ ctrl.$commitViewValue();
20252
+ });
20253
+ }
20254
+ };
20255
+
20256
+ // model -> value
20257
+ // Note: we cannot use a normal scope.$watch as we want to detect the following:
20258
+ // 1. scope value is 'a'
20259
+ // 2. user enters 'b'
20260
+ // 3. ng-change kicks in and reverts scope value to 'a'
20261
+ // -> scope value did not change since the last digest as
20262
+ // ng-change executes in apply phase
20263
+ // 4. view should be changed back to 'a'
20264
+ $scope.$watch(function ngModelWatch() {
20265
+ var modelValue = ngModelGet();
20266
+
20267
+ // if scope model value and ngModel value are out of sync
20268
+ // TODO(perf): why not move this to the action fn?
20269
+ if (modelValue !== ctrl.$modelValue) {
20270
+ ctrl.$modelValue = modelValue;
20271
+
20272
+ var formatters = ctrl.$formatters,
20273
+ idx = formatters.length;
20274
+
20275
+ var viewValue = modelValue;
20276
+ while(idx--) {
20277
+ viewValue = formatters[idx](viewValue);
20278
+ }
20279
+ if (ctrl.$viewValue !== viewValue) {
20280
+ ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
20281
+ ctrl.$render();
20282
+
20283
+ ctrl.$$runValidators(undefined, modelValue, viewValue, noop);
20284
+ }
20285
+ }
20286
+
20287
+ return modelValue;
20288
+ });
20289
+}];
20290
+
20291
+
20292
+/**
20293
+ * @ngdoc directive
20294
+ * @name ngModel
20295
+ *
20296
+ * @element input
20297
+ *
20298
+ * @description
20299
+ * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a
20300
+ * property on the scope using {@link ngModel.NgModelController NgModelController},
20301
+ * which is created and exposed by this directive.
20302
+ *
20303
+ * `ngModel` is responsible for:
20304
+ *
20305
+ * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`
20306
+ * require.
20307
+ * - Providing validation behavior (i.e. required, number, email, url).
20308
+ * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).
20309
+ * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.
20310
+ * - Registering the control with its parent {@link ng.directive:form form}.
20311
+ *
20312
+ * Note: `ngModel` will try to bind to the property given by evaluating the expression on the
20313
+ * current scope. If the property doesn't already exist on this scope, it will be created
20314
+ * implicitly and added to the scope.
20315
+ *
20316
+ * For best practices on using `ngModel`, see:
20317
+ *
20318
+ * - [https://github.com/angular/angular.js/wiki/Understanding-Scopes]
20319
+ *
20320
+ * For basic examples, how to use `ngModel`, see:
20321
+ *
20322
+ * - {@link ng.directive:input input}
20323
+ * - {@link input[text] text}
20324
+ * - {@link input[checkbox] checkbox}
20325
+ * - {@link input[radio] radio}
20326
+ * - {@link input[number] number}
20327
+ * - {@link input[email] email}
20328
+ * - {@link input[url] url}
20329
+ * - {@link input[date] date}
20330
+ * - {@link input[dateTimeLocal] dateTimeLocal}
20331
+ * - {@link input[time] time}
20332
+ * - {@link input[month] month}
20333
+ * - {@link input[week] week}
20334
+ * - {@link ng.directive:select select}
20335
+ * - {@link ng.directive:textarea textarea}
20336
+ *
20337
+ * # CSS classes
20338
+ * The following CSS classes are added and removed on the associated input/select/textarea element
20339
+ * depending on the validity of the model.
20340
+ *
20341
+ * - `ng-valid` is set if the model is valid.
20342
+ * - `ng-invalid` is set if the model is invalid.
20343
+ * - `ng-pristine` is set if the model is pristine.
20344
+ * - `ng-dirty` is set if the model is dirty.
20345
+ *
20346
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
20347
+ *
20348
+ * ## Animation Hooks
20349
+ *
20350
+ * Animations within models are triggered when any of the associated CSS classes are added and removed
20351
+ * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,
20352
+ * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.
20353
+ * The animations that are triggered within ngModel are similar to how they work in ngClass and
20354
+ * animations can be hooked into using CSS transitions, keyframes as well as JS animations.
20355
+ *
20356
+ * The following example shows a simple way to utilize CSS transitions to style an input element
20357
+ * that has been rendered as invalid after it has been validated:
20358
+ *
20359
+ * <pre>
20360
+ * //be sure to include ngAnimate as a module to hook into more
20361
+ * //advanced animations
20362
+ * .my-input {
20363
+ * transition:0.5s linear all;
20364
+ * background: white;
20365
+ * }
20366
+ * .my-input.ng-invalid {
20367
+ * background: red;
20368
+ * color:white;
20369
+ * }
20370
+ * </pre>
20371
+ *
20372
+ * @example
20373
+ * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample">
20374
+ <file name="index.html">
20375
+ <script>
20376
+ angular.module('inputExample', [])
20377
+ .controller('ExampleController', ['$scope', function($scope) {
20378
+ $scope.val = '1';
20379
+ }]);
20380
+ </script>
20381
+ <style>
20382
+ .my-input {
20383
+ -webkit-transition:all linear 0.5s;
20384
+ transition:all linear 0.5s;
20385
+ background: transparent;
20386
+ }
20387
+ .my-input.ng-invalid {
20388
+ color:white;
20389
+ background: red;
20390
+ }
20391
+ </style>
20392
+ Update input to see transitions when valid/invalid.
20393
+ Integer is a valid value.
20394
+ <form name="testForm" ng-controller="ExampleController">
20395
+ <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" />
20396
+ </form>
20397
+ </file>
20398
+ * </example>
20399
+ *
20400
+ * ## Binding to a getter/setter
20401
+ *
20402
+ * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a
20403
+ * function that returns a representation of the model when called with zero arguments, and sets
20404
+ * the internal state of a model when called with an argument. It's sometimes useful to use this
20405
+ * for models that have an internal representation that's different than what the model exposes
20406
+ * to the view.
20407
+ *
20408
+ * <div class="alert alert-success">
20409
+ * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more
20410
+ * frequently than other parts of your code.
20411
+ * </div>
20412
+ *
20413
+ * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that
20414
+ * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to
20415
+ * a `<form>`, which will enable this behavior for all `<input>`s within it. See
20416
+ * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.
20417
+ *
20418
+ * The following example shows how to use `ngModel` with a getter/setter:
20419
+ *
20420
+ * @example
20421
+ * <example name="ngModel-getter-setter" module="getterSetterExample">
20422
+ <file name="index.html">
20423
+ <div ng-controller="ExampleController">
20424
+ <form name="userForm">
20425
+ Name:
20426
+ <input type="text" name="userName"
20427
+ ng-model="user.name"
20428
+ ng-model-options="{ getterSetter: true }" />
20429
+ </form>
20430
+ <pre>user.name = <span ng-bind="user.name()"></span></pre>
20431
+ </div>
20432
+ </file>
20433
+ <file name="app.js">
20434
+ angular.module('getterSetterExample', [])
20435
+ .controller('ExampleController', ['$scope', function($scope) {
20436
+ var _name = 'Brian';
20437
+ $scope.user = {
20438
+ name: function (newName) {
20439
+ if (angular.isDefined(newName)) {
20440
+ _name = newName;
20441
+ }
20442
+ return _name;
20443
+ }
20444
+ };
20445
+ }]);
20446
+ </file>
20447
+ * </example>
20448
+ */
20449
+var ngModelDirective = function() {
20450
+ return {
20451
+ restrict: 'A',
20452
+ require: ['ngModel', '^?form', '^?ngModelOptions'],
20453
+ controller: NgModelController,
20454
+ // Prelink needs to run before any input directive
20455
+ // so that we can set the NgModelOptions in NgModelController
20456
+ // before anyone else uses it.
20457
+ priority: 1,
20458
+ compile: function ngModelCompile(element) {
20459
+ // Setup initial state of the control
20460
+ element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);
20461
+
20462
+ return {
20463
+ pre: function ngModelPreLink(scope, element, attr, ctrls) {
20464
+ var modelCtrl = ctrls[0],
20465
+ formCtrl = ctrls[1] || nullFormCtrl;
20466
+
20467
+ modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
20468
+
20469
+ // notify others, especially parent forms
20470
+ formCtrl.$addControl(modelCtrl);
20471
+
20472
+ attr.$observe('name', function(newValue) {
20473
+ if (modelCtrl.$name !== newValue) {
20474
+ formCtrl.$$renameControl(modelCtrl, newValue);
20475
+ }
20476
+ });
20477
+
20478
+ scope.$on('$destroy', function() {
20479
+ formCtrl.$removeControl(modelCtrl);
20480
+ });
20481
+ },
20482
+ post: function ngModelPostLink(scope, element, attr, ctrls) {
20483
+ var modelCtrl = ctrls[0];
20484
+ if (modelCtrl.$options && modelCtrl.$options.updateOn) {
20485
+ element.on(modelCtrl.$options.updateOn, function(ev) {
20486
+ modelCtrl.$$debounceViewValueCommit(ev && ev.type);
20487
+ });
20488
+ }
20489
+
20490
+ element.on('blur', function(ev) {
20491
+ if (modelCtrl.$touched) return;
20492
+
20493
+ scope.$apply(function() {
20494
+ modelCtrl.$setTouched();
20495
+ });
20496
+ });
20497
+ }
20498
+ };
20499
+ }
20500
+ };
20501
+};
20502
+
20503
+
20504
+/**
20505
+ * @ngdoc directive
20506
+ * @name ngChange
20507
+ *
20508
+ * @description
20509
+ * Evaluate the given expression when the user changes the input.
20510
+ * The expression is evaluated immediately, unlike the JavaScript onchange event
20511
+ * which only triggers at the end of a change (usually, when the user leaves the
20512
+ * form element or presses the return key).
20513
+ *
20514
+ * The `ngChange` expression is only evaluated when a change in the input value causes
20515
+ * a new value to be committed to the model.
20516
+ *
20517
+ * It will not be evaluated:
20518
+ * * if the value returned from the `$parsers` transformation pipeline has not changed
20519
+ * * if the input has continued to be invalid since the model will stay `null`
20520
+ * * if the model is changed programmatically and not by a change to the input value
20521
+ *
20522
+ *
20523
+ * Note, this directive requires `ngModel` to be present.
20524
+ *
20525
+ * @element input
20526
+ * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change
20527
+ * in input value.
20528
+ *
20529
+ * @example
20530
+ * <example name="ngChange-directive" module="changeExample">
20531
+ * <file name="index.html">
20532
+ * <script>
20533
+ * angular.module('changeExample', [])
20534
+ * .controller('ExampleController', ['$scope', function($scope) {
20535
+ * $scope.counter = 0;
20536
+ * $scope.change = function() {
20537
+ * $scope.counter++;
20538
+ * };
20539
+ * }]);
20540
+ * </script>
20541
+ * <div ng-controller="ExampleController">
20542
+ * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
20543
+ * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
20544
+ * <label for="ng-change-example2">Confirmed</label><br />
20545
+ * <tt>debug = {{confirmed}}</tt><br/>
20546
+ * <tt>counter = {{counter}}</tt><br/>
20547
+ * </div>
20548
+ * </file>
20549
+ * <file name="protractor.js" type="protractor">
20550
+ * var counter = element(by.binding('counter'));
20551
+ * var debug = element(by.binding('confirmed'));
20552
+ *
20553
+ * it('should evaluate the expression if changing from view', function() {
20554
+ * expect(counter.getText()).toContain('0');
20555
+ *
20556
+ * element(by.id('ng-change-example1')).click();
20557
+ *
20558
+ * expect(counter.getText()).toContain('1');
20559
+ * expect(debug.getText()).toContain('true');
20560
+ * });
20561
+ *
20562
+ * it('should not evaluate the expression if changing from model', function() {
20563
+ * element(by.id('ng-change-example2')).click();
20564
+
20565
+ * expect(counter.getText()).toContain('0');
20566
+ * expect(debug.getText()).toContain('true');
20567
+ * });
20568
+ * </file>
20569
+ * </example>
20570
+ */
20571
+var ngChangeDirective = valueFn({
20572
+ restrict: 'A',
20573
+ require: 'ngModel',
20574
+ link: function(scope, element, attr, ctrl) {
20575
+ ctrl.$viewChangeListeners.push(function() {
20576
+ scope.$eval(attr.ngChange);
20577
+ });
20578
+ }
20579
+});
20580
+
20581
+
20582
+var requiredDirective = function() {
20583
+ return {
20584
+ restrict: 'A',
20585
+ require: '?ngModel',
20586
+ link: function(scope, elm, attr, ctrl) {
20587
+ if (!ctrl) return;
20588
+ attr.required = true; // force truthy in case we are on non input element
20589
+
20590
+ ctrl.$validators.required = function(value) {
20591
+ return !attr.required || !ctrl.$isEmpty(value);
20592
+ };
20593
+
20594
+ attr.$observe('required', function() {
20595
+ ctrl.$validate();
20596
+ });
20597
+ }
20598
+ };
20599
+};
20600
+
20601
+
20602
+var patternDirective = function() {
20603
+ return {
20604
+ restrict: 'A',
20605
+ require: '?ngModel',
20606
+ link: function(scope, elm, attr, ctrl) {
20607
+ if (!ctrl) return;
20608
+
20609
+ var regexp, patternExp = attr.ngPattern || attr.pattern;
20610
+ attr.$observe('pattern', function(regex) {
20611
+ if (isString(regex) && regex.length > 0) {
20612
+ regex = new RegExp(regex);
20613
+ }
20614
+
20615
+ if (regex && !regex.test) {
20616
+ throw minErr('ngPattern')('noregexp',
20617
+ 'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,
20618
+ regex, startingTag(elm));
20619
+ }
20620
+
20621
+ regexp = regex || undefined;
20622
+ ctrl.$validate();
20623
+ });
20624
+
20625
+ ctrl.$validators.pattern = function(value) {
20626
+ return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value);
20627
+ };
20628
+ }
20629
+ };
20630
+};
20631
+
20632
+
20633
+var maxlengthDirective = function() {
20634
+ return {
20635
+ restrict: 'A',
20636
+ require: '?ngModel',
20637
+ link: function(scope, elm, attr, ctrl) {
20638
+ if (!ctrl) return;
20639
+
20640
+ var maxlength = 0;
20641
+ attr.$observe('maxlength', function(value) {
20642
+ maxlength = int(value) || 0;
20643
+ ctrl.$validate();
20644
+ });
20645
+ ctrl.$validators.maxlength = function(modelValue, viewValue) {
20646
+ return ctrl.$isEmpty(modelValue) || viewValue.length <= maxlength;
20647
+ };
20648
+ }
20649
+ };
20650
+};
20651
+
20652
+var minlengthDirective = function() {
20653
+ return {
20654
+ restrict: 'A',
20655
+ require: '?ngModel',
20656
+ link: function(scope, elm, attr, ctrl) {
20657
+ if (!ctrl) return;
20658
+
20659
+ var minlength = 0;
20660
+ attr.$observe('minlength', function(value) {
20661
+ minlength = int(value) || 0;
20662
+ ctrl.$validate();
20663
+ });
20664
+ ctrl.$validators.minlength = function(modelValue, viewValue) {
20665
+ return ctrl.$isEmpty(modelValue) || viewValue.length >= minlength;
20666
+ };
20667
+ }
20668
+ };
20669
+};
20670
+
20671
+
20672
+/**
20673
+ * @ngdoc directive
20674
+ * @name ngList
20675
+ *
20676
+ * @description
20677
+ * Text input that converts between a delimited string and an array of strings. The default
20678
+ * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom
20679
+ * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`.
20680
+ *
20681
+ * The behaviour of the directive is affected by the use of the `ngTrim` attribute.
20682
+ * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each
20683
+ * list item is respected. This implies that the user of the directive is responsible for
20684
+ * dealing with whitespace but also allows you to use whitespace as a delimiter, such as a
20685
+ * tab or newline character.
20686
+ * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected
20687
+ * when joining the list items back together) and whitespace around each list item is stripped
20688
+ * before it is added to the model.
20689
+ *
20690
+ * ### Example with Validation
20691
+ *
20692
+ * <example name="ngList-directive" module="listExample">
20693
+ * <file name="app.js">
20694
+ * angular.module('listExample', [])
20695
+ * .controller('ExampleController', ['$scope', function($scope) {
20696
+ * $scope.names = ['morpheus', 'neo', 'trinity'];
20697
+ * }]);
20698
+ * </file>
20699
+ * <file name="index.html">
20700
+ * <form name="myForm" ng-controller="ExampleController">
20701
+ * List: <input name="namesInput" ng-model="names" ng-list required>
20702
+ * <span class="error" ng-show="myForm.namesInput.$error.required">
20703
+ * Required!</span>
20704
+ * <br>
20705
+ * <tt>names = {{names}}</tt><br/>
20706
+ * <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
20707
+ * <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
20708
+ * <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
20709
+ * <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
20710
+ * </form>
20711
+ * </file>
20712
+ * <file name="protractor.js" type="protractor">
20713
+ * var listInput = element(by.model('names'));
20714
+ * var names = element(by.exactBinding('names'));
20715
+ * var valid = element(by.binding('myForm.namesInput.$valid'));
20716
+ * var error = element(by.css('span.error'));
20717
+ *
20718
+ * it('should initialize to model', function() {
20719
+ * expect(names.getText()).toContain('["morpheus","neo","trinity"]');
20720
+ * expect(valid.getText()).toContain('true');
20721
+ * expect(error.getCssValue('display')).toBe('none');
20722
+ * });
20723
+ *
20724
+ * it('should be invalid if empty', function() {
20725
+ * listInput.clear();
20726
+ * listInput.sendKeys('');
20727
+ *
20728
+ * expect(names.getText()).toContain('');
20729
+ * expect(valid.getText()).toContain('false');
20730
+ * expect(error.getCssValue('display')).not.toBe('none');
20731
+ * });
20732
+ * </file>
20733
+ * </example>
20734
+ *
20735
+ * ### Example - splitting on whitespace
20736
+ * <example name="ngList-directive-newlines">
20737
+ * <file name="index.html">
20738
+ * <textarea ng-model="list" ng-list="&#10;" ng-trim="false"></textarea>
20739
+ * <pre>{{ list | json }}</pre>
20740
+ * </file>
20741
+ * <file name="protractor.js" type="protractor">
20742
+ * it("should split the text by newlines", function() {
20743
+ * var listInput = element(by.model('list'));
20744
+ * var output = element(by.binding('list | json'));
20745
+ * listInput.sendKeys('abc\ndef\nghi');
20746
+ * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]');
20747
+ * });
20748
+ * </file>
20749
+ * </example>
20750
+ *
20751
+ * @element input
20752
+ * @param {string=} ngList optional delimiter that should be used to split the value.
20753
+ */
20754
+var ngListDirective = function() {
20755
+ return {
20756
+ restrict: 'A',
20757
+ priority: 100,
20758
+ require: 'ngModel',
20759
+ link: function(scope, element, attr, ctrl) {
20760
+ // We want to control whitespace trimming so we use this convoluted approach
20761
+ // to access the ngList attribute, which doesn't pre-trim the attribute
20762
+ var ngList = element.attr(attr.$attr.ngList) || ', ';
20763
+ var trimValues = attr.ngTrim !== 'false';
20764
+ var separator = trimValues ? trim(ngList) : ngList;
20765
+
20766
+ var parse = function(viewValue) {
20767
+ // If the viewValue is invalid (say required but empty) it will be `undefined`
20768
+ if (isUndefined(viewValue)) return;
20769
+
20770
+ var list = [];
20771
+
20772
+ if (viewValue) {
20773
+ forEach(viewValue.split(separator), function(value) {
20774
+ if (value) list.push(trimValues ? trim(value) : value);
20775
+ });
20776
+ }
20777
+
20778
+ return list;
20779
+ };
20780
+
20781
+ ctrl.$parsers.push(parse);
20782
+ ctrl.$formatters.push(function(value) {
20783
+ if (isArray(value)) {
20784
+ return value.join(ngList);
20785
+ }
20786
+
20787
+ return undefined;
20788
+ });
20789
+
20790
+ // Override the standard $isEmpty because an empty array means the input is empty.
20791
+ ctrl.$isEmpty = function(value) {
20792
+ return !value || !value.length;
20793
+ };
20794
+ }
20795
+ };
20796
+};
20797
+
20798
+
20799
+var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
20800
+/**
20801
+ * @ngdoc directive
20802
+ * @name ngValue
20803
+ *
20804
+ * @description
20805
+ * Binds the given expression to the value of `input[select]` or `input[radio]`, so
20806
+ * that when the element is selected, the `ngModel` of that element is set to the
20807
+ * bound value.
20808
+ *
20809
+ * `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as
20810
+ * shown below.
20811
+ *
20812
+ * @element input
20813
+ * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
20814
+ * of the `input` element
20815
+ *
20816
+ * @example
20817
+ <example name="ngValue-directive" module="valueExample">
20818
+ <file name="index.html">
20819
+ <script>
20820
+ angular.module('valueExample', [])
20821
+ .controller('ExampleController', ['$scope', function($scope) {
20822
+ $scope.names = ['pizza', 'unicorns', 'robots'];
20823
+ $scope.my = { favorite: 'unicorns' };
20824
+ }]);
20825
+ </script>
20826
+ <form ng-controller="ExampleController">
20827
+ <h2>Which is your favorite?</h2>
20828
+ <label ng-repeat="name in names" for="{{name}}">
20829
+ {{name}}
20830
+ <input type="radio"
20831
+ ng-model="my.favorite"
20832
+ ng-value="name"
20833
+ id="{{name}}"
20834
+ name="favorite">
20835
+ </label>
20836
+ <div>You chose {{my.favorite}}</div>
20837
+ </form>
20838
+ </file>
20839
+ <file name="protractor.js" type="protractor">
20840
+ var favorite = element(by.binding('my.favorite'));
20841
+
20842
+ it('should initialize to model', function() {
20843
+ expect(favorite.getText()).toContain('unicorns');
20844
+ });
20845
+ it('should bind the values to the inputs', function() {
20846
+ element.all(by.model('my.favorite')).get(0).click();
20847
+ expect(favorite.getText()).toContain('pizza');
20848
+ });
20849
+ </file>
20850
+ </example>
20851
+ */
20852
+var ngValueDirective = function() {
20853
+ return {
20854
+ restrict: 'A',
20855
+ priority: 100,
20856
+ compile: function(tpl, tplAttr) {
20857
+ if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
20858
+ return function ngValueConstantLink(scope, elm, attr) {
20859
+ attr.$set('value', scope.$eval(attr.ngValue));
20860
+ };
20861
+ } else {
20862
+ return function ngValueLink(scope, elm, attr) {
20863
+ scope.$watch(attr.ngValue, function valueWatchAction(value) {
20864
+ attr.$set('value', value);
20865
+ });
20866
+ };
20867
+ }
20868
+ }
20869
+ };
20870
+};
20871
+
20872
+/**
20873
+ * @ngdoc directive
20874
+ * @name ngModelOptions
20875
+ *
20876
+ * @description
20877
+ * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of
20878
+ * events that will trigger a model update and/or a debouncing delay so that the actual update only
20879
+ * takes place when a timer expires; this timer will be reset after another change takes place.
20880
+ *
20881
+ * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might
20882
+ * be different than the value in the actual model. This means that if you update the model you
20883
+ * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in
20884
+ * order to make sure it is synchronized with the model and that any debounced action is canceled.
20885
+ *
20886
+ * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}
20887
+ * method is by making sure the input is placed inside a form that has a `name` attribute. This is
20888
+ * important because `form` controllers are published to the related scope under the name in their
20889
+ * `name` attribute.
20890
+ *
20891
+ * Any pending changes will take place immediately when an enclosing form is submitted via the
20892
+ * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
20893
+ * to have access to the updated model.
20894
+ *
20895
+ * `ngModelOptions` has an effect on the element it's declared on and its descendants.
20896
+ *
20897
+ * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:
20898
+ * - `updateOn`: string specifying which event should be the input bound to. You can set several
20899
+ * events using an space delimited list. There is a special event called `default` that
20900
+ * matches the default events belonging of the control.
20901
+ * - `debounce`: integer value which contains the debounce model update value in milliseconds. A
20902
+ * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a
20903
+ * custom value for each event. For example:
20904
+ * `ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"`
20905
+ * - `allowInvalid`: boolean value which indicates that the model can be set with values that did
20906
+ * not validate correctly instead of the default behavior of setting the model to undefined.
20907
+ * - `getterSetter`: boolean value which determines whether or not to treat functions bound to
20908
+ `ngModel` as getters/setters.
20909
+ * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for
20910
+ * `<input type="date">`, `<input type="time">`, ... . Right now, the only supported value is `'UTC'`,
20911
+ * otherwise the default timezone of the browser will be used.
20912
+ *
20913
+ * @example
20914
+
20915
+ The following example shows how to override immediate updates. Changes on the inputs within the
20916
+ form will update the model only when the control loses focus (blur event). If `escape` key is
20917
+ pressed while the input field is focused, the value is reset to the value in the current model.
20918
+
20919
+ <example name="ngModelOptions-directive-blur" module="optionsExample">
20920
+ <file name="index.html">
20921
+ <div ng-controller="ExampleController">
20922
+ <form name="userForm">
20923
+ Name:
20924
+ <input type="text" name="userName"
20925
+ ng-model="user.name"
20926
+ ng-model-options="{ updateOn: 'blur' }"
20927
+ ng-keyup="cancel($event)" /><br />
20928
+
20929
+ Other data:
20930
+ <input type="text" ng-model="user.data" /><br />
20931
+ </form>
20932
+ <pre>user.name = <span ng-bind="user.name"></span></pre>
20933
+ </div>
20934
+ </file>
20935
+ <file name="app.js">
20936
+ angular.module('optionsExample', [])
20937
+ .controller('ExampleController', ['$scope', function($scope) {
20938
+ $scope.user = { name: 'say', data: '' };
20939
+
20940
+ $scope.cancel = function (e) {
20941
+ if (e.keyCode == 27) {
20942
+ $scope.userForm.userName.$rollbackViewValue();
20943
+ }
20944
+ };
20945
+ }]);
20946
+ </file>
20947
+ <file name="protractor.js" type="protractor">
20948
+ var model = element(by.binding('user.name'));
20949
+ var input = element(by.model('user.name'));
20950
+ var other = element(by.model('user.data'));
20951
+
20952
+ it('should allow custom events', function() {
20953
+ input.sendKeys(' hello');
20954
+ input.click();
20955
+ expect(model.getText()).toEqual('say');
20956
+ other.click();
20957
+ expect(model.getText()).toEqual('say hello');
20958
+ });
20959
+
20960
+ it('should $rollbackViewValue when model changes', function() {
20961
+ input.sendKeys(' hello');
20962
+ expect(input.getAttribute('value')).toEqual('say hello');
20963
+ input.sendKeys(protractor.Key.ESCAPE);
20964
+ expect(input.getAttribute('value')).toEqual('say');
20965
+ other.click();
20966
+ expect(model.getText()).toEqual('say');
20967
+ });
20968
+ </file>
20969
+ </example>
20970
+
20971
+ This one shows how to debounce model changes. Model will be updated only 1 sec after last change.
20972
+ If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
20973
+
20974
+ <example name="ngModelOptions-directive-debounce" module="optionsExample">
20975
+ <file name="index.html">
20976
+ <div ng-controller="ExampleController">
20977
+ <form name="userForm">
20978
+ Name:
20979
+ <input type="text" name="userName"
20980
+ ng-model="user.name"
20981
+ ng-model-options="{ debounce: 1000 }" />
20982
+ <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br />
20983
+ </form>
20984
+ <pre>user.name = <span ng-bind="user.name"></span></pre>
20985
+ </div>
20986
+ </file>
20987
+ <file name="app.js">
20988
+ angular.module('optionsExample', [])
20989
+ .controller('ExampleController', ['$scope', function($scope) {
20990
+ $scope.user = { name: 'say' };
20991
+ }]);
20992
+ </file>
20993
+ </example>
20994
+
20995
+ This one shows how to bind to getter/setters:
20996
+
20997
+ <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
20998
+ <file name="index.html">
20999
+ <div ng-controller="ExampleController">
21000
+ <form name="userForm">
21001
+ Name:
21002
+ <input type="text" name="userName"
21003
+ ng-model="user.name"
21004
+ ng-model-options="{ getterSetter: true }" />
21005
+ </form>
21006
+ <pre>user.name = <span ng-bind="user.name()"></span></pre>
21007
+ </div>
21008
+ </file>
21009
+ <file name="app.js">
21010
+ angular.module('getterSetterExample', [])
21011
+ .controller('ExampleController', ['$scope', function($scope) {
21012
+ var _name = 'Brian';
21013
+ $scope.user = {
21014
+ name: function (newName) {
21015
+ return angular.isDefined(newName) ? (_name = newName) : _name;
21016
+ }
21017
+ };
21018
+ }]);
21019
+ </file>
21020
+ </example>
21021
+ */
21022
+var ngModelOptionsDirective = function() {
21023
+ return {
21024
+ restrict: 'A',
21025
+ controller: ['$scope', '$attrs', function($scope, $attrs) {
21026
+ var that = this;
21027
+ this.$options = $scope.$eval($attrs.ngModelOptions);
21028
+ // Allow adding/overriding bound events
21029
+ if (this.$options.updateOn !== undefined) {
21030
+ this.$options.updateOnDefault = false;
21031
+ // extract "default" pseudo-event from list of events that can trigger a model update
21032
+ this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {
21033
+ that.$options.updateOnDefault = true;
21034
+ return ' ';
21035
+ }));
21036
+ } else {
21037
+ this.$options.updateOnDefault = true;
21038
+ }
21039
+ }]
21040
+ };
21041
+};
21042
+
21043
+// helper methods
21044
+function addSetValidityMethod(context) {
21045
+ var ctrl = context.ctrl,
21046
+ $element = context.$element,
21047
+ classCache = {},
21048
+ set = context.set,
21049
+ unset = context.unset,
21050
+ parentForm = context.parentForm,
21051
+ $animate = context.$animate;
21052
+
21053
+ classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));
21054
+
21055
+ ctrl.$setValidity = setValidity;
21056
+
21057
+ function setValidity(validationErrorKey, state, options) {
21058
+ if (state === undefined) {
21059
+ createAndSet('$pending', validationErrorKey, options);
21060
+ } else {
21061
+ unsetAndCleanup('$pending', validationErrorKey, options);
21062
+ }
21063
+ if (!isBoolean(state)) {
21064
+ unset(ctrl.$error, validationErrorKey, options);
21065
+ unset(ctrl.$$success, validationErrorKey, options);
21066
+ } else {
21067
+ if (state) {
21068
+ unset(ctrl.$error, validationErrorKey, options);
21069
+ set(ctrl.$$success, validationErrorKey, options);
21070
+ } else {
21071
+ set(ctrl.$error, validationErrorKey, options);
21072
+ unset(ctrl.$$success, validationErrorKey, options);
21073
+ }
21074
+ }
21075
+ if (ctrl.$pending) {
21076
+ cachedToggleClass(PENDING_CLASS, true);
21077
+ ctrl.$valid = ctrl.$invalid = undefined;
21078
+ toggleValidationCss('', null);
21079
+ } else {
21080
+ cachedToggleClass(PENDING_CLASS, false);
21081
+ ctrl.$valid = isObjectEmpty(ctrl.$error);
21082
+ ctrl.$invalid = !ctrl.$valid;
21083
+ toggleValidationCss('', ctrl.$valid);
21084
+ }
21085
+
21086
+ // re-read the state as the set/unset methods could have
21087
+ // combined state in ctrl.$error[validationError] (used for forms),
21088
+ // where setting/unsetting only increments/decrements the value,
21089
+ // and does not replace it.
21090
+ var combinedState;
21091
+ if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {
21092
+ combinedState = undefined;
21093
+ } else if (ctrl.$error[validationErrorKey]) {
21094
+ combinedState = false;
21095
+ } else if (ctrl.$$success[validationErrorKey]) {
21096
+ combinedState = true;
21097
+ } else {
21098
+ combinedState = null;
21099
+ }
21100
+ toggleValidationCss(validationErrorKey, combinedState);
21101
+ parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
21102
+ }
21103
+
21104
+ function createAndSet(name, value, options) {
21105
+ if (!ctrl[name]) {
21106
+ ctrl[name] = {};
21107
+ }
21108
+ set(ctrl[name], value, options);
21109
+ }
21110
+
21111
+ function unsetAndCleanup(name, value, options) {
21112
+ if (ctrl[name]) {
21113
+ unset(ctrl[name], value, options);
21114
+ }
21115
+ if (isObjectEmpty(ctrl[name])) {
21116
+ ctrl[name] = undefined;
21117
+ }
21118
+ }
21119
+
21120
+ function cachedToggleClass(className, switchValue) {
21121
+ if (switchValue && !classCache[className]) {
21122
+ $animate.addClass($element, className);
21123
+ classCache[className] = true;
21124
+ } else if (!switchValue && classCache[className]) {
21125
+ $animate.removeClass($element, className);
21126
+ classCache[className] = false;
21127
+ }
21128
+ }
21129
+
21130
+ function toggleValidationCss(validationErrorKey, isValid) {
21131
+ validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
21132
+
21133
+ cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);
21134
+ cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);
21135
+ }
21136
+}
21137
+
21138
+function isObjectEmpty(obj) {
21139
+ if (obj) {
21140
+ for (var prop in obj) {
21141
+ return false;
21142
+ }
21143
+ }
21144
+ return true;
21145
+}
21146
+
21147
+/**
21148
+ * @ngdoc directive
21149
+ * @name ngBind
21150
+ * @restrict AC
21151
+ *
21152
+ * @description
21153
+ * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element
21154
+ * with the value of a given expression, and to update the text content when the value of that
21155
+ * expression changes.
21156
+ *
21157
+ * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
21158
+ * `{{ expression }}` which is similar but less verbose.
21159
+ *
21160
+ * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily
21161
+ * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
21162
+ * element attribute, it makes the bindings invisible to the user while the page is loading.
21163
+ *
21164
+ * An alternative solution to this problem would be using the
21165
+ * {@link ng.directive:ngCloak ngCloak} directive.
21166
+ *
21167
+ *
21168
+ * @element ANY
21169
+ * @param {expression} ngBind {@link guide/expression Expression} to evaluate.
21170
+ *
21171
+ * @example
21172
+ * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.
21173
+ <example module="bindExample">
21174
+ <file name="index.html">
21175
+ <script>
21176
+ angular.module('bindExample', [])
21177
+ .controller('ExampleController', ['$scope', function($scope) {
21178
+ $scope.name = 'Whirled';
21179
+ }]);
21180
+ </script>
21181
+ <div ng-controller="ExampleController">
21182
+ Enter name: <input type="text" ng-model="name"><br>
21183
+ Hello <span ng-bind="name"></span>!
21184
+ </div>
21185
+ </file>
21186
+ <file name="protractor.js" type="protractor">
21187
+ it('should check ng-bind', function() {
21188
+ var nameInput = element(by.model('name'));
21189
+
21190
+ expect(element(by.binding('name')).getText()).toBe('Whirled');
21191
+ nameInput.clear();
21192
+ nameInput.sendKeys('world');
21193
+ expect(element(by.binding('name')).getText()).toBe('world');
21194
+ });
21195
+ </file>
21196
+ </example>
21197
+ */
21198
+var ngBindDirective = ['$compile', function($compile) {
21199
+ return {
21200
+ restrict: 'AC',
21201
+ compile: function ngBindCompile(templateElement) {
21202
+ $compile.$$addBindingClass(templateElement);
21203
+ return function ngBindLink(scope, element, attr) {
21204
+ $compile.$$addBindingInfo(element, attr.ngBind);
21205
+ element = element[0];
21206
+ scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
21207
+ element.textContent = value === undefined ? '' : value;
21208
+ });
21209
+ };
21210
+ }
21211
+ };
21212
+}];
21213
+
21214
+
21215
+/**
21216
+ * @ngdoc directive
21217
+ * @name ngBindTemplate
21218
+ *
21219
+ * @description
21220
+ * The `ngBindTemplate` directive specifies that the element
21221
+ * text content should be replaced with the interpolation of the template
21222
+ * in the `ngBindTemplate` attribute.
21223
+ * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
21224
+ * expressions. This directive is needed since some HTML elements
21225
+ * (such as TITLE and OPTION) cannot contain SPAN elements.
21226
+ *
21227
+ * @element ANY
21228
+ * @param {string} ngBindTemplate template of form
21229
+ * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.
21230
+ *
21231
+ * @example
21232
+ * Try it here: enter text in text box and watch the greeting change.
21233
+ <example module="bindExample">
21234
+ <file name="index.html">
21235
+ <script>
21236
+ angular.module('bindExample', [])
21237
+ .controller('ExampleController', ['$scope', function ($scope) {
21238
+ $scope.salutation = 'Hello';
21239
+ $scope.name = 'World';
21240
+ }]);
21241
+ </script>
21242
+ <div ng-controller="ExampleController">
21243
+ Salutation: <input type="text" ng-model="salutation"><br>
21244
+ Name: <input type="text" ng-model="name"><br>
21245
+ <pre ng-bind-template="{{salutation}} {{name}}!"></pre>
21246
+ </div>
21247
+ </file>
21248
+ <file name="protractor.js" type="protractor">
21249
+ it('should check ng-bind', function() {
21250
+ var salutationElem = element(by.binding('salutation'));
21251
+ var salutationInput = element(by.model('salutation'));
21252
+ var nameInput = element(by.model('name'));
21253
+
21254
+ expect(salutationElem.getText()).toBe('Hello World!');
21255
+
21256
+ salutationInput.clear();
21257
+ salutationInput.sendKeys('Greetings');
21258
+ nameInput.clear();
21259
+ nameInput.sendKeys('user');
21260
+
21261
+ expect(salutationElem.getText()).toBe('Greetings user!');
21262
+ });
21263
+ </file>
21264
+ </example>
21265
+ */
21266
+var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {
21267
+ return {
21268
+ compile: function ngBindTemplateCompile(templateElement) {
21269
+ $compile.$$addBindingClass(templateElement);
21270
+ return function ngBindTemplateLink(scope, element, attr) {
21271
+ var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));
21272
+ $compile.$$addBindingInfo(element, interpolateFn.expressions);
21273
+ element = element[0];
21274
+ attr.$observe('ngBindTemplate', function(value) {
21275
+ element.textContent = value === undefined ? '' : value;
21276
+ });
21277
+ };
21278
+ }
21279
+ };
21280
+}];
21281
+
21282
+
21283
+/**
21284
+ * @ngdoc directive
21285
+ * @name ngBindHtml
21286
+ *
21287
+ * @description
21288
+ * Creates a binding that will innerHTML the result of evaluating the `expression` into the current
21289
+ * element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link
21290
+ * ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize`
21291
+ * is available, for example, by including {@link ngSanitize} in your module's dependencies (not in
21292
+ * core Angular). In order to use {@link ngSanitize} in your module's dependencies, you need to
21293
+ * include "angular-sanitize.js" in your application.
21294
+ *
21295
+ * You may also bypass sanitization for values you know are safe. To do so, bind to
21296
+ * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example
21297
+ * under {@link ng.$sce#Example Strict Contextual Escaping (SCE)}.
21298
+ *
21299
+ * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you
21300
+ * will have an exception (instead of an exploit.)
21301
+ *
21302
+ * @element ANY
21303
+ * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
21304
+ *
21305
+ * @example
21306
+
21307
+ <example module="bindHtmlExample" deps="angular-sanitize.js">
21308
+ <file name="index.html">
21309
+ <div ng-controller="ExampleController">
21310
+ <p ng-bind-html="myHTML"></p>
21311
+ </div>
21312
+ </file>
21313
+
21314
+ <file name="script.js">
21315
+ angular.module('bindHtmlExample', ['ngSanitize'])
21316
+ .controller('ExampleController', ['$scope', function($scope) {
21317
+ $scope.myHTML =
21318
+ 'I am an <code>HTML</code>string with ' +
21319
+ '<a href="#">links!</a> and other <em>stuff</em>';
21320
+ }]);
21321
+ </file>
21322
+
21323
+ <file name="protractor.js" type="protractor">
21324
+ it('should check ng-bind-html', function() {
21325
+ expect(element(by.binding('myHTML')).getText()).toBe(
21326
+ 'I am an HTMLstring with links! and other stuff');
21327
+ });
21328
+ </file>
21329
+ </example>
21330
+ */
21331
+var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {
21332
+ return {
21333
+ restrict: 'A',
21334
+ compile: function ngBindHtmlCompile(tElement, tAttrs) {
21335
+ var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
21336
+ var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
21337
+ return (value || '').toString();
21338
+ });
21339
+ $compile.$$addBindingClass(tElement);
21340
+
21341
+ return function ngBindHtmlLink(scope, element, attr) {
21342
+ $compile.$$addBindingInfo(element, attr.ngBindHtml);
21343
+
21344
+ scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
21345
+ // we re-evaluate the expr because we want a TrustedValueHolderType
21346
+ // for $sce, not a string
21347
+ element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
21348
+ });
21349
+ };
21350
+ }
21351
+ };
21352
+}];
21353
+
21354
+function classDirective(name, selector) {
21355
+ name = 'ngClass' + name;
21356
+ return ['$animate', function($animate) {
21357
+ return {
21358
+ restrict: 'AC',
21359
+ link: function(scope, element, attr) {
21360
+ var oldVal;
21361
+
21362
+ scope.$watch(attr[name], ngClassWatchAction, true);
21363
+
21364
+ attr.$observe('class', function(value) {
21365
+ ngClassWatchAction(scope.$eval(attr[name]));
21366
+ });
21367
+
21368
+
21369
+ if (name !== 'ngClass') {
21370
+ scope.$watch('$index', function($index, old$index) {
21371
+ // jshint bitwise: false
21372
+ var mod = $index & 1;
21373
+ if (mod !== (old$index & 1)) {
21374
+ var classes = arrayClasses(scope.$eval(attr[name]));
21375
+ mod === selector ?
21376
+ addClasses(classes) :
21377
+ removeClasses(classes);
21378
+ }
21379
+ });
21380
+ }
21381
+
21382
+ function addClasses(classes) {
21383
+ var newClasses = digestClassCounts(classes, 1);
21384
+ attr.$addClass(newClasses);
21385
+ }
21386
+
21387
+ function removeClasses(classes) {
21388
+ var newClasses = digestClassCounts(classes, -1);
21389
+ attr.$removeClass(newClasses);
21390
+ }
21391
+
21392
+ function digestClassCounts (classes, count) {
21393
+ var classCounts = element.data('$classCounts') || {};
21394
+ var classesToUpdate = [];
21395
+ forEach(classes, function (className) {
21396
+ if (count > 0 || classCounts[className]) {
21397
+ classCounts[className] = (classCounts[className] || 0) + count;
21398
+ if (classCounts[className] === +(count > 0)) {
21399
+ classesToUpdate.push(className);
21400
+ }
21401
+ }
21402
+ });
21403
+ element.data('$classCounts', classCounts);
21404
+ return classesToUpdate.join(' ');
21405
+ }
21406
+
21407
+ function updateClasses (oldClasses, newClasses) {
21408
+ var toAdd = arrayDifference(newClasses, oldClasses);
21409
+ var toRemove = arrayDifference(oldClasses, newClasses);
21410
+ toAdd = digestClassCounts(toAdd, 1);
21411
+ toRemove = digestClassCounts(toRemove, -1);
21412
+ if (toAdd && toAdd.length) {
21413
+ $animate.addClass(element, toAdd);
21414
+ }
21415
+ if (toRemove && toRemove.length) {
21416
+ $animate.removeClass(element, toRemove);
21417
+ }
21418
+ }
21419
+
21420
+ function ngClassWatchAction(newVal) {
21421
+ if (selector === true || scope.$index % 2 === selector) {
21422
+ var newClasses = arrayClasses(newVal || []);
21423
+ if (!oldVal) {
21424
+ addClasses(newClasses);
21425
+ } else if (!equals(newVal,oldVal)) {
21426
+ var oldClasses = arrayClasses(oldVal);
21427
+ updateClasses(oldClasses, newClasses);
21428
+ }
21429
+ }
21430
+ oldVal = shallowCopy(newVal);
21431
+ }
21432
+ }
21433
+ };
21434
+
21435
+ function arrayDifference(tokens1, tokens2) {
21436
+ var values = [];
21437
+
21438
+ outer:
21439
+ for(var i = 0; i < tokens1.length; i++) {
21440
+ var token = tokens1[i];
21441
+ for(var j = 0; j < tokens2.length; j++) {
21442
+ if(token == tokens2[j]) continue outer;
21443
+ }
21444
+ values.push(token);
21445
+ }
21446
+ return values;
21447
+ }
21448
+
21449
+ function arrayClasses (classVal) {
21450
+ if (isArray(classVal)) {
21451
+ return classVal;
21452
+ } else if (isString(classVal)) {
21453
+ return classVal.split(' ');
21454
+ } else if (isObject(classVal)) {
21455
+ var classes = [], i = 0;
21456
+ forEach(classVal, function(v, k) {
21457
+ if (v) {
21458
+ classes = classes.concat(k.split(' '));
21459
+ }
21460
+ });
21461
+ return classes;
21462
+ }
21463
+ return classVal;
21464
+ }
21465
+ }];
21466
+}
21467
+
21468
+/**
21469
+ * @ngdoc directive
21470
+ * @name ngClass
21471
+ * @restrict AC
21472
+ *
21473
+ * @description
21474
+ * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding
21475
+ * an expression that represents all classes to be added.
21476
+ *
21477
+ * The directive operates in three different ways, depending on which of three types the expression
21478
+ * evaluates to:
21479
+ *
21480
+ * 1. If the expression evaluates to a string, the string should be one or more space-delimited class
21481
+ * names.
21482
+ *
21483
+ * 2. If the expression evaluates to an array, each element of the array should be a string that is
21484
+ * one or more space-delimited class names.
21485
+ *
21486
+ * 3. If the expression evaluates to an object, then for each key-value pair of the
21487
+ * object with a truthy value the corresponding key is used as a class name.
21488
+ *
21489
+ * The directive won't add duplicate classes if a particular class was already set.
21490
+ *
21491
+ * When the expression changes, the previously added classes are removed and only then the
21492
+ * new classes are added.
21493
+ *
21494
+ * @animations
21495
+ * add - happens just before the class is applied to the element
21496
+ * remove - happens just before the class is removed from the element
21497
+ *
21498
+ * @element ANY
21499
+ * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
21500
+ * of the evaluation can be a string representing space delimited class
21501
+ * names, an array, or a map of class names to boolean values. In the case of a map, the
21502
+ * names of the properties whose values are truthy will be added as css classes to the
21503
+ * element.
21504
+ *
21505
+ * @example Example that demonstrates basic bindings via ngClass directive.
21506
+ <example>
21507
+ <file name="index.html">
21508
+ <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p>
21509
+ <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br>
21510
+ <input type="checkbox" ng-model="important"> important (apply "bold" class)<br>
21511
+ <input type="checkbox" ng-model="error"> error (apply "red" class)
21512
+ <hr>
21513
+ <p ng-class="style">Using String Syntax</p>
21514
+ <input type="text" ng-model="style" placeholder="Type: bold strike red">
21515
+ <hr>
21516
+ <p ng-class="[style1, style2, style3]">Using Array Syntax</p>
21517
+ <input ng-model="style1" placeholder="Type: bold, strike or red"><br>
21518
+ <input ng-model="style2" placeholder="Type: bold, strike or red"><br>
21519
+ <input ng-model="style3" placeholder="Type: bold, strike or red"><br>
21520
+ </file>
21521
+ <file name="style.css">
21522
+ .strike {
21523
+ text-decoration: line-through;
21524
+ }
21525
+ .bold {
21526
+ font-weight: bold;
21527
+ }
21528
+ .red {
21529
+ color: red;
21530
+ }
21531
+ </file>
21532
+ <file name="protractor.js" type="protractor">
21533
+ var ps = element.all(by.css('p'));
21534
+
21535
+ it('should let you toggle the class', function() {
21536
+
21537
+ expect(ps.first().getAttribute('class')).not.toMatch(/bold/);
21538
+ expect(ps.first().getAttribute('class')).not.toMatch(/red/);
21539
+
21540
+ element(by.model('important')).click();
21541
+ expect(ps.first().getAttribute('class')).toMatch(/bold/);
21542
+
21543
+ element(by.model('error')).click();
21544
+ expect(ps.first().getAttribute('class')).toMatch(/red/);
21545
+ });
21546
+
21547
+ it('should let you toggle string example', function() {
21548
+ expect(ps.get(1).getAttribute('class')).toBe('');
21549
+ element(by.model('style')).clear();
21550
+ element(by.model('style')).sendKeys('red');
21551
+ expect(ps.get(1).getAttribute('class')).toBe('red');
21552
+ });
21553
+
21554
+ it('array example should have 3 classes', function() {
21555
+ expect(ps.last().getAttribute('class')).toBe('');
21556
+ element(by.model('style1')).sendKeys('bold');
21557
+ element(by.model('style2')).sendKeys('strike');
21558
+ element(by.model('style3')).sendKeys('red');
21559
+ expect(ps.last().getAttribute('class')).toBe('bold strike red');
21560
+ });
21561
+ </file>
21562
+ </example>
21563
+
21564
+ ## Animations
21565
+
21566
+ The example below demonstrates how to perform animations using ngClass.
21567
+
21568
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
21569
+ <file name="index.html">
21570
+ <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'">
21571
+ <input id="clearbtn" type="button" value="clear" ng-click="myVar=''">
21572
+ <br>
21573
+ <span class="base-class" ng-class="myVar">Sample Text</span>
21574
+ </file>
21575
+ <file name="style.css">
21576
+ .base-class {
21577
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
21578
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
21579
+ }
21580
+
21581
+ .base-class.my-class {
21582
+ color: red;
21583
+ font-size:3em;
21584
+ }
21585
+ </file>
21586
+ <file name="protractor.js" type="protractor">
21587
+ it('should check ng-class', function() {
21588
+ expect(element(by.css('.base-class')).getAttribute('class')).not.
21589
+ toMatch(/my-class/);
21590
+
21591
+ element(by.id('setbtn')).click();
21592
+
21593
+ expect(element(by.css('.base-class')).getAttribute('class')).
21594
+ toMatch(/my-class/);
21595
+
21596
+ element(by.id('clearbtn')).click();
21597
+
21598
+ expect(element(by.css('.base-class')).getAttribute('class')).not.
21599
+ toMatch(/my-class/);
21600
+ });
21601
+ </file>
21602
+ </example>
21603
+
21604
+
21605
+ ## ngClass and pre-existing CSS3 Transitions/Animations
21606
+ The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
21607
+ Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder
21608
+ any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure
21609
+ to view the step by step details of {@link ngAnimate.$animate#addclass $animate.addClass} and
21610
+ {@link ngAnimate.$animate#removeclass $animate.removeClass}.
21611
+ */
21612
+var ngClassDirective = classDirective('', true);
21613
+
21614
+/**
21615
+ * @ngdoc directive
21616
+ * @name ngClassOdd
21617
+ * @restrict AC
21618
+ *
21619
+ * @description
21620
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
21621
+ * {@link ng.directive:ngClass ngClass}, except they work in
21622
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
21623
+ *
21624
+ * This directive can be applied only within the scope of an
21625
+ * {@link ng.directive:ngRepeat ngRepeat}.
21626
+ *
21627
+ * @element ANY
21628
+ * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result
21629
+ * of the evaluation can be a string representing space delimited class names or an array.
21630
+ *
21631
+ * @example
21632
+ <example>
21633
+ <file name="index.html">
21634
+ <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
21635
+ <li ng-repeat="name in names">
21636
+ <span ng-class-odd="'odd'" ng-class-even="'even'">
21637
+ {{name}}
21638
+ </span>
21639
+ </li>
21640
+ </ol>
21641
+ </file>
21642
+ <file name="style.css">
21643
+ .odd {
21644
+ color: red;
21645
+ }
21646
+ .even {
21647
+ color: blue;
21648
+ }
21649
+ </file>
21650
+ <file name="protractor.js" type="protractor">
21651
+ it('should check ng-class-odd and ng-class-even', function() {
21652
+ expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
21653
+ toMatch(/odd/);
21654
+ expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
21655
+ toMatch(/even/);
21656
+ });
21657
+ </file>
21658
+ </example>
21659
+ */
21660
+var ngClassOddDirective = classDirective('Odd', 0);
21661
+
21662
+/**
21663
+ * @ngdoc directive
21664
+ * @name ngClassEven
21665
+ * @restrict AC
21666
+ *
21667
+ * @description
21668
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
21669
+ * {@link ng.directive:ngClass ngClass}, except they work in
21670
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
21671
+ *
21672
+ * This directive can be applied only within the scope of an
21673
+ * {@link ng.directive:ngRepeat ngRepeat}.
21674
+ *
21675
+ * @element ANY
21676
+ * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The
21677
+ * result of the evaluation can be a string representing space delimited class names or an array.
21678
+ *
21679
+ * @example
21680
+ <example>
21681
+ <file name="index.html">
21682
+ <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
21683
+ <li ng-repeat="name in names">
21684
+ <span ng-class-odd="'odd'" ng-class-even="'even'">
21685
+ {{name}} &nbsp; &nbsp; &nbsp;
21686
+ </span>
21687
+ </li>
21688
+ </ol>
21689
+ </file>
21690
+ <file name="style.css">
21691
+ .odd {
21692
+ color: red;
21693
+ }
21694
+ .even {
21695
+ color: blue;
21696
+ }
21697
+ </file>
21698
+ <file name="protractor.js" type="protractor">
21699
+ it('should check ng-class-odd and ng-class-even', function() {
21700
+ expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
21701
+ toMatch(/odd/);
21702
+ expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
21703
+ toMatch(/even/);
21704
+ });
21705
+ </file>
21706
+ </example>
21707
+ */
21708
+var ngClassEvenDirective = classDirective('Even', 1);
21709
+
21710
+/**
21711
+ * @ngdoc directive
21712
+ * @name ngCloak
21713
+ * @restrict AC
21714
+ *
21715
+ * @description
21716
+ * The `ngCloak` directive is used to prevent the Angular html template from being briefly
21717
+ * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this
21718
+ * directive to avoid the undesirable flicker effect caused by the html template display.
21719
+ *
21720
+ * The directive can be applied to the `<body>` element, but the preferred usage is to apply
21721
+ * multiple `ngCloak` directives to small portions of the page to permit progressive rendering
21722
+ * of the browser view.
21723
+ *
21724
+ * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and
21725
+ * `angular.min.js`.
21726
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
21727
+ *
21728
+ * ```css
21729
+ * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
21730
+ * display: none !important;
21731
+ * }
21732
+ * ```
21733
+ *
21734
+ * When this css rule is loaded by the browser, all html elements (including their children) that
21735
+ * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive
21736
+ * during the compilation of the template it deletes the `ngCloak` element attribute, making
21737
+ * the compiled element visible.
21738
+ *
21739
+ * For the best result, the `angular.js` script must be loaded in the head section of the html
21740
+ * document; alternatively, the css rule above must be included in the external stylesheet of the
21741
+ * application.
21742
+ *
21743
+ * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they
21744
+ * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css
21745
+ * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.
21746
+ *
21747
+ * @element ANY
21748
+ *
21749
+ * @example
21750
+ <example>
21751
+ <file name="index.html">
21752
+ <div id="template1" ng-cloak>{{ 'hello' }}</div>
21753
+ <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div>
21754
+ </file>
21755
+ <file name="protractor.js" type="protractor">
21756
+ it('should remove the template directive and css class', function() {
21757
+ expect($('#template1').getAttribute('ng-cloak')).
21758
+ toBeNull();
21759
+ expect($('#template2').getAttribute('ng-cloak')).
21760
+ toBeNull();
21761
+ });
21762
+ </file>
21763
+ </example>
21764
+ *
21765
+ */
21766
+var ngCloakDirective = ngDirective({
21767
+ compile: function(element, attr) {
21768
+ attr.$set('ngCloak', undefined);
21769
+ element.removeClass('ng-cloak');
21770
+ }
21771
+});
21772
+
21773
+/**
21774
+ * @ngdoc directive
21775
+ * @name ngController
21776
+ *
21777
+ * @description
21778
+ * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular
21779
+ * supports the principles behind the Model-View-Controller design pattern.
21780
+ *
21781
+ * MVC components in angular:
21782
+ *
21783
+ * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties
21784
+ * are accessed through bindings.
21785
+ * * View — The template (HTML with data bindings) that is rendered into the View.
21786
+ * * Controller — The `ngController` directive specifies a Controller class; the class contains business
21787
+ * logic behind the application to decorate the scope with functions and values
21788
+ *
21789
+ * Note that you can also attach controllers to the DOM by declaring it in a route definition
21790
+ * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller
21791
+ * again using `ng-controller` in the template itself. This will cause the controller to be attached
21792
+ * and executed twice.
21793
+ *
21794
+ * @element ANY
21795
+ * @scope
21796
+ * @priority 500
21797
+ * @param {expression} ngController Name of a constructor function registered with the current
21798
+ * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}
21799
+ * that on the current scope evaluates to a constructor function.
21800
+ *
21801
+ * The controller instance can be published into a scope property by specifying
21802
+ * `ng-controller="as propertyName"`.
21803
+ *
21804
+ * If the current `$controllerProvider` is configured to use globals (via
21805
+ * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may
21806
+ * also be the name of a globally accessible constructor function (not recommended).
21807
+ *
21808
+ * @example
21809
+ * Here is a simple form for editing user contact information. Adding, removing, clearing, and
21810
+ * greeting are methods declared on the controller (see source tab). These methods can
21811
+ * easily be called from the angular markup. Any changes to the data are automatically reflected
21812
+ * in the View without the need for a manual update.
21813
+ *
21814
+ * Two different declaration styles are included below:
21815
+ *
21816
+ * * one binds methods and properties directly onto the controller using `this`:
21817
+ * `ng-controller="SettingsController1 as settings"`
21818
+ * * one injects `$scope` into the controller:
21819
+ * `ng-controller="SettingsController2"`
21820
+ *
21821
+ * The second option is more common in the Angular community, and is generally used in boilerplates
21822
+ * and in this guide. However, there are advantages to binding properties directly to the controller
21823
+ * and avoiding scope.
21824
+ *
21825
+ * * Using `controller as` makes it obvious which controller you are accessing in the template when
21826
+ * multiple controllers apply to an element.
21827
+ * * If you are writing your controllers as classes you have easier access to the properties and
21828
+ * methods, which will appear on the scope, from inside the controller code.
21829
+ * * Since there is always a `.` in the bindings, you don't have to worry about prototypal
21830
+ * inheritance masking primitives.
21831
+ *
21832
+ * This example demonstrates the `controller as` syntax.
21833
+ *
21834
+ * <example name="ngControllerAs" module="controllerAsExample">
21835
+ * <file name="index.html">
21836
+ * <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings">
21837
+ * Name: <input type="text" ng-model="settings.name"/>
21838
+ * [ <a href="" ng-click="settings.greet()">greet</a> ]<br/>
21839
+ * Contact:
21840
+ * <ul>
21841
+ * <li ng-repeat="contact in settings.contacts">
21842
+ * <select ng-model="contact.type">
21843
+ * <option>phone</option>
21844
+ * <option>email</option>
21845
+ * </select>
21846
+ * <input type="text" ng-model="contact.value"/>
21847
+ * [ <a href="" ng-click="settings.clearContact(contact)">clear</a>
21848
+ * | <a href="" ng-click="settings.removeContact(contact)">X</a> ]
21849
+ * </li>
21850
+ * <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li>
21851
+ * </ul>
21852
+ * </div>
21853
+ * </file>
21854
+ * <file name="app.js">
21855
+ * angular.module('controllerAsExample', [])
21856
+ * .controller('SettingsController1', SettingsController1);
21857
+ *
21858
+ * function SettingsController1() {
21859
+ * this.name = "John Smith";
21860
+ * this.contacts = [
21861
+ * {type: 'phone', value: '408 555 1212'},
21862
+ * {type: 'email', value: 'john.smith@example.org'} ];
21863
+ * }
21864
+ *
21865
+ * SettingsController1.prototype.greet = function() {
21866
+ * alert(this.name);
21867
+ * };
21868
+ *
21869
+ * SettingsController1.prototype.addContact = function() {
21870
+ * this.contacts.push({type: 'email', value: 'yourname@example.org'});
21871
+ * };
21872
+ *
21873
+ * SettingsController1.prototype.removeContact = function(contactToRemove) {
21874
+ * var index = this.contacts.indexOf(contactToRemove);
21875
+ * this.contacts.splice(index, 1);
21876
+ * };
21877
+ *
21878
+ * SettingsController1.prototype.clearContact = function(contact) {
21879
+ * contact.type = 'phone';
21880
+ * contact.value = '';
21881
+ * };
21882
+ * </file>
21883
+ * <file name="protractor.js" type="protractor">
21884
+ * it('should check controller as', function() {
21885
+ * var container = element(by.id('ctrl-as-exmpl'));
21886
+ * expect(container.element(by.model('settings.name'))
21887
+ * .getAttribute('value')).toBe('John Smith');
21888
+ *
21889
+ * var firstRepeat =
21890
+ * container.element(by.repeater('contact in settings.contacts').row(0));
21891
+ * var secondRepeat =
21892
+ * container.element(by.repeater('contact in settings.contacts').row(1));
21893
+ *
21894
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
21895
+ * .toBe('408 555 1212');
21896
+ *
21897
+ * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
21898
+ * .toBe('john.smith@example.org');
21899
+ *
21900
+ * firstRepeat.element(by.linkText('clear')).click();
21901
+ *
21902
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
21903
+ * .toBe('');
21904
+ *
21905
+ * container.element(by.linkText('add')).click();
21906
+ *
21907
+ * expect(container.element(by.repeater('contact in settings.contacts').row(2))
21908
+ * .element(by.model('contact.value'))
21909
+ * .getAttribute('value'))
21910
+ * .toBe('yourname@example.org');
21911
+ * });
21912
+ * </file>
21913
+ * </example>
21914
+ *
21915
+ * This example demonstrates the "attach to `$scope`" style of controller.
21916
+ *
21917
+ * <example name="ngController" module="controllerExample">
21918
+ * <file name="index.html">
21919
+ * <div id="ctrl-exmpl" ng-controller="SettingsController2">
21920
+ * Name: <input type="text" ng-model="name"/>
21921
+ * [ <a href="" ng-click="greet()">greet</a> ]<br/>
21922
+ * Contact:
21923
+ * <ul>
21924
+ * <li ng-repeat="contact in contacts">
21925
+ * <select ng-model="contact.type">
21926
+ * <option>phone</option>
21927
+ * <option>email</option>
21928
+ * </select>
21929
+ * <input type="text" ng-model="contact.value"/>
21930
+ * [ <a href="" ng-click="clearContact(contact)">clear</a>
21931
+ * | <a href="" ng-click="removeContact(contact)">X</a> ]
21932
+ * </li>
21933
+ * <li>[ <a href="" ng-click="addContact()">add</a> ]</li>
21934
+ * </ul>
21935
+ * </div>
21936
+ * </file>
21937
+ * <file name="app.js">
21938
+ * angular.module('controllerExample', [])
21939
+ * .controller('SettingsController2', ['$scope', SettingsController2]);
21940
+ *
21941
+ * function SettingsController2($scope) {
21942
+ * $scope.name = "John Smith";
21943
+ * $scope.contacts = [
21944
+ * {type:'phone', value:'408 555 1212'},
21945
+ * {type:'email', value:'john.smith@example.org'} ];
21946
+ *
21947
+ * $scope.greet = function() {
21948
+ * alert($scope.name);
21949
+ * };
21950
+ *
21951
+ * $scope.addContact = function() {
21952
+ * $scope.contacts.push({type:'email', value:'yourname@example.org'});
21953
+ * };
21954
+ *
21955
+ * $scope.removeContact = function(contactToRemove) {
21956
+ * var index = $scope.contacts.indexOf(contactToRemove);
21957
+ * $scope.contacts.splice(index, 1);
21958
+ * };
21959
+ *
21960
+ * $scope.clearContact = function(contact) {
21961
+ * contact.type = 'phone';
21962
+ * contact.value = '';
21963
+ * };
21964
+ * }
21965
+ * </file>
21966
+ * <file name="protractor.js" type="protractor">
21967
+ * it('should check controller', function() {
21968
+ * var container = element(by.id('ctrl-exmpl'));
21969
+ *
21970
+ * expect(container.element(by.model('name'))
21971
+ * .getAttribute('value')).toBe('John Smith');
21972
+ *
21973
+ * var firstRepeat =
21974
+ * container.element(by.repeater('contact in contacts').row(0));
21975
+ * var secondRepeat =
21976
+ * container.element(by.repeater('contact in contacts').row(1));
21977
+ *
21978
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
21979
+ * .toBe('408 555 1212');
21980
+ * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
21981
+ * .toBe('john.smith@example.org');
21982
+ *
21983
+ * firstRepeat.element(by.linkText('clear')).click();
21984
+ *
21985
+ * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
21986
+ * .toBe('');
21987
+ *
21988
+ * container.element(by.linkText('add')).click();
21989
+ *
21990
+ * expect(container.element(by.repeater('contact in contacts').row(2))
21991
+ * .element(by.model('contact.value'))
21992
+ * .getAttribute('value'))
21993
+ * .toBe('yourname@example.org');
21994
+ * });
21995
+ * </file>
21996
+ *</example>
21997
+
21998
+ */
21999
+var ngControllerDirective = [function() {
22000
+ return {
22001
+ restrict: 'A',
22002
+ scope: true,
22003
+ controller: '@',
22004
+ priority: 500
22005
+ };
22006
+}];
22007
+
22008
+/**
22009
+ * @ngdoc directive
22010
+ * @name ngCsp
22011
+ *
22012
+ * @element html
22013
+ * @description
22014
+ * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support.
22015
+ *
22016
+ * This is necessary when developing things like Google Chrome Extensions.
22017
+ *
22018
+ * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).
22019
+ * For Angular to be CSP compatible there are only two things that we need to do differently:
22020
+ *
22021
+ * - don't use `Function` constructor to generate optimized value getters
22022
+ * - don't inject custom stylesheet into the document
22023
+ *
22024
+ * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp`
22025
+ * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will
22026
+ * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will
22027
+ * be raised.
22028
+ *
22029
+ * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically
22030
+ * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}).
22031
+ * To make those directives work in CSP mode, include the `angular-csp.css` manually.
22032
+ *
22033
+ * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This
22034
+ * autodetection however triggers a CSP error to be logged in the console:
22035
+ *
22036
+ * ```
22037
+ * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
22038
+ * script in the following Content Security Policy directive: "default-src 'self'". Note that
22039
+ * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
22040
+ * ```
22041
+ *
22042
+ * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`
22043
+ * directive on the root element of the application or on the `angular.js` script tag, whichever
22044
+ * appears first in the html document.
22045
+ *
22046
+ * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*
22047
+ *
22048
+ * @example
22049
+ * This example shows how to apply the `ngCsp` directive to the `html` tag.
22050
+ ```html
22051
+ <!doctype html>
22052
+ <html ng-app ng-csp>
22053
+ ...
22054
+ ...
22055
+ </html>
22056
+ ```
22057
+ * @example
22058
+ // Note: the suffix `.csp` in the example name triggers
22059
+ // csp mode in our http server!
22060
+ <example name="example.csp" module="cspExample" ng-csp="true">
22061
+ <file name="index.html">
22062
+ <div ng-controller="MainController as ctrl">
22063
+ <div>
22064
+ <button ng-click="ctrl.inc()" id="inc">Increment</button>
22065
+ <span id="counter">
22066
+ {{ctrl.counter}}
22067
+ </span>
22068
+ </div>
22069
+
22070
+ <div>
22071
+ <button ng-click="ctrl.evil()" id="evil">Evil</button>
22072
+ <span id="evilError">
22073
+ {{ctrl.evilError}}
22074
+ </span>
22075
+ </div>
22076
+ </div>
22077
+ </file>
22078
+ <file name="script.js">
22079
+ angular.module('cspExample', [])
22080
+ .controller('MainController', function() {
22081
+ this.counter = 0;
22082
+ this.inc = function() {
22083
+ this.counter++;
22084
+ };
22085
+ this.evil = function() {
22086
+ // jshint evil:true
22087
+ try {
22088
+ eval('1+2');
22089
+ } catch (e) {
22090
+ this.evilError = e.message;
22091
+ }
22092
+ };
22093
+ });
22094
+ </file>
22095
+ <file name="protractor.js" type="protractor">
22096
+ var util, webdriver;
22097
+
22098
+ var incBtn = element(by.id('inc'));
22099
+ var counter = element(by.id('counter'));
22100
+ var evilBtn = element(by.id('evil'));
22101
+ var evilError = element(by.id('evilError'));
22102
+
22103
+ function getAndClearSevereErrors() {
22104
+ return browser.manage().logs().get('browser').then(function(browserLog) {
22105
+ return browserLog.filter(function(logEntry) {
22106
+ return logEntry.level.value > webdriver.logging.Level.WARNING.value;
22107
+ });
22108
+ });
22109
+ }
22110
+
22111
+ function clearErrors() {
22112
+ getAndClearSevereErrors();
22113
+ }
22114
+
22115
+ function expectNoErrors() {
22116
+ getAndClearSevereErrors().then(function(filteredLog) {
22117
+ expect(filteredLog.length).toEqual(0);
22118
+ if (filteredLog.length) {
22119
+ console.log('browser console errors: ' + util.inspect(filteredLog));
22120
+ }
22121
+ });
22122
+ }
22123
+
22124
+ function expectError(regex) {
22125
+ getAndClearSevereErrors().then(function(filteredLog) {
22126
+ var found = false;
22127
+ filteredLog.forEach(function(log) {
22128
+ if (log.message.match(regex)) {
22129
+ found = true;
22130
+ }
22131
+ });
22132
+ if (!found) {
22133
+ throw new Error('expected an error that matches ' + regex);
22134
+ }
22135
+ });
22136
+ }
22137
+
22138
+ beforeEach(function() {
22139
+ util = require('util');
22140
+ webdriver = require('protractor/node_modules/selenium-webdriver');
22141
+ });
22142
+
22143
+ // For now, we only test on Chrome,
22144
+ // as Safari does not load the page with Protractor's injected scripts,
22145
+ // and Firefox webdriver always disables content security policy (#6358)
22146
+ if (browser.params.browser !== 'chrome') {
22147
+ return;
22148
+ }
22149
+
22150
+ it('should not report errors when the page is loaded', function() {
22151
+ // clear errors so we are not dependent on previous tests
22152
+ clearErrors();
22153
+ // Need to reload the page as the page is already loaded when
22154
+ // we come here
22155
+ browser.driver.getCurrentUrl().then(function(url) {
22156
+ browser.get(url);
22157
+ });
22158
+ expectNoErrors();
22159
+ });
22160
+
22161
+ it('should evaluate expressions', function() {
22162
+ expect(counter.getText()).toEqual('0');
22163
+ incBtn.click();
22164
+ expect(counter.getText()).toEqual('1');
22165
+ expectNoErrors();
22166
+ });
22167
+
22168
+ it('should throw and report an error when using "eval"', function() {
22169
+ evilBtn.click();
22170
+ expect(evilError.getText()).toMatch(/Content Security Policy/);
22171
+ expectError(/Content Security Policy/);
22172
+ });
22173
+ </file>
22174
+ </example>
22175
+ */
22176
+
22177
+// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
22178
+// bootstrap the system (before $parse is instantiated), for this reason we just have
22179
+// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc
22180
+
22181
+/**
22182
+ * @ngdoc directive
22183
+ * @name ngClick
22184
+ *
22185
+ * @description
22186
+ * The ngClick directive allows you to specify custom behavior when
22187
+ * an element is clicked.
22188
+ *
22189
+ * @element ANY
22190
+ * @priority 0
22191
+ * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon
22192
+ * click. ({@link guide/expression#-event- Event object is available as `$event`})
22193
+ *
22194
+ * @example
22195
+ <example>
22196
+ <file name="index.html">
22197
+ <button ng-click="count = count + 1" ng-init="count=0">
22198
+ Increment
22199
+ </button>
22200
+ <span>
22201
+ count: {{count}}
22202
+ </span>
22203
+ </file>
22204
+ <file name="protractor.js" type="protractor">
22205
+ it('should check ng-click', function() {
22206
+ expect(element(by.binding('count')).getText()).toMatch('0');
22207
+ element(by.css('button')).click();
22208
+ expect(element(by.binding('count')).getText()).toMatch('1');
22209
+ });
22210
+ </file>
22211
+ </example>
22212
+ */
22213
+/*
22214
+ * A directive that allows creation of custom onclick handlers that are defined as angular
22215
+ * expressions and are compiled and executed within the current scope.
22216
+ *
22217
+ * Events that are handled via these handler are always configured not to propagate further.
22218
+ */
22219
+var ngEventDirectives = {};
22220
+
22221
+// For events that might fire synchronously during DOM manipulation
22222
+// we need to execute their event handlers asynchronously using $evalAsync,
22223
+// so that they are not executed in an inconsistent state.
22224
+var forceAsyncEvents = {
22225
+ 'blur': true,
22226
+ 'focus': true
22227
+};
22228
+forEach(
22229
+ 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
22230
+ function(eventName) {
22231
+ var directiveName = directiveNormalize('ng-' + eventName);
22232
+ ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
22233
+ return {
22234
+ restrict: 'A',
22235
+ compile: function($element, attr) {
22236
+ var fn = $parse(attr[directiveName]);
22237
+ return function ngEventHandler(scope, element) {
22238
+ element.on(eventName, function(event) {
22239
+ var callback = function() {
22240
+ fn(scope, {$event:event});
22241
+ };
22242
+ if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
22243
+ scope.$evalAsync(callback);
22244
+ } else {
22245
+ scope.$apply(callback);
22246
+ }
22247
+ });
22248
+ };
22249
+ }
22250
+ };
22251
+ }];
22252
+ }
22253
+);
22254
+
22255
+/**
22256
+ * @ngdoc directive
22257
+ * @name ngDblclick
22258
+ *
22259
+ * @description
22260
+ * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.
22261
+ *
22262
+ * @element ANY
22263
+ * @priority 0
22264
+ * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon
22265
+ * a dblclick. (The Event object is available as `$event`)
22266
+ *
22267
+ * @example
22268
+ <example>
22269
+ <file name="index.html">
22270
+ <button ng-dblclick="count = count + 1" ng-init="count=0">
22271
+ Increment (on double click)
22272
+ </button>
22273
+ count: {{count}}
22274
+ </file>
22275
+ </example>
22276
+ */
22277
+
22278
+
22279
+/**
22280
+ * @ngdoc directive
22281
+ * @name ngMousedown
22282
+ *
22283
+ * @description
22284
+ * The ngMousedown directive allows you to specify custom behavior on mousedown event.
22285
+ *
22286
+ * @element ANY
22287
+ * @priority 0
22288
+ * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon
22289
+ * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
22290
+ *
22291
+ * @example
22292
+ <example>
22293
+ <file name="index.html">
22294
+ <button ng-mousedown="count = count + 1" ng-init="count=0">
22295
+ Increment (on mouse down)
22296
+ </button>
22297
+ count: {{count}}
22298
+ </file>
22299
+ </example>
22300
+ */
22301
+
22302
+
22303
+/**
22304
+ * @ngdoc directive
22305
+ * @name ngMouseup
22306
+ *
22307
+ * @description
22308
+ * Specify custom behavior on mouseup event.
22309
+ *
22310
+ * @element ANY
22311
+ * @priority 0
22312
+ * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon
22313
+ * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
22314
+ *
22315
+ * @example
22316
+ <example>
22317
+ <file name="index.html">
22318
+ <button ng-mouseup="count = count + 1" ng-init="count=0">
22319
+ Increment (on mouse up)
22320
+ </button>
22321
+ count: {{count}}
22322
+ </file>
22323
+ </example>
22324
+ */
22325
+
22326
+/**
22327
+ * @ngdoc directive
22328
+ * @name ngMouseover
22329
+ *
22330
+ * @description
22331
+ * Specify custom behavior on mouseover event.
22332
+ *
22333
+ * @element ANY
22334
+ * @priority 0
22335
+ * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon
22336
+ * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
22337
+ *
22338
+ * @example
22339
+ <example>
22340
+ <file name="index.html">
22341
+ <button ng-mouseover="count = count + 1" ng-init="count=0">
22342
+ Increment (when mouse is over)
22343
+ </button>
22344
+ count: {{count}}
22345
+ </file>
22346
+ </example>
22347
+ */
22348
+
22349
+
22350
+/**
22351
+ * @ngdoc directive
22352
+ * @name ngMouseenter
22353
+ *
22354
+ * @description
22355
+ * Specify custom behavior on mouseenter event.
22356
+ *
22357
+ * @element ANY
22358
+ * @priority 0
22359
+ * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon
22360
+ * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
22361
+ *
22362
+ * @example
22363
+ <example>
22364
+ <file name="index.html">
22365
+ <button ng-mouseenter="count = count + 1" ng-init="count=0">
22366
+ Increment (when mouse enters)
22367
+ </button>
22368
+ count: {{count}}
22369
+ </file>
22370
+ </example>
22371
+ */
22372
+
22373
+
22374
+/**
22375
+ * @ngdoc directive
22376
+ * @name ngMouseleave
22377
+ *
22378
+ * @description
22379
+ * Specify custom behavior on mouseleave event.
22380
+ *
22381
+ * @element ANY
22382
+ * @priority 0
22383
+ * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon
22384
+ * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
22385
+ *
22386
+ * @example
22387
+ <example>
22388
+ <file name="index.html">
22389
+ <button ng-mouseleave="count = count + 1" ng-init="count=0">
22390
+ Increment (when mouse leaves)
22391
+ </button>
22392
+ count: {{count}}
22393
+ </file>
22394
+ </example>
22395
+ */
22396
+
22397
+
22398
+/**
22399
+ * @ngdoc directive
22400
+ * @name ngMousemove
22401
+ *
22402
+ * @description
22403
+ * Specify custom behavior on mousemove event.
22404
+ *
22405
+ * @element ANY
22406
+ * @priority 0
22407
+ * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon
22408
+ * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
22409
+ *
22410
+ * @example
22411
+ <example>
22412
+ <file name="index.html">
22413
+ <button ng-mousemove="count = count + 1" ng-init="count=0">
22414
+ Increment (when mouse moves)
22415
+ </button>
22416
+ count: {{count}}
22417
+ </file>
22418
+ </example>
22419
+ */
22420
+
22421
+
22422
+/**
22423
+ * @ngdoc directive
22424
+ * @name ngKeydown
22425
+ *
22426
+ * @description
22427
+ * Specify custom behavior on keydown event.
22428
+ *
22429
+ * @element ANY
22430
+ * @priority 0
22431
+ * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
22432
+ * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
22433
+ *
22434
+ * @example
22435
+ <example>
22436
+ <file name="index.html">
22437
+ <input ng-keydown="count = count + 1" ng-init="count=0">
22438
+ key down count: {{count}}
22439
+ </file>
22440
+ </example>
22441
+ */
22442
+
22443
+
22444
+/**
22445
+ * @ngdoc directive
22446
+ * @name ngKeyup
22447
+ *
22448
+ * @description
22449
+ * Specify custom behavior on keyup event.
22450
+ *
22451
+ * @element ANY
22452
+ * @priority 0
22453
+ * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
22454
+ * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
22455
+ *
22456
+ * @example
22457
+ <example>
22458
+ <file name="index.html">
22459
+ <p>Typing in the input box below updates the key count</p>
22460
+ <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}}
22461
+
22462
+ <p>Typing in the input box below updates the keycode</p>
22463
+ <input ng-keyup="event=$event">
22464
+ <p>event keyCode: {{ event.keyCode }}</p>
22465
+ <p>event altKey: {{ event.altKey }}</p>
22466
+ </file>
22467
+ </example>
22468
+ */
22469
+
22470
+
22471
+/**
22472
+ * @ngdoc directive
22473
+ * @name ngKeypress
22474
+ *
22475
+ * @description
22476
+ * Specify custom behavior on keypress event.
22477
+ *
22478
+ * @element ANY
22479
+ * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
22480
+ * keypress. ({@link guide/expression#-event- Event object is available as `$event`}
22481
+ * and can be interrogated for keyCode, altKey, etc.)
22482
+ *
22483
+ * @example
22484
+ <example>
22485
+ <file name="index.html">
22486
+ <input ng-keypress="count = count + 1" ng-init="count=0">
22487
+ key press count: {{count}}
22488
+ </file>
22489
+ </example>
22490
+ */
22491
+
22492
+
22493
+/**
22494
+ * @ngdoc directive
22495
+ * @name ngSubmit
22496
+ *
22497
+ * @description
22498
+ * Enables binding angular expressions to onsubmit events.
22499
+ *
22500
+ * Additionally it prevents the default action (which for form means sending the request to the
22501
+ * server and reloading the current page), but only if the form does not contain `action`,
22502
+ * `data-action`, or `x-action` attributes.
22503
+ *
22504
+ * <div class="alert alert-warning">
22505
+ * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and
22506
+ * `ngSubmit` handlers together. See the
22507
+ * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}
22508
+ * for a detailed discussion of when `ngSubmit` may be triggered.
22509
+ * </div>
22510
+ *
22511
+ * @element form
22512
+ * @priority 0
22513
+ * @param {expression} ngSubmit {@link guide/expression Expression} to eval.
22514
+ * ({@link guide/expression#-event- Event object is available as `$event`})
22515
+ *
22516
+ * @example
22517
+ <example module="submitExample">
22518
+ <file name="index.html">
22519
+ <script>
22520
+ angular.module('submitExample', [])
22521
+ .controller('ExampleController', ['$scope', function($scope) {
22522
+ $scope.list = [];
22523
+ $scope.text = 'hello';
22524
+ $scope.submit = function() {
22525
+ if ($scope.text) {
22526
+ $scope.list.push(this.text);
22527
+ $scope.text = '';
22528
+ }
22529
+ };
22530
+ }]);
22531
+ </script>
22532
+ <form ng-submit="submit()" ng-controller="ExampleController">
22533
+ Enter text and hit enter:
22534
+ <input type="text" ng-model="text" name="text" />
22535
+ <input type="submit" id="submit" value="Submit" />
22536
+ <pre>list={{list}}</pre>
22537
+ </form>
22538
+ </file>
22539
+ <file name="protractor.js" type="protractor">
22540
+ it('should check ng-submit', function() {
22541
+ expect(element(by.binding('list')).getText()).toBe('list=[]');
22542
+ element(by.css('#submit')).click();
22543
+ expect(element(by.binding('list')).getText()).toContain('hello');
22544
+ expect(element(by.model('text')).getAttribute('value')).toBe('');
22545
+ });
22546
+ it('should ignore empty strings', function() {
22547
+ expect(element(by.binding('list')).getText()).toBe('list=[]');
22548
+ element(by.css('#submit')).click();
22549
+ element(by.css('#submit')).click();
22550
+ expect(element(by.binding('list')).getText()).toContain('hello');
22551
+ });
22552
+ </file>
22553
+ </example>
22554
+ */
22555
+
22556
+/**
22557
+ * @ngdoc directive
22558
+ * @name ngFocus
22559
+ *
22560
+ * @description
22561
+ * Specify custom behavior on focus event.
22562
+ *
22563
+ * Note: As the `focus` event is executed synchronously when calling `input.focus()`
22564
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
22565
+ * during an `$apply` to ensure a consistent state.
22566
+ *
22567
+ * @element window, input, select, textarea, a
22568
+ * @priority 0
22569
+ * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
22570
+ * focus. ({@link guide/expression#-event- Event object is available as `$event`})
22571
+ *
22572
+ * @example
22573
+ * See {@link ng.directive:ngClick ngClick}
22574
+ */
22575
+
22576
+/**
22577
+ * @ngdoc directive
22578
+ * @name ngBlur
22579
+ *
22580
+ * @description
22581
+ * Specify custom behavior on blur event.
22582
+ *
22583
+ * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when
22584
+ * an element has lost focus.
22585
+ *
22586
+ * Note: As the `blur` event is executed synchronously also during DOM manipulations
22587
+ * (e.g. removing a focussed input),
22588
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
22589
+ * during an `$apply` to ensure a consistent state.
22590
+ *
22591
+ * @element window, input, select, textarea, a
22592
+ * @priority 0
22593
+ * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
22594
+ * blur. ({@link guide/expression#-event- Event object is available as `$event`})
22595
+ *
22596
+ * @example
22597
+ * See {@link ng.directive:ngClick ngClick}
22598
+ */
22599
+
22600
+/**
22601
+ * @ngdoc directive
22602
+ * @name ngCopy
22603
+ *
22604
+ * @description
22605
+ * Specify custom behavior on copy event.
22606
+ *
22607
+ * @element window, input, select, textarea, a
22608
+ * @priority 0
22609
+ * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon
22610
+ * copy. ({@link guide/expression#-event- Event object is available as `$event`})
22611
+ *
22612
+ * @example
22613
+ <example>
22614
+ <file name="index.html">
22615
+ <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
22616
+ copied: {{copied}}
22617
+ </file>
22618
+ </example>
22619
+ */
22620
+
22621
+/**
22622
+ * @ngdoc directive
22623
+ * @name ngCut
22624
+ *
22625
+ * @description
22626
+ * Specify custom behavior on cut event.
22627
+ *
22628
+ * @element window, input, select, textarea, a
22629
+ * @priority 0
22630
+ * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon
22631
+ * cut. ({@link guide/expression#-event- Event object is available as `$event`})
22632
+ *
22633
+ * @example
22634
+ <example>
22635
+ <file name="index.html">
22636
+ <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
22637
+ cut: {{cut}}
22638
+ </file>
22639
+ </example>
22640
+ */
22641
+
22642
+/**
22643
+ * @ngdoc directive
22644
+ * @name ngPaste
22645
+ *
22646
+ * @description
22647
+ * Specify custom behavior on paste event.
22648
+ *
22649
+ * @element window, input, select, textarea, a
22650
+ * @priority 0
22651
+ * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon
22652
+ * paste. ({@link guide/expression#-event- Event object is available as `$event`})
22653
+ *
22654
+ * @example
22655
+ <example>
22656
+ <file name="index.html">
22657
+ <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
22658
+ pasted: {{paste}}
22659
+ </file>
22660
+ </example>
22661
+ */
22662
+
22663
+/**
22664
+ * @ngdoc directive
22665
+ * @name ngIf
22666
+ * @restrict A
22667
+ *
22668
+ * @description
22669
+ * The `ngIf` directive removes or recreates a portion of the DOM tree based on an
22670
+ * {expression}. If the expression assigned to `ngIf` evaluates to a false
22671
+ * value then the element is removed from the DOM, otherwise a clone of the
22672
+ * element is reinserted into the DOM.
22673
+ *
22674
+ * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the
22675
+ * element in the DOM rather than changing its visibility via the `display` css property. A common
22676
+ * case when this difference is significant is when using css selectors that rely on an element's
22677
+ * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.
22678
+ *
22679
+ * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope
22680
+ * is created when the element is restored. The scope created within `ngIf` inherits from
22681
+ * its parent scope using
22682
+ * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).
22683
+ * An important implication of this is if `ngModel` is used within `ngIf` to bind to
22684
+ * a javascript primitive defined in the parent scope. In this case any modifications made to the
22685
+ * variable within the child scope will override (hide) the value in the parent scope.
22686
+ *
22687
+ * Also, `ngIf` recreates elements using their compiled state. An example of this behavior
22688
+ * is if an element's class attribute is directly modified after it's compiled, using something like
22689
+ * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element
22690
+ * the added class will be lost because the original compiled state is used to regenerate the element.
22691
+ *
22692
+ * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`
22693
+ * and `leave` effects.
22694
+ *
22695
+ * @animations
22696
+ * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container
22697
+ * leave - happens just before the `ngIf` contents are removed from the DOM
22698
+ *
22699
+ * @element ANY
22700
+ * @scope
22701
+ * @priority 600
22702
+ * @param {expression} ngIf If the {@link guide/expression expression} is falsy then
22703
+ * the element is removed from the DOM tree. If it is truthy a copy of the compiled
22704
+ * element is added to the DOM tree.
22705
+ *
22706
+ * @example
22707
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
22708
+ <file name="index.html">
22709
+ Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/>
22710
+ Show when checked:
22711
+ <span ng-if="checked" class="animate-if">
22712
+ I'm removed when the checkbox is unchecked.
22713
+ </span>
22714
+ </file>
22715
+ <file name="animations.css">
22716
+ .animate-if {
22717
+ background:white;
22718
+ border:1px solid black;
22719
+ padding:10px;
22720
+ }
22721
+
22722
+ .animate-if.ng-enter, .animate-if.ng-leave {
22723
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
22724
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
22725
+ }
22726
+
22727
+ .animate-if.ng-enter,
22728
+ .animate-if.ng-leave.ng-leave-active {
22729
+ opacity:0;
22730
+ }
22731
+
22732
+ .animate-if.ng-leave,
22733
+ .animate-if.ng-enter.ng-enter-active {
22734
+ opacity:1;
22735
+ }
22736
+ </file>
22737
+ </example>
22738
+ */
22739
+var ngIfDirective = ['$animate', function($animate) {
22740
+ return {
22741
+ multiElement: true,
22742
+ transclude: 'element',
22743
+ priority: 600,
22744
+ terminal: true,
22745
+ restrict: 'A',
22746
+ $$tlb: true,
22747
+ link: function ($scope, $element, $attr, ctrl, $transclude) {
22748
+ var block, childScope, previousElements;
22749
+ $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
22750
+
22751
+ if (value) {
22752
+ if (!childScope) {
22753
+ $transclude(function (clone, newScope) {
22754
+ childScope = newScope;
22755
+ clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
22756
+ // Note: We only need the first/last node of the cloned nodes.
22757
+ // However, we need to keep the reference to the jqlite wrapper as it might be changed later
22758
+ // by a directive with templateUrl when its template arrives.
22759
+ block = {
22760
+ clone: clone
22761
+ };
22762
+ $animate.enter(clone, $element.parent(), $element);
22763
+ });
22764
+ }
22765
+ } else {
22766
+ if(previousElements) {
22767
+ previousElements.remove();
22768
+ previousElements = null;
22769
+ }
22770
+ if(childScope) {
22771
+ childScope.$destroy();
22772
+ childScope = null;
22773
+ }
22774
+ if(block) {
22775
+ previousElements = getBlockNodes(block.clone);
22776
+ $animate.leave(previousElements).then(function() {
22777
+ previousElements = null;
22778
+ });
22779
+ block = null;
22780
+ }
22781
+ }
22782
+ });
22783
+ }
22784
+ };
22785
+}];
22786
+
22787
+/**
22788
+ * @ngdoc directive
22789
+ * @name ngInclude
22790
+ * @restrict ECA
22791
+ *
22792
+ * @description
22793
+ * Fetches, compiles and includes an external HTML fragment.
22794
+ *
22795
+ * By default, the template URL is restricted to the same domain and protocol as the
22796
+ * application document. This is done by calling {@link ng.$sce#getTrustedResourceUrl
22797
+ * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols
22798
+ * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or
22799
+ * [wrap them](ng.$sce#trustAsResourceUrl) as trusted values. Refer to Angular's {@link
22800
+ * ng.$sce Strict Contextual Escaping}.
22801
+ *
22802
+ * In addition, the browser's
22803
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
22804
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
22805
+ * policy may further restrict whether the template is successfully loaded.
22806
+ * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`
22807
+ * access on some browsers.
22808
+ *
22809
+ * @animations
22810
+ * enter - animation is used to bring new content into the browser.
22811
+ * leave - animation is used to animate existing content away.
22812
+ *
22813
+ * The enter and leave animation occur concurrently.
22814
+ *
22815
+ * @scope
22816
+ * @priority 400
22817
+ *
22818
+ * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,
22819
+ * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`.
22820
+ * @param {string=} onload Expression to evaluate when a new partial is loaded.
22821
+ *
22822
+ * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll
22823
+ * $anchorScroll} to scroll the viewport after the content is loaded.
22824
+ *
22825
+ * - If the attribute is not set, disable scrolling.
22826
+ * - If the attribute is set without value, enable scrolling.
22827
+ * - Otherwise enable scrolling only if the expression evaluates to truthy value.
22828
+ *
22829
+ * @example
22830
+ <example module="includeExample" deps="angular-animate.js" animations="true">
22831
+ <file name="index.html">
22832
+ <div ng-controller="ExampleController">
22833
+ <select ng-model="template" ng-options="t.name for t in templates">
22834
+ <option value="">(blank)</option>
22835
+ </select>
22836
+ url of the template: <tt>{{template.url}}</tt>
22837
+ <hr/>
22838
+ <div class="slide-animate-container">
22839
+ <div class="slide-animate" ng-include="template.url"></div>
22840
+ </div>
22841
+ </div>
22842
+ </file>
22843
+ <file name="script.js">
22844
+ angular.module('includeExample', ['ngAnimate'])
22845
+ .controller('ExampleController', ['$scope', function($scope) {
22846
+ $scope.templates =
22847
+ [ { name: 'template1.html', url: 'template1.html'},
22848
+ { name: 'template2.html', url: 'template2.html'} ];
22849
+ $scope.template = $scope.templates[0];
22850
+ }]);
22851
+ </file>
22852
+ <file name="template1.html">
22853
+ Content of template1.html
22854
+ </file>
22855
+ <file name="template2.html">
22856
+ Content of template2.html
22857
+ </file>
22858
+ <file name="animations.css">
22859
+ .slide-animate-container {
22860
+ position:relative;
22861
+ background:white;
22862
+ border:1px solid black;
22863
+ height:40px;
22864
+ overflow:hidden;
22865
+ }
22866
+
22867
+ .slide-animate {
22868
+ padding:10px;
22869
+ }
22870
+
22871
+ .slide-animate.ng-enter, .slide-animate.ng-leave {
22872
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
22873
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
22874
+
22875
+ position:absolute;
22876
+ top:0;
22877
+ left:0;
22878
+ right:0;
22879
+ bottom:0;
22880
+ display:block;
22881
+ padding:10px;
22882
+ }
22883
+
22884
+ .slide-animate.ng-enter {
22885
+ top:-50px;
22886
+ }
22887
+ .slide-animate.ng-enter.ng-enter-active {
22888
+ top:0;
22889
+ }
22890
+
22891
+ .slide-animate.ng-leave {
22892
+ top:0;
22893
+ }
22894
+ .slide-animate.ng-leave.ng-leave-active {
22895
+ top:50px;
22896
+ }
22897
+ </file>
22898
+ <file name="protractor.js" type="protractor">
22899
+ var templateSelect = element(by.model('template'));
22900
+ var includeElem = element(by.css('[ng-include]'));
22901
+
22902
+ it('should load template1.html', function() {
22903
+ expect(includeElem.getText()).toMatch(/Content of template1.html/);
22904
+ });
22905
+
22906
+ it('should load template2.html', function() {
22907
+ if (browser.params.browser == 'firefox') {
22908
+ // Firefox can't handle using selects
22909
+ // See https://github.com/angular/protractor/issues/480
22910
+ return;
22911
+ }
22912
+ templateSelect.click();
22913
+ templateSelect.all(by.css('option')).get(2).click();
22914
+ expect(includeElem.getText()).toMatch(/Content of template2.html/);
22915
+ });
22916
+
22917
+ it('should change to blank', function() {
22918
+ if (browser.params.browser == 'firefox') {
22919
+ // Firefox can't handle using selects
22920
+ return;
22921
+ }
22922
+ templateSelect.click();
22923
+ templateSelect.all(by.css('option')).get(0).click();
22924
+ expect(includeElem.isPresent()).toBe(false);
22925
+ });
22926
+ </file>
22927
+ </example>
22928
+ */
22929
+
22930
+
22931
+/**
22932
+ * @ngdoc event
22933
+ * @name ngInclude#$includeContentRequested
22934
+ * @eventType emit on the scope ngInclude was declared in
22935
+ * @description
22936
+ * Emitted every time the ngInclude content is requested.
22937
+ *
22938
+ * @param {Object} angularEvent Synthetic event object.
22939
+ * @param {String} src URL of content to load.
22940
+ */
22941
+
22942
+
22943
+/**
22944
+ * @ngdoc event
22945
+ * @name ngInclude#$includeContentLoaded
22946
+ * @eventType emit on the current ngInclude scope
22947
+ * @description
22948
+ * Emitted every time the ngInclude content is reloaded.
22949
+ *
22950
+ * @param {Object} angularEvent Synthetic event object.
22951
+ * @param {String} src URL of content to load.
22952
+ */
22953
+
22954
+
22955
+/**
22956
+ * @ngdoc event
22957
+ * @name ngInclude#$includeContentError
22958
+ * @eventType emit on the scope ngInclude was declared in
22959
+ * @description
22960
+ * Emitted when a template HTTP request yields an erronous response (status < 200 || status > 299)
22961
+ *
22962
+ * @param {Object} angularEvent Synthetic event object.
22963
+ * @param {String} src URL of content to load.
22964
+ */
22965
+var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce',
22966
+ function($templateRequest, $anchorScroll, $animate, $sce) {
22967
+ return {
22968
+ restrict: 'ECA',
22969
+ priority: 400,
22970
+ terminal: true,
22971
+ transclude: 'element',
22972
+ controller: angular.noop,
22973
+ compile: function(element, attr) {
22974
+ var srcExp = attr.ngInclude || attr.src,
22975
+ onloadExp = attr.onload || '',
22976
+ autoScrollExp = attr.autoscroll;
22977
+
22978
+ return function(scope, $element, $attr, ctrl, $transclude) {
22979
+ var changeCounter = 0,
22980
+ currentScope,
22981
+ previousElement,
22982
+ currentElement;
22983
+
22984
+ var cleanupLastIncludeContent = function() {
22985
+ if(previousElement) {
22986
+ previousElement.remove();
22987
+ previousElement = null;
22988
+ }
22989
+ if(currentScope) {
22990
+ currentScope.$destroy();
22991
+ currentScope = null;
22992
+ }
22993
+ if(currentElement) {
22994
+ $animate.leave(currentElement).then(function() {
22995
+ previousElement = null;
22996
+ });
22997
+ previousElement = currentElement;
22998
+ currentElement = null;
22999
+ }
23000
+ };
23001
+
23002
+ scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) {
23003
+ var afterAnimation = function() {
23004
+ if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
23005
+ $anchorScroll();
23006
+ }
23007
+ };
23008
+ var thisChangeId = ++changeCounter;
23009
+
23010
+ if (src) {
23011
+ //set the 2nd param to true to ignore the template request error so that the inner
23012
+ //contents and scope can be cleaned up.
23013
+ $templateRequest(src, true).then(function(response) {
23014
+ if (thisChangeId !== changeCounter) return;
23015
+ var newScope = scope.$new();
23016
+ ctrl.template = response;
23017
+
23018
+ // Note: This will also link all children of ng-include that were contained in the original
23019
+ // html. If that content contains controllers, ... they could pollute/change the scope.
23020
+ // However, using ng-include on an element with additional content does not make sense...
23021
+ // Note: We can't remove them in the cloneAttchFn of $transclude as that
23022
+ // function is called before linking the content, which would apply child
23023
+ // directives to non existing elements.
23024
+ var clone = $transclude(newScope, function(clone) {
23025
+ cleanupLastIncludeContent();
23026
+ $animate.enter(clone, null, $element).then(afterAnimation);
23027
+ });
23028
+
23029
+ currentScope = newScope;
23030
+ currentElement = clone;
23031
+
23032
+ currentScope.$emit('$includeContentLoaded', src);
23033
+ scope.$eval(onloadExp);
23034
+ }, function() {
23035
+ if (thisChangeId === changeCounter) {
23036
+ cleanupLastIncludeContent();
23037
+ scope.$emit('$includeContentError', src);
23038
+ }
23039
+ });
23040
+ scope.$emit('$includeContentRequested', src);
23041
+ } else {
23042
+ cleanupLastIncludeContent();
23043
+ ctrl.template = null;
23044
+ }
23045
+ });
23046
+ };
23047
+ }
23048
+ };
23049
+}];
23050
+
23051
+// This directive is called during the $transclude call of the first `ngInclude` directive.
23052
+// It will replace and compile the content of the element with the loaded template.
23053
+// We need this directive so that the element content is already filled when
23054
+// the link function of another directive on the same element as ngInclude
23055
+// is called.
23056
+var ngIncludeFillContentDirective = ['$compile',
23057
+ function($compile) {
23058
+ return {
23059
+ restrict: 'ECA',
23060
+ priority: -400,
23061
+ require: 'ngInclude',
23062
+ link: function(scope, $element, $attr, ctrl) {
23063
+ if (/SVG/.test($element[0].toString())) {
23064
+ // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not
23065
+ // support innerHTML, so detect this here and try to generate the contents
23066
+ // specially.
23067
+ $element.empty();
23068
+ $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
23069
+ function namespaceAdaptedClone(clone) {
23070
+ $element.append(clone);
23071
+ }, undefined, undefined, $element);
23072
+ return;
23073
+ }
23074
+
23075
+ $element.html(ctrl.template);
23076
+ $compile($element.contents())(scope);
23077
+ }
23078
+ };
23079
+ }];
23080
+
23081
+/**
23082
+ * @ngdoc directive
23083
+ * @name ngInit
23084
+ * @restrict AC
23085
+ *
23086
+ * @description
23087
+ * The `ngInit` directive allows you to evaluate an expression in the
23088
+ * current scope.
23089
+ *
23090
+ * <div class="alert alert-error">
23091
+ * The only appropriate use of `ngInit` is for aliasing special properties of
23092
+ * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you
23093
+ * should use {@link guide/controller controllers} rather than `ngInit`
23094
+ * to initialize values on a scope.
23095
+ * </div>
23096
+ * <div class="alert alert-warning">
23097
+ * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make
23098
+ * sure you have parenthesis for correct precedence:
23099
+ * <pre class="prettyprint">
23100
+ * <div ng-init="test1 = (data | orderBy:'name')"></div>
23101
+ * </pre>
23102
+ * </div>
23103
+ *
23104
+ * @priority 450
23105
+ *
23106
+ * @element ANY
23107
+ * @param {expression} ngInit {@link guide/expression Expression} to eval.
23108
+ *
23109
+ * @example
23110
+ <example module="initExample">
23111
+ <file name="index.html">
23112
+ <script>
23113
+ angular.module('initExample', [])
23114
+ .controller('ExampleController', ['$scope', function($scope) {
23115
+ $scope.list = [['a', 'b'], ['c', 'd']];
23116
+ }]);
23117
+ </script>
23118
+ <div ng-controller="ExampleController">
23119
+ <div ng-repeat="innerList in list" ng-init="outerIndex = $index">
23120
+ <div ng-repeat="value in innerList" ng-init="innerIndex = $index">
23121
+ <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
23122
+ </div>
23123
+ </div>
23124
+ </div>
23125
+ </file>
23126
+ <file name="protractor.js" type="protractor">
23127
+ it('should alias index positions', function() {
23128
+ var elements = element.all(by.css('.example-init'));
23129
+ expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');
23130
+ expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');
23131
+ expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');
23132
+ expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');
23133
+ });
23134
+ </file>
23135
+ </example>
23136
+ */
23137
+var ngInitDirective = ngDirective({
23138
+ priority: 450,
23139
+ compile: function() {
23140
+ return {
23141
+ pre: function(scope, element, attrs) {
23142
+ scope.$eval(attrs.ngInit);
23143
+ }
23144
+ };
23145
+ }
23146
+});
23147
+
23148
+/**
23149
+ * @ngdoc directive
23150
+ * @name ngNonBindable
23151
+ * @restrict AC
23152
+ * @priority 1000
23153
+ *
23154
+ * @description
23155
+ * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current
23156
+ * DOM element. This is useful if the element contains what appears to be Angular directives and
23157
+ * bindings but which should be ignored by Angular. This could be the case if you have a site that
23158
+ * displays snippets of code, for instance.
23159
+ *
23160
+ * @element ANY
23161
+ *
23162
+ * @example
23163
+ * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,
23164
+ * but the one wrapped in `ngNonBindable` is left alone.
23165
+ *
23166
+ * @example
23167
+ <example>
23168
+ <file name="index.html">
23169
+ <div>Normal: {{1 + 2}}</div>
23170
+ <div ng-non-bindable>Ignored: {{1 + 2}}</div>
23171
+ </file>
23172
+ <file name="protractor.js" type="protractor">
23173
+ it('should check ng-non-bindable', function() {
23174
+ expect(element(by.binding('1 + 2')).getText()).toContain('3');
23175
+ expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/);
23176
+ });
23177
+ </file>
23178
+ </example>
23179
+ */
23180
+var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
23181
+
23182
+/**
23183
+ * @ngdoc directive
23184
+ * @name ngPluralize
23185
+ * @restrict EA
23186
+ *
23187
+ * @description
23188
+ * `ngPluralize` is a directive that displays messages according to en-US localization rules.
23189
+ * These rules are bundled with angular.js, but can be overridden
23190
+ * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
23191
+ * by specifying the mappings between
23192
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
23193
+ * and the strings to be displayed.
23194
+ *
23195
+ * # Plural categories and explicit number rules
23196
+ * There are two
23197
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
23198
+ * in Angular's default en-US locale: "one" and "other".
23199
+ *
23200
+ * While a plural category may match many numbers (for example, in en-US locale, "other" can match
23201
+ * any number that is not 1), an explicit number rule can only match one number. For example, the
23202
+ * explicit number rule for "3" matches the number 3. There are examples of plural categories
23203
+ * and explicit number rules throughout the rest of this documentation.
23204
+ *
23205
+ * # Configuring ngPluralize
23206
+ * You configure ngPluralize by providing 2 attributes: `count` and `when`.
23207
+ * You can also provide an optional attribute, `offset`.
23208
+ *
23209
+ * The value of the `count` attribute can be either a string or an {@link guide/expression
23210
+ * Angular expression}; these are evaluated on the current scope for its bound value.
23211
+ *
23212
+ * The `when` attribute specifies the mappings between plural categories and the actual
23213
+ * string to be displayed. The value of the attribute should be a JSON object.
23214
+ *
23215
+ * The following example shows how to configure ngPluralize:
23216
+ *
23217
+ * ```html
23218
+ * <ng-pluralize count="personCount"
23219
+ when="{'0': 'Nobody is viewing.',
23220
+ * 'one': '1 person is viewing.',
23221
+ * 'other': '{} people are viewing.'}">
23222
+ * </ng-pluralize>
23223
+ *```
23224
+ *
23225
+ * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not
23226
+ * specify this rule, 0 would be matched to the "other" category and "0 people are viewing"
23227
+ * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for
23228
+ * other numbers, for example 12, so that instead of showing "12 people are viewing", you can
23229
+ * show "a dozen people are viewing".
23230
+ *
23231
+ * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted
23232
+ * into pluralized strings. In the previous example, Angular will replace `{}` with
23233
+ * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder
23234
+ * for <span ng-non-bindable>{{numberExpression}}</span>.
23235
+ *
23236
+ * # Configuring ngPluralize with offset
23237
+ * The `offset` attribute allows further customization of pluralized text, which can result in
23238
+ * a better user experience. For example, instead of the message "4 people are viewing this document",
23239
+ * you might display "John, Kate and 2 others are viewing this document".
23240
+ * The offset attribute allows you to offset a number by any desired value.
23241
+ * Let's take a look at an example:
23242
+ *
23243
+ * ```html
23244
+ * <ng-pluralize count="personCount" offset=2
23245
+ * when="{'0': 'Nobody is viewing.',
23246
+ * '1': '{{person1}} is viewing.',
23247
+ * '2': '{{person1}} and {{person2}} are viewing.',
23248
+ * 'one': '{{person1}}, {{person2}} and one other person are viewing.',
23249
+ * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
23250
+ * </ng-pluralize>
23251
+ * ```
23252
+ *
23253
+ * Notice that we are still using two plural categories(one, other), but we added
23254
+ * three explicit number rules 0, 1 and 2.
23255
+ * When one person, perhaps John, views the document, "John is viewing" will be shown.
23256
+ * When three people view the document, no explicit number rule is found, so
23257
+ * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.
23258
+ * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing"
23259
+ * is shown.
23260
+ *
23261
+ * Note that when you specify offsets, you must provide explicit number rules for
23262
+ * numbers from 0 up to and including the offset. If you use an offset of 3, for example,
23263
+ * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for
23264
+ * plural categories "one" and "other".
23265
+ *
23266
+ * @param {string|expression} count The variable to be bound to.
23267
+ * @param {string} when The mapping between plural category to its corresponding strings.
23268
+ * @param {number=} offset Offset to deduct from the total number.
23269
+ *
23270
+ * @example
23271
+ <example module="pluralizeExample">
23272
+ <file name="index.html">
23273
+ <script>
23274
+ angular.module('pluralizeExample', [])
23275
+ .controller('ExampleController', ['$scope', function($scope) {
23276
+ $scope.person1 = 'Igor';
23277
+ $scope.person2 = 'Misko';
23278
+ $scope.personCount = 1;
23279
+ }]);
23280
+ </script>
23281
+ <div ng-controller="ExampleController">
23282
+ Person 1:<input type="text" ng-model="person1" value="Igor" /><br/>
23283
+ Person 2:<input type="text" ng-model="person2" value="Misko" /><br/>
23284
+ Number of People:<input type="text" ng-model="personCount" value="1" /><br/>
23285
+
23286
+ <!--- Example with simple pluralization rules for en locale --->
23287
+ Without Offset:
23288
+ <ng-pluralize count="personCount"
23289
+ when="{'0': 'Nobody is viewing.',
23290
+ 'one': '1 person is viewing.',
23291
+ 'other': '{} people are viewing.'}">
23292
+ </ng-pluralize><br>
23293
+
23294
+ <!--- Example with offset --->
23295
+ With Offset(2):
23296
+ <ng-pluralize count="personCount" offset=2
23297
+ when="{'0': 'Nobody is viewing.',
23298
+ '1': '{{person1}} is viewing.',
23299
+ '2': '{{person1}} and {{person2}} are viewing.',
23300
+ 'one': '{{person1}}, {{person2}} and one other person are viewing.',
23301
+ 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
23302
+ </ng-pluralize>
23303
+ </div>
23304
+ </file>
23305
+ <file name="protractor.js" type="protractor">
23306
+ it('should show correct pluralized string', function() {
23307
+ var withoutOffset = element.all(by.css('ng-pluralize')).get(0);
23308
+ var withOffset = element.all(by.css('ng-pluralize')).get(1);
23309
+ var countInput = element(by.model('personCount'));
23310
+
23311
+ expect(withoutOffset.getText()).toEqual('1 person is viewing.');
23312
+ expect(withOffset.getText()).toEqual('Igor is viewing.');
23313
+
23314
+ countInput.clear();
23315
+ countInput.sendKeys('0');
23316
+
23317
+ expect(withoutOffset.getText()).toEqual('Nobody is viewing.');
23318
+ expect(withOffset.getText()).toEqual('Nobody is viewing.');
23319
+
23320
+ countInput.clear();
23321
+ countInput.sendKeys('2');
23322
+
23323
+ expect(withoutOffset.getText()).toEqual('2 people are viewing.');
23324
+ expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');
23325
+
23326
+ countInput.clear();
23327
+ countInput.sendKeys('3');
23328
+
23329
+ expect(withoutOffset.getText()).toEqual('3 people are viewing.');
23330
+ expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');
23331
+
23332
+ countInput.clear();
23333
+ countInput.sendKeys('4');
23334
+
23335
+ expect(withoutOffset.getText()).toEqual('4 people are viewing.');
23336
+ expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');
23337
+ });
23338
+ it('should show data-bound names', function() {
23339
+ var withOffset = element.all(by.css('ng-pluralize')).get(1);
23340
+ var personCount = element(by.model('personCount'));
23341
+ var person1 = element(by.model('person1'));
23342
+ var person2 = element(by.model('person2'));
23343
+ personCount.clear();
23344
+ personCount.sendKeys('4');
23345
+ person1.clear();
23346
+ person1.sendKeys('Di');
23347
+ person2.clear();
23348
+ person2.sendKeys('Vojta');
23349
+ expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');
23350
+ });
23351
+ </file>
23352
+ </example>
23353
+ */
23354
+var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {
23355
+ var BRACE = /{}/g;
23356
+ return {
23357
+ restrict: 'EA',
23358
+ link: function(scope, element, attr) {
23359
+ var numberExp = attr.count,
23360
+ whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs
23361
+ offset = attr.offset || 0,
23362
+ whens = scope.$eval(whenExp) || {},
23363
+ whensExpFns = {},
23364
+ startSymbol = $interpolate.startSymbol(),
23365
+ endSymbol = $interpolate.endSymbol(),
23366
+ isWhen = /^when(Minus)?(.+)$/;
23367
+
23368
+ forEach(attr, function(expression, attributeName) {
23369
+ if (isWhen.test(attributeName)) {
23370
+ whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] =
23371
+ element.attr(attr.$attr[attributeName]);
23372
+ }
23373
+ });
23374
+ forEach(whens, function(expression, key) {
23375
+ whensExpFns[key] =
23376
+ $interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' +
23377
+ offset + endSymbol));
23378
+ });
23379
+
23380
+ scope.$watch(function ngPluralizeWatch() {
23381
+ var value = parseFloat(scope.$eval(numberExp));
23382
+
23383
+ if (!isNaN(value)) {
23384
+ //if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise,
23385
+ //check it against pluralization rules in $locale service
23386
+ if (!(value in whens)) value = $locale.pluralCat(value - offset);
23387
+ return whensExpFns[value](scope);
23388
+ } else {
23389
+ return '';
23390
+ }
23391
+ }, function ngPluralizeWatchAction(newVal) {
23392
+ element.text(newVal);
23393
+ });
23394
+ }
23395
+ };
23396
+}];
23397
+
23398
+/**
23399
+ * @ngdoc directive
23400
+ * @name ngRepeat
23401
+ *
23402
+ * @description
23403
+ * The `ngRepeat` directive instantiates a template once per item from a collection. Each template
23404
+ * instance gets its own scope, where the given loop variable is set to the current collection item,
23405
+ * and `$index` is set to the item index or key.
23406
+ *
23407
+ * Special properties are exposed on the local scope of each template instance, including:
23408
+ *
23409
+ * | Variable | Type | Details |
23410
+ * |-----------|-----------------|-----------------------------------------------------------------------------|
23411
+ * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) |
23412
+ * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. |
23413
+ * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |
23414
+ * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. |
23415
+ * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). |
23416
+ * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). |
23417
+ *
23418
+ * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
23419
+ * This may be useful when, for instance, nesting ngRepeats.
23420
+ *
23421
+ * # Special repeat start and end points
23422
+ * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
23423
+ * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
23424
+ * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)
23425
+ * up to and including the ending HTML tag where **ng-repeat-end** is placed.
23426
+ *
23427
+ * The example below makes use of this feature:
23428
+ * ```html
23429
+ * <header ng-repeat-start="item in items">
23430
+ * Header {{ item }}
23431
+ * </header>
23432
+ * <div class="body">
23433
+ * Body {{ item }}
23434
+ * </div>
23435
+ * <footer ng-repeat-end>
23436
+ * Footer {{ item }}
23437
+ * </footer>
23438
+ * ```
23439
+ *
23440
+ * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:
23441
+ * ```html
23442
+ * <header>
23443
+ * Header A
23444
+ * </header>
23445
+ * <div class="body">
23446
+ * Body A
23447
+ * </div>
23448
+ * <footer>
23449
+ * Footer A
23450
+ * </footer>
23451
+ * <header>
23452
+ * Header B
23453
+ * </header>
23454
+ * <div class="body">
23455
+ * Body B
23456
+ * </div>
23457
+ * <footer>
23458
+ * Footer B
23459
+ * </footer>
23460
+ * ```
23461
+ *
23462
+ * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
23463
+ * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
23464
+ *
23465
+ * @animations
23466
+ * **.enter** - when a new item is added to the list or when an item is revealed after a filter
23467
+ *
23468
+ * **.leave** - when an item is removed from the list or when an item is filtered out
23469
+ *
23470
+ * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
23471
+ *
23472
+ * @element ANY
23473
+ * @scope
23474
+ * @priority 1000
23475
+ * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These
23476
+ * formats are currently supported:
23477
+ *
23478
+ * * `variable in expression` – where variable is the user defined loop variable and `expression`
23479
+ * is a scope expression giving the collection to enumerate.
23480
+ *
23481
+ * For example: `album in artist.albums`.
23482
+ *
23483
+ * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,
23484
+ * and `expression` is the scope expression giving the collection to enumerate.
23485
+ *
23486
+ * For example: `(name, age) in {'adam':10, 'amalie':12}`.
23487
+ *
23488
+ * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function
23489
+ * which can be used to associate the objects in the collection with the DOM elements. If no tracking function
23490
+ * is specified the ng-repeat associates elements by identity in the collection. It is an error to have
23491
+ * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are
23492
+ * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression,
23493
+ * before specifying a tracking expression.
23494
+ *
23495
+ * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements
23496
+ * will be associated by item identity in the array.
23497
+ *
23498
+ * * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the
23499
+ * intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message
23500
+ * when a filter is active on the repeater, but the filtered result set is empty.
23501
+ *
23502
+ * For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after
23503
+ * the items have been processed through the filter.
23504
+ *
23505
+ * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
23506
+ * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
23507
+ * with the corresponding item in the array by identity. Moving the same object in array would move the DOM
23508
+ * element in the same way in the DOM.
23509
+ *
23510
+ * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this
23511
+ * case the object identity does not matter. Two objects are considered equivalent as long as their `id`
23512
+ * property is same.
23513
+ *
23514
+ * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter
23515
+ * to items in conjunction with a tracking expression.
23516
+ *
23517
+ * @example
23518
+ * This example initializes the scope to a list of names and
23519
+ * then uses `ngRepeat` to display every person:
23520
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
23521
+ <file name="index.html">
23522
+ <div ng-init="friends = [
23523
+ {name:'John', age:25, gender:'boy'},
23524
+ {name:'Jessie', age:30, gender:'girl'},
23525
+ {name:'Johanna', age:28, gender:'girl'},
23526
+ {name:'Joy', age:15, gender:'girl'},
23527
+ {name:'Mary', age:28, gender:'girl'},
23528
+ {name:'Peter', age:95, gender:'boy'},
23529
+ {name:'Sebastian', age:50, gender:'boy'},
23530
+ {name:'Erika', age:27, gender:'girl'},
23531
+ {name:'Patrick', age:40, gender:'boy'},
23532
+ {name:'Samantha', age:60, gender:'girl'}
23533
+ ]">
23534
+ I have {{friends.length}} friends. They are:
23535
+ <input type="search" ng-model="q" placeholder="filter friends..." />
23536
+ <ul class="example-animate-container">
23537
+ <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results">
23538
+ [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
23539
+ </li>
23540
+ <li class="animate-repeat" ng-if="results.length == 0">
23541
+ <strong>No results found...</strong>
23542
+ </li>
23543
+ </ul>
23544
+ </div>
23545
+ </file>
23546
+ <file name="animations.css">
23547
+ .example-animate-container {
23548
+ background:white;
23549
+ border:1px solid black;
23550
+ list-style:none;
23551
+ margin:0;
23552
+ padding:0 10px;
23553
+ }
23554
+
23555
+ .animate-repeat {
23556
+ line-height:40px;
23557
+ list-style:none;
23558
+ box-sizing:border-box;
23559
+ }
23560
+
23561
+ .animate-repeat.ng-move,
23562
+ .animate-repeat.ng-enter,
23563
+ .animate-repeat.ng-leave {
23564
+ -webkit-transition:all linear 0.5s;
23565
+ transition:all linear 0.5s;
23566
+ }
23567
+
23568
+ .animate-repeat.ng-leave.ng-leave-active,
23569
+ .animate-repeat.ng-move,
23570
+ .animate-repeat.ng-enter {
23571
+ opacity:0;
23572
+ max-height:0;
23573
+ }
23574
+
23575
+ .animate-repeat.ng-leave,
23576
+ .animate-repeat.ng-move.ng-move-active,
23577
+ .animate-repeat.ng-enter.ng-enter-active {
23578
+ opacity:1;
23579
+ max-height:40px;
23580
+ }
23581
+ </file>
23582
+ <file name="protractor.js" type="protractor">
23583
+ var friends = element.all(by.repeater('friend in friends'));
23584
+
23585
+ it('should render initial data set', function() {
23586
+ expect(friends.count()).toBe(10);
23587
+ expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');
23588
+ expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');
23589
+ expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');
23590
+ expect(element(by.binding('friends.length')).getText())
23591
+ .toMatch("I have 10 friends. They are:");
23592
+ });
23593
+
23594
+ it('should update repeater when filter predicate changes', function() {
23595
+ expect(friends.count()).toBe(10);
23596
+
23597
+ element(by.model('q')).sendKeys('ma');
23598
+
23599
+ expect(friends.count()).toBe(2);
23600
+ expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');
23601
+ expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');
23602
+ });
23603
+ </file>
23604
+ </example>
23605
+ */
23606
+var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
23607
+ var NG_REMOVED = '$$NG_REMOVED';
23608
+ var ngRepeatMinErr = minErr('ngRepeat');
23609
+
23610
+ var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {
23611
+ // TODO(perf): generate setters to shave off ~40ms or 1-1.5%
23612
+ scope[valueIdentifier] = value;
23613
+ if (keyIdentifier) scope[keyIdentifier] = key;
23614
+ scope.$index = index;
23615
+ scope.$first = (index === 0);
23616
+ scope.$last = (index === (arrayLength - 1));
23617
+ scope.$middle = !(scope.$first || scope.$last);
23618
+ // jshint bitwise: false
23619
+ scope.$odd = !(scope.$even = (index&1) === 0);
23620
+ // jshint bitwise: true
23621
+ };
23622
+
23623
+ var getBlockStart = function(block) {
23624
+ return block.clone[0];
23625
+ };
23626
+
23627
+ var getBlockEnd = function(block) {
23628
+ return block.clone[block.clone.length - 1];
23629
+ };
23630
+
23631
+
23632
+ return {
23633
+ restrict: 'A',
23634
+ multiElement: true,
23635
+ transclude: 'element',
23636
+ priority: 1000,
23637
+ terminal: true,
23638
+ $$tlb: true,
23639
+ compile: function ngRepeatCompile($element, $attr) {
23640
+ var expression = $attr.ngRepeat;
23641
+ var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');
23642
+
23643
+ var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
23644
+
23645
+ if (!match) {
23646
+ throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
23647
+ expression);
23648
+ }
23649
+
23650
+ var lhs = match[1];
23651
+ var rhs = match[2];
23652
+ var aliasAs = match[3];
23653
+ var trackByExp = match[4];
23654
+
23655
+ match = lhs.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
23656
+
23657
+ if (!match) {
23658
+ throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",
23659
+ lhs);
23660
+ }
23661
+ var valueIdentifier = match[3] || match[1];
23662
+ var keyIdentifier = match[2];
23663
+
23664
+ if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
23665
+ /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(aliasAs))) {
23666
+ throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
23667
+ aliasAs);
23668
+ }
23669
+
23670
+ var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;
23671
+ var hashFnLocals = {$id: hashKey};
23672
+
23673
+ if (trackByExp) {
23674
+ trackByExpGetter = $parse(trackByExp);
23675
+ } else {
23676
+ trackByIdArrayFn = function (key, value) {
23677
+ return hashKey(value);
23678
+ };
23679
+ trackByIdObjFn = function (key) {
23680
+ return key;
23681
+ };
23682
+ }
23683
+
23684
+ return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {
23685
+
23686
+ if (trackByExpGetter) {
23687
+ trackByIdExpFn = function(key, value, index) {
23688
+ // assign key, value, and $index to the locals so that they can be used in hash functions
23689
+ if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
23690
+ hashFnLocals[valueIdentifier] = value;
23691
+ hashFnLocals.$index = index;
23692
+ return trackByExpGetter($scope, hashFnLocals);
23693
+ };
23694
+ }
23695
+
23696
+ // Store a list of elements from previous run. This is a hash where key is the item from the
23697
+ // iterator, and the value is objects with following properties.
23698
+ // - scope: bound scope
23699
+ // - element: previous element.
23700
+ // - index: position
23701
+ //
23702
+ // We are using no-proto object so that we don't need to guard against inherited props via
23703
+ // hasOwnProperty.
23704
+ var lastBlockMap = createMap();
23705
+
23706
+ //watch props
23707
+ $scope.$watchCollection(rhs, function ngRepeatAction(collection) {
23708
+ var index, length,
23709
+ previousNode = $element[0], // node that cloned nodes should be inserted after
23710
+ // initialized to the comment node anchor
23711
+ nextNode,
23712
+ // Same as lastBlockMap but it has the current state. It will become the
23713
+ // lastBlockMap on the next iteration.
23714
+ nextBlockMap = createMap(),
23715
+ collectionLength,
23716
+ key, value, // key/value of iteration
23717
+ trackById,
23718
+ trackByIdFn,
23719
+ collectionKeys,
23720
+ block, // last object information {scope, element, id}
23721
+ nextBlockOrder,
23722
+ elementsToRemove;
23723
+
23724
+ if (aliasAs) {
23725
+ $scope[aliasAs] = collection;
23726
+ }
23727
+
23728
+ if (isArrayLike(collection)) {
23729
+ collectionKeys = collection;
23730
+ trackByIdFn = trackByIdExpFn || trackByIdArrayFn;
23731
+ } else {
23732
+ trackByIdFn = trackByIdExpFn || trackByIdObjFn;
23733
+ // if object, extract keys, sort them and use to determine order of iteration over obj props
23734
+ collectionKeys = [];
23735
+ for (var itemKey in collection) {
23736
+ if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') {
23737
+ collectionKeys.push(itemKey);
23738
+ }
23739
+ }
23740
+ collectionKeys.sort();
23741
+ }
23742
+
23743
+ collectionLength = collectionKeys.length;
23744
+ nextBlockOrder = new Array(collectionLength);
23745
+
23746
+ // locate existing items
23747
+ for (index = 0; index < collectionLength; index++) {
23748
+ key = (collection === collectionKeys) ? index : collectionKeys[index];
23749
+ value = collection[key];
23750
+ trackById = trackByIdFn(key, value, index);
23751
+ if (lastBlockMap[trackById]) {
23752
+ // found previously seen block
23753
+ block = lastBlockMap[trackById];
23754
+ delete lastBlockMap[trackById];
23755
+ nextBlockMap[trackById] = block;
23756
+ nextBlockOrder[index] = block;
23757
+ } else if (nextBlockMap[trackById]) {
23758
+ // if collision detected. restore lastBlockMap and throw an error
23759
+ forEach(nextBlockOrder, function (block) {
23760
+ if (block && block.scope) lastBlockMap[block.id] = block;
23761
+ });
23762
+ throw ngRepeatMinErr('dupes',
23763
+ "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
23764
+ expression, trackById, toJson(value));
23765
+ } else {
23766
+ // new never before seen block
23767
+ nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};
23768
+ nextBlockMap[trackById] = true;
23769
+ }
23770
+ }
23771
+
23772
+ // remove leftover items
23773
+ for (var blockKey in lastBlockMap) {
23774
+ block = lastBlockMap[blockKey];
23775
+ elementsToRemove = getBlockNodes(block.clone);
23776
+ $animate.leave(elementsToRemove);
23777
+ if (elementsToRemove[0].parentNode) {
23778
+ // if the element was not removed yet because of pending animation, mark it as deleted
23779
+ // so that we can ignore it later
23780
+ for (index = 0, length = elementsToRemove.length; index < length; index++) {
23781
+ elementsToRemove[index][NG_REMOVED] = true;
23782
+ }
23783
+ }
23784
+ block.scope.$destroy();
23785
+ }
23786
+
23787
+ // we are not using forEach for perf reasons (trying to avoid #call)
23788
+ for (index = 0; index < collectionLength; index++) {
23789
+ key = (collection === collectionKeys) ? index : collectionKeys[index];
23790
+ value = collection[key];
23791
+ block = nextBlockOrder[index];
23792
+
23793
+ if (block.scope) {
23794
+ // if we have already seen this object, then we need to reuse the
23795
+ // associated scope/element
23796
+
23797
+ nextNode = previousNode;
23798
+
23799
+ // skip nodes that are already pending removal via leave animation
23800
+ do {
23801
+ nextNode = nextNode.nextSibling;
23802
+ } while (nextNode && nextNode[NG_REMOVED]);
23803
+
23804
+ if (getBlockStart(block) != nextNode) {
23805
+ // existing item which got moved
23806
+ $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode));
23807
+ }
23808
+ previousNode = getBlockEnd(block);
23809
+ updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
23810
+ } else {
23811
+ // new item which we don't know about
23812
+ $transclude(function ngRepeatTransclude(clone, scope) {
23813
+ block.scope = scope;
23814
+ // http://jsperf.com/clone-vs-createcomment
23815
+ var endNode = ngRepeatEndComment.cloneNode(false);
23816
+ clone[clone.length++] = endNode;
23817
+
23818
+ // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper?
23819
+ $animate.enter(clone, null, jqLite(previousNode));
23820
+ previousNode = endNode;
23821
+ // Note: We only need the first/last node of the cloned nodes.
23822
+ // However, we need to keep the reference to the jqlite wrapper as it might be changed later
23823
+ // by a directive with templateUrl when its template arrives.
23824
+ block.clone = clone;
23825
+ nextBlockMap[block.id] = block;
23826
+ updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
23827
+ });
23828
+ }
23829
+ }
23830
+ lastBlockMap = nextBlockMap;
23831
+ });
23832
+ };
23833
+ }
23834
+ };
23835
+}];
23836
+
23837
+var NG_HIDE_CLASS = 'ng-hide';
23838
+var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
23839
+/**
23840
+ * @ngdoc directive
23841
+ * @name ngShow
23842
+ *
23843
+ * @description
23844
+ * The `ngShow` directive shows or hides the given HTML element based on the expression
23845
+ * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding
23846
+ * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
23847
+ * in AngularJS and sets the display style to none (using an !important flag).
23848
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
23849
+ *
23850
+ * ```html
23851
+ * <!-- when $scope.myValue is truthy (element is visible) -->
23852
+ * <div ng-show="myValue"></div>
23853
+ *
23854
+ * <!-- when $scope.myValue is falsy (element is hidden) -->
23855
+ * <div ng-show="myValue" class="ng-hide"></div>
23856
+ * ```
23857
+ *
23858
+ * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class
23859
+ * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed
23860
+ * from the element causing the element not to appear hidden.
23861
+ *
23862
+ * ## Why is !important used?
23863
+ *
23864
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
23865
+ * can be easily overridden by heavier selectors. For example, something as simple
23866
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
23867
+ * This also becomes a bigger issue when dealing with CSS frameworks.
23868
+ *
23869
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
23870
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
23871
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
23872
+ *
23873
+ * ### Overriding `.ng-hide`
23874
+ *
23875
+ * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change
23876
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
23877
+ * class in CSS:
23878
+ *
23879
+ * ```css
23880
+ * .ng-hide {
23881
+ * /&#42; this is just another form of hiding an element &#42;/
23882
+ * display:block!important;
23883
+ * position:absolute;
23884
+ * top:-9999px;
23885
+ * left:-9999px;
23886
+ * }
23887
+ * ```
23888
+ *
23889
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
23890
+ *
23891
+ * ## A note about animations with `ngShow`
23892
+ *
23893
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
23894
+ * is true and false. This system works like the animation system present with ngClass except that
23895
+ * you must also include the !important flag to override the display property
23896
+ * so that you can perform an animation when the element is hidden during the time of the animation.
23897
+ *
23898
+ * ```css
23899
+ * //
23900
+ * //a working example can be found at the bottom of this page
23901
+ * //
23902
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
23903
+ * /&#42; this is required as of 1.3x to properly
23904
+ * apply all styling in a show/hide animation &#42;/
23905
+ * transition:0s linear all;
23906
+ * }
23907
+ *
23908
+ * .my-element.ng-hide-add-active,
23909
+ * .my-element.ng-hide-remove-active {
23910
+ * /&#42; the transition is defined in the active class &#42;/
23911
+ * transition:1s linear all;
23912
+ * }
23913
+ *
23914
+ * .my-element.ng-hide-add { ... }
23915
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
23916
+ * .my-element.ng-hide-remove { ... }
23917
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
23918
+ * ```
23919
+ *
23920
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
23921
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
23922
+ *
23923
+ * @animations
23924
+ * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible
23925
+ * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden
23926
+ *
23927
+ * @element ANY
23928
+ * @param {expression} ngShow If the {@link guide/expression expression} is truthy
23929
+ * then the element is shown or hidden respectively.
23930
+ *
23931
+ * @example
23932
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
23933
+ <file name="index.html">
23934
+ Click me: <input type="checkbox" ng-model="checked"><br/>
23935
+ <div>
23936
+ Show:
23937
+ <div class="check-element animate-show" ng-show="checked">
23938
+ <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
23939
+ </div>
23940
+ </div>
23941
+ <div>
23942
+ Hide:
23943
+ <div class="check-element animate-show" ng-hide="checked">
23944
+ <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
23945
+ </div>
23946
+ </div>
23947
+ </file>
23948
+ <file name="glyphicons.css">
23949
+ @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);
23950
+ </file>
23951
+ <file name="animations.css">
23952
+ .animate-show {
23953
+ line-height:20px;
23954
+ opacity:1;
23955
+ padding:10px;
23956
+ border:1px solid black;
23957
+ background:white;
23958
+ }
23959
+
23960
+ .animate-show.ng-hide-add.ng-hide-add-active,
23961
+ .animate-show.ng-hide-remove.ng-hide-remove-active {
23962
+ -webkit-transition:all linear 0.5s;
23963
+ transition:all linear 0.5s;
23964
+ }
23965
+
23966
+ .animate-show.ng-hide {
23967
+ line-height:0;
23968
+ opacity:0;
23969
+ padding:0 10px;
23970
+ }
23971
+
23972
+ .check-element {
23973
+ padding:10px;
23974
+ border:1px solid black;
23975
+ background:white;
23976
+ }
23977
+ </file>
23978
+ <file name="protractor.js" type="protractor">
23979
+ var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
23980
+ var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
23981
+
23982
+ it('should check ng-show / ng-hide', function() {
23983
+ expect(thumbsUp.isDisplayed()).toBeFalsy();
23984
+ expect(thumbsDown.isDisplayed()).toBeTruthy();
23985
+
23986
+ element(by.model('checked')).click();
23987
+
23988
+ expect(thumbsUp.isDisplayed()).toBeTruthy();
23989
+ expect(thumbsDown.isDisplayed()).toBeFalsy();
23990
+ });
23991
+ </file>
23992
+ </example>
23993
+ */
23994
+var ngShowDirective = ['$animate', function($animate) {
23995
+ return {
23996
+ restrict: 'A',
23997
+ multiElement: true,
23998
+ link: function(scope, element, attr) {
23999
+ scope.$watch(attr.ngShow, function ngShowWatchAction(value){
24000
+ // we're adding a temporary, animation-specific class for ng-hide since this way
24001
+ // we can control when the element is actually displayed on screen without having
24002
+ // to have a global/greedy CSS selector that breaks when other animations are run.
24003
+ // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845
24004
+ $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, NG_HIDE_IN_PROGRESS_CLASS);
24005
+ });
24006
+ }
24007
+ };
24008
+}];
24009
+
24010
+
24011
+/**
24012
+ * @ngdoc directive
24013
+ * @name ngHide
24014
+ *
24015
+ * @description
24016
+ * The `ngHide` directive shows or hides the given HTML element based on the expression
24017
+ * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding
24018
+ * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
24019
+ * in AngularJS and sets the display style to none (using an !important flag).
24020
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
24021
+ *
24022
+ * ```html
24023
+ * <!-- when $scope.myValue is truthy (element is hidden) -->
24024
+ * <div ng-hide="myValue" class="ng-hide"></div>
24025
+ *
24026
+ * <!-- when $scope.myValue is falsy (element is visible) -->
24027
+ * <div ng-hide="myValue"></div>
24028
+ * ```
24029
+ *
24030
+ * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class
24031
+ * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed
24032
+ * from the element causing the element not to appear hidden.
24033
+ *
24034
+ * ## Why is !important used?
24035
+ *
24036
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
24037
+ * can be easily overridden by heavier selectors. For example, something as simple
24038
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
24039
+ * This also becomes a bigger issue when dealing with CSS frameworks.
24040
+ *
24041
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
24042
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
24043
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
24044
+ *
24045
+ * ### Overriding `.ng-hide`
24046
+ *
24047
+ * By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change
24048
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
24049
+ * class in CSS:
24050
+ *
24051
+ * ```css
24052
+ * .ng-hide {
24053
+ * /&#42; this is just another form of hiding an element &#42;/
24054
+ * display:block!important;
24055
+ * position:absolute;
24056
+ * top:-9999px;
24057
+ * left:-9999px;
24058
+ * }
24059
+ * ```
24060
+ *
24061
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
24062
+ *
24063
+ * ## A note about animations with `ngHide`
24064
+ *
24065
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
24066
+ * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`
24067
+ * CSS class is added and removed for you instead of your own CSS class.
24068
+ *
24069
+ * ```css
24070
+ * //
24071
+ * //a working example can be found at the bottom of this page
24072
+ * //
24073
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
24074
+ * transition:0.5s linear all;
24075
+ * }
24076
+ *
24077
+ * .my-element.ng-hide-add { ... }
24078
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
24079
+ * .my-element.ng-hide-remove { ... }
24080
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
24081
+ * ```
24082
+ *
24083
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
24084
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
24085
+ *
24086
+ * @animations
24087
+ * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden
24088
+ * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible
24089
+ *
24090
+ * @element ANY
24091
+ * @param {expression} ngHide If the {@link guide/expression expression} is truthy then
24092
+ * the element is shown or hidden respectively.
24093
+ *
24094
+ * @example
24095
+ <example module="ngAnimate" deps="angular-animate.js" animations="true">
24096
+ <file name="index.html">
24097
+ Click me: <input type="checkbox" ng-model="checked"><br/>
24098
+ <div>
24099
+ Show:
24100
+ <div class="check-element animate-hide" ng-show="checked">
24101
+ <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
24102
+ </div>
24103
+ </div>
24104
+ <div>
24105
+ Hide:
24106
+ <div class="check-element animate-hide" ng-hide="checked">
24107
+ <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
24108
+ </div>
24109
+ </div>
24110
+ </file>
24111
+ <file name="glyphicons.css">
24112
+ @import url(//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css);
24113
+ </file>
24114
+ <file name="animations.css">
24115
+ .animate-hide {
24116
+ -webkit-transition:all linear 0.5s;
24117
+ transition:all linear 0.5s;
24118
+ line-height:20px;
24119
+ opacity:1;
24120
+ padding:10px;
24121
+ border:1px solid black;
24122
+ background:white;
24123
+ }
24124
+
24125
+ .animate-hide.ng-hide {
24126
+ line-height:0;
24127
+ opacity:0;
24128
+ padding:0 10px;
24129
+ }
24130
+
24131
+ .check-element {
24132
+ padding:10px;
24133
+ border:1px solid black;
24134
+ background:white;
24135
+ }
24136
+ </file>
24137
+ <file name="protractor.js" type="protractor">
24138
+ var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
24139
+ var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
24140
+
24141
+ it('should check ng-show / ng-hide', function() {
24142
+ expect(thumbsUp.isDisplayed()).toBeFalsy();
24143
+ expect(thumbsDown.isDisplayed()).toBeTruthy();
24144
+
24145
+ element(by.model('checked')).click();
24146
+
24147
+ expect(thumbsUp.isDisplayed()).toBeTruthy();
24148
+ expect(thumbsDown.isDisplayed()).toBeFalsy();
24149
+ });
24150
+ </file>
24151
+ </example>
24152
+ */
24153
+var ngHideDirective = ['$animate', function($animate) {
24154
+ return {
24155
+ restrict: 'A',
24156
+ multiElement: true,
24157
+ link: function(scope, element, attr) {
24158
+ scope.$watch(attr.ngHide, function ngHideWatchAction(value){
24159
+ // The comment inside of the ngShowDirective explains why we add and
24160
+ // remove a temporary class for the show/hide animation
24161
+ $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, NG_HIDE_IN_PROGRESS_CLASS);
24162
+ });
24163
+ }
24164
+ };
24165
+}];
24166
+
24167
+/**
24168
+ * @ngdoc directive
24169
+ * @name ngStyle
24170
+ * @restrict AC
24171
+ *
24172
+ * @description
24173
+ * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.
24174
+ *
24175
+ * @element ANY
24176
+ * @param {expression} ngStyle
24177
+ *
24178
+ * {@link guide/expression Expression} which evals to an
24179
+ * object whose keys are CSS style names and values are corresponding values for those CSS
24180
+ * keys.
24181
+ *
24182
+ * Since some CSS style names are not valid keys for an object, they must be quoted.
24183
+ * See the 'background-color' style in the example below.
24184
+ *
24185
+ * @example
24186
+ <example>
24187
+ <file name="index.html">
24188
+ <input type="button" value="set color" ng-click="myStyle={color:'red'}">
24189
+ <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}">
24190
+ <input type="button" value="clear" ng-click="myStyle={}">
24191
+ <br/>
24192
+ <span ng-style="myStyle">Sample Text</span>
24193
+ <pre>myStyle={{myStyle}}</pre>
24194
+ </file>
24195
+ <file name="style.css">
24196
+ span {
24197
+ color: black;
24198
+ }
24199
+ </file>
24200
+ <file name="protractor.js" type="protractor">
24201
+ var colorSpan = element(by.css('span'));
24202
+
24203
+ it('should check ng-style', function() {
24204
+ expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
24205
+ element(by.css('input[value=\'set color\']')).click();
24206
+ expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');
24207
+ element(by.css('input[value=clear]')).click();
24208
+ expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
24209
+ });
24210
+ </file>
24211
+ </example>
24212
+ */
24213
+var ngStyleDirective = ngDirective(function(scope, element, attr) {
24214
+ scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
24215
+ if (oldStyles && (newStyles !== oldStyles)) {
24216
+ forEach(oldStyles, function(val, style) { element.css(style, '');});
24217
+ }
24218
+ if (newStyles) element.css(newStyles);
24219
+ }, true);
24220
+});
24221
+
24222
+/**
24223
+ * @ngdoc directive
24224
+ * @name ngSwitch
24225
+ * @restrict EA
24226
+ *
24227
+ * @description
24228
+ * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.
24229
+ * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location
24230
+ * as specified in the template.
24231
+ *
24232
+ * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
24233
+ * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element
24234
+ * matches the value obtained from the evaluated expression. In other words, you define a container element
24235
+ * (where you place the directive), place an expression on the **`on="..."` attribute**
24236
+ * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place
24237
+ * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
24238
+ * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
24239
+ * attribute is displayed.
24240
+ *
24241
+ * <div class="alert alert-info">
24242
+ * Be aware that the attribute values to match against cannot be expressions. They are interpreted
24243
+ * as literal string values to match against.
24244
+ * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the
24245
+ * value of the expression `$scope.someVal`.
24246
+ * </div>
24247
+
24248
+ * @animations
24249
+ * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
24250
+ * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
24251
+ *
24252
+ * @usage
24253
+ *
24254
+ * ```
24255
+ * <ANY ng-switch="expression">
24256
+ * <ANY ng-switch-when="matchValue1">...</ANY>
24257
+ * <ANY ng-switch-when="matchValue2">...</ANY>
24258
+ * <ANY ng-switch-default>...</ANY>
24259
+ * </ANY>
24260
+ * ```
24261
+ *
24262
+ *
24263
+ * @scope
24264
+ * @priority 1200
24265
+ * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>.
24266
+ * On child elements add:
24267
+ *
24268
+ * * `ngSwitchWhen`: the case statement to match against. If match then this
24269
+ * case will be displayed. If the same match appears multiple times, all the
24270
+ * elements will be displayed.
24271
+ * * `ngSwitchDefault`: the default case when no other case match. If there
24272
+ * are multiple default cases, all of them will be displayed when no other
24273
+ * case match.
24274
+ *
24275
+ *
24276
+ * @example
24277
+ <example module="switchExample" deps="angular-animate.js" animations="true">
24278
+ <file name="index.html">
24279
+ <div ng-controller="ExampleController">
24280
+ <select ng-model="selection" ng-options="item for item in items">
24281
+ </select>
24282
+ <tt>selection={{selection}}</tt>
24283
+ <hr/>
24284
+ <div class="animate-switch-container"
24285
+ ng-switch on="selection">
24286
+ <div class="animate-switch" ng-switch-when="settings">Settings Div</div>
24287
+ <div class="animate-switch" ng-switch-when="home">Home Span</div>
24288
+ <div class="animate-switch" ng-switch-default>default</div>
24289
+ </div>
24290
+ </div>
24291
+ </file>
24292
+ <file name="script.js">
24293
+ angular.module('switchExample', ['ngAnimate'])
24294
+ .controller('ExampleController', ['$scope', function($scope) {
24295
+ $scope.items = ['settings', 'home', 'other'];
24296
+ $scope.selection = $scope.items[0];
24297
+ }]);
24298
+ </file>
24299
+ <file name="animations.css">
24300
+ .animate-switch-container {
24301
+ position:relative;
24302
+ background:white;
24303
+ border:1px solid black;
24304
+ height:40px;
24305
+ overflow:hidden;
24306
+ }
24307
+
24308
+ .animate-switch {
24309
+ padding:10px;
24310
+ }
24311
+
24312
+ .animate-switch.ng-animate {
24313
+ -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
24314
+ transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
24315
+
24316
+ position:absolute;
24317
+ top:0;
24318
+ left:0;
24319
+ right:0;
24320
+ bottom:0;
24321
+ }
24322
+
24323
+ .animate-switch.ng-leave.ng-leave-active,
24324
+ .animate-switch.ng-enter {
24325
+ top:-50px;
24326
+ }
24327
+ .animate-switch.ng-leave,
24328
+ .animate-switch.ng-enter.ng-enter-active {
24329
+ top:0;
24330
+ }
24331
+ </file>
24332
+ <file name="protractor.js" type="protractor">
24333
+ var switchElem = element(by.css('[ng-switch]'));
24334
+ var select = element(by.model('selection'));
24335
+
24336
+ it('should start in settings', function() {
24337
+ expect(switchElem.getText()).toMatch(/Settings Div/);
24338
+ });
24339
+ it('should change to home', function() {
24340
+ select.all(by.css('option')).get(1).click();
24341
+ expect(switchElem.getText()).toMatch(/Home Span/);
24342
+ });
24343
+ it('should select default', function() {
24344
+ select.all(by.css('option')).get(2).click();
24345
+ expect(switchElem.getText()).toMatch(/default/);
24346
+ });
24347
+ </file>
24348
+ </example>
24349
+ */
24350
+var ngSwitchDirective = ['$animate', function($animate) {
24351
+ return {
24352
+ restrict: 'EA',
24353
+ require: 'ngSwitch',
24354
+
24355
+ // asks for $scope to fool the BC controller module
24356
+ controller: ['$scope', function ngSwitchController() {
24357
+ this.cases = {};
24358
+ }],
24359
+ link: function(scope, element, attr, ngSwitchController) {
24360
+ var watchExpr = attr.ngSwitch || attr.on,
24361
+ selectedTranscludes = [],
24362
+ selectedElements = [],
24363
+ previousLeaveAnimations = [],
24364
+ selectedScopes = [];
24365
+
24366
+ var spliceFactory = function(array, index) {
24367
+ return function() { array.splice(index, 1); };
24368
+ };
24369
+
24370
+ scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
24371
+ var i, ii;
24372
+ for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {
24373
+ $animate.cancel(previousLeaveAnimations[i]);
24374
+ }
24375
+ previousLeaveAnimations.length = 0;
24376
+
24377
+ for (i = 0, ii = selectedScopes.length; i < ii; ++i) {
24378
+ var selected = getBlockNodes(selectedElements[i].clone);
24379
+ selectedScopes[i].$destroy();
24380
+ var promise = previousLeaveAnimations[i] = $animate.leave(selected);
24381
+ promise.then(spliceFactory(previousLeaveAnimations, i));
24382
+ }
24383
+
24384
+ selectedElements.length = 0;
24385
+ selectedScopes.length = 0;
24386
+
24387
+ if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
24388
+ forEach(selectedTranscludes, function(selectedTransclude) {
24389
+ selectedTransclude.transclude(function(caseElement, selectedScope) {
24390
+ selectedScopes.push(selectedScope);
24391
+ var anchor = selectedTransclude.element;
24392
+ caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');
24393
+ var block = { clone: caseElement };
24394
+
24395
+ selectedElements.push(block);
24396
+ $animate.enter(caseElement, anchor.parent(), anchor);
24397
+ });
24398
+ });
24399
+ }
24400
+ });
24401
+ }
24402
+ };
24403
+}];
24404
+
24405
+var ngSwitchWhenDirective = ngDirective({
24406
+ transclude: 'element',
24407
+ priority: 1200,
24408
+ require: '^ngSwitch',
24409
+ multiElement: true,
24410
+ link: function(scope, element, attrs, ctrl, $transclude) {
24411
+ ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
24412
+ ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
24413
+ }
24414
+});
24415
+
24416
+var ngSwitchDefaultDirective = ngDirective({
24417
+ transclude: 'element',
24418
+ priority: 1200,
24419
+ require: '^ngSwitch',
24420
+ multiElement: true,
24421
+ link: function(scope, element, attr, ctrl, $transclude) {
24422
+ ctrl.cases['?'] = (ctrl.cases['?'] || []);
24423
+ ctrl.cases['?'].push({ transclude: $transclude, element: element });
24424
+ }
24425
+});
24426
+
24427
+/**
24428
+ * @ngdoc directive
24429
+ * @name ngTransclude
24430
+ * @restrict EAC
24431
+ *
24432
+ * @description
24433
+ * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
24434
+ *
24435
+ * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
24436
+ *
24437
+ * @element ANY
24438
+ *
24439
+ * @example
24440
+ <example module="transcludeExample">
24441
+ <file name="index.html">
24442
+ <script>
24443
+ angular.module('transcludeExample', [])
24444
+ .directive('pane', function(){
24445
+ return {
24446
+ restrict: 'E',
24447
+ transclude: true,
24448
+ scope: { title:'@' },
24449
+ template: '<div style="border: 1px solid black;">' +
24450
+ '<div style="background-color: gray">{{title}}</div>' +
24451
+ '<ng-transclude></ng-transclude>' +
24452
+ '</div>'
24453
+ };
24454
+ })
24455
+ .controller('ExampleController', ['$scope', function($scope) {
24456
+ $scope.title = 'Lorem Ipsum';
24457
+ $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
24458
+ }]);
24459
+ </script>
24460
+ <div ng-controller="ExampleController">
24461
+ <input ng-model="title"><br>
24462
+ <textarea ng-model="text"></textarea> <br/>
24463
+ <pane title="{{title}}">{{text}}</pane>
24464
+ </div>
24465
+ </file>
24466
+ <file name="protractor.js" type="protractor">
24467
+ it('should have transcluded', function() {
24468
+ var titleElement = element(by.model('title'));
24469
+ titleElement.clear();
24470
+ titleElement.sendKeys('TITLE');
24471
+ var textElement = element(by.model('text'));
24472
+ textElement.clear();
24473
+ textElement.sendKeys('TEXT');
24474
+ expect(element(by.binding('title')).getText()).toEqual('TITLE');
24475
+ expect(element(by.binding('text')).getText()).toEqual('TEXT');
24476
+ });
24477
+ </file>
24478
+ </example>
24479
+ *
24480
+ */
24481
+var ngTranscludeDirective = ngDirective({
24482
+ restrict: 'EAC',
24483
+ link: function($scope, $element, $attrs, controller, $transclude) {
24484
+ if (!$transclude) {
24485
+ throw minErr('ngTransclude')('orphan',
24486
+ 'Illegal use of ngTransclude directive in the template! ' +
24487
+ 'No parent directive that requires a transclusion found. ' +
24488
+ 'Element: {0}',
24489
+ startingTag($element));
24490
+ }
24491
+
24492
+ $transclude(function(clone) {
24493
+ $element.empty();
24494
+ $element.append(clone);
24495
+ });
24496
+ }
24497
+});
24498
+
24499
+/**
24500
+ * @ngdoc directive
24501
+ * @name script
24502
+ * @restrict E
24503
+ *
24504
+ * @description
24505
+ * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the
24506
+ * template can be used by {@link ng.directive:ngInclude `ngInclude`},
24507
+ * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
24508
+ * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
24509
+ * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
24510
+ *
24511
+ * @param {string} type Must be set to `'text/ng-template'`.
24512
+ * @param {string} id Cache name of the template.
24513
+ *
24514
+ * @example
24515
+ <example>
24516
+ <file name="index.html">
24517
+ <script type="text/ng-template" id="/tpl.html">
24518
+ Content of the template.
24519
+ </script>
24520
+
24521
+ <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a>
24522
+ <div id="tpl-content" ng-include src="currentTpl"></div>
24523
+ </file>
24524
+ <file name="protractor.js" type="protractor">
24525
+ it('should load template defined inside script tag', function() {
24526
+ element(by.css('#tpl-link')).click();
24527
+ expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);
24528
+ });
24529
+ </file>
24530
+ </example>
24531
+ */
24532
+var scriptDirective = ['$templateCache', function($templateCache) {
24533
+ return {
24534
+ restrict: 'E',
24535
+ terminal: true,
24536
+ compile: function(element, attr) {
24537
+ if (attr.type == 'text/ng-template') {
24538
+ var templateUrl = attr.id,
24539
+ // IE is not consistent, in scripts we have to read .text but in other nodes we have to read .textContent
24540
+ text = element[0].text;
24541
+
24542
+ $templateCache.put(templateUrl, text);
24543
+ }
24544
+ }
24545
+ };
24546
+}];
24547
+
24548
+var ngOptionsMinErr = minErr('ngOptions');
24549
+/**
24550
+ * @ngdoc directive
24551
+ * @name select
24552
+ * @restrict E
24553
+ *
24554
+ * @description
24555
+ * HTML `SELECT` element with angular data-binding.
24556
+ *
24557
+ * # `ngOptions`
24558
+ *
24559
+ * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`
24560
+ * elements for the `<select>` element using the array or object obtained by evaluating the
24561
+ * `ngOptions` comprehension_expression.
24562
+ *
24563
+ * When an item in the `<select>` menu is selected, the array element or object property
24564
+ * represented by the selected option will be bound to the model identified by the `ngModel`
24565
+ * directive.
24566
+ *
24567
+ * <div class="alert alert-warning">
24568
+ * **Note:** `ngModel` compares by reference, not value. This is important when binding to an
24569
+ * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
24570
+ * </div>
24571
+ *
24572
+ * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
24573
+ * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
24574
+ * option. See example below for demonstration.
24575
+ *
24576
+ * <div class="alert alert-warning">
24577
+ * **Note:** `ngOptions` provides an iterator facility for the `<option>` element which should be used instead
24578
+ * of {@link ng.directive:ngRepeat ngRepeat} when you want the
24579
+ * `select` model to be bound to a non-string value. This is because an option element can only
24580
+ * be bound to string values at present.
24581
+ * </div>
24582
+ *
24583
+ * <div class="alert alert-info">
24584
+ * **Note:** Using `select as` will bind the result of the `select as` expression to the model, but
24585
+ * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
24586
+ * or property name (for object data sources) of the value within the collection.
24587
+ * </div>
24588
+ *
24589
+ * @param {string} ngModel Assignable angular expression to data-bind to.
24590
+ * @param {string=} name Property name of the form under which the control is published.
24591
+ * @param {string=} required The control is considered valid only if value is entered.
24592
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
24593
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
24594
+ * `required` when you want to data-bind to the `required` attribute.
24595
+ * @param {comprehension_expression=} ngOptions in one of the following forms:
24596
+ *
24597
+ * * for array data sources:
24598
+ * * `label` **`for`** `value` **`in`** `array`
24599
+ * * `select` **`as`** `label` **`for`** `value` **`in`** `array`
24600
+ * * `label` **`group by`** `group` **`for`** `value` **`in`** `array`
24601
+ * * `select` **`as`** `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
24602
+ * * for object data sources:
24603
+ * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
24604
+ * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
24605
+ * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`
24606
+ * * `select` **`as`** `label` **`group by`** `group`
24607
+ * **`for` `(`**`key`**`,`** `value`**`) in`** `object`
24608
+ *
24609
+ * Where:
24610
+ *
24611
+ * * `array` / `object`: an expression which evaluates to an array / object to iterate over.
24612
+ * * `value`: local variable which will refer to each item in the `array` or each property value
24613
+ * of `object` during iteration.
24614
+ * * `key`: local variable which will refer to a property name in `object` during iteration.
24615
+ * * `label`: The result of this expression will be the label for `<option>` element. The
24616
+ * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).
24617
+ * * `select`: The result of this expression will be bound to the model of the parent `<select>`
24618
+ * element. If not specified, `select` expression will default to `value`.
24619
+ * * `group`: The result of this expression will be used to group options using the `<optgroup>`
24620
+ * DOM element.
24621
+ * * `trackexpr`: Used when working with an array of objects. The result of this expression will be
24622
+ * used to identify the objects in the array. The `trackexpr` will most likely refer to the
24623
+ * `value` variable (e.g. `value.propertyName`). With this the selection is preserved
24624
+ * even when the options are recreated (e.g. reloaded from the server).
24625
+
24626
+ * <div class="alert alert-info">
24627
+ * **Note:** Using `select as` together with `trackexpr` is not possible (and will throw).
24628
+ * Reasoning:
24629
+ * - Example: <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected">
24630
+ * values: [{id: 1, label: 'aLabel', subItem: {name: 'aSubItem'}}, {id: 2, label: 'bLabel', subItem: {name: 'bSubItemß'}}],
24631
+ * $scope.selected = {name: 'aSubItem'};
24632
+ * - track by is always applied to `value`, with purpose to preserve the selection,
24633
+ * (to `item` in this case)
24634
+ * - to calculate whether an item is selected we do the following:
24635
+ * 1. apply `track by` to the values in the array, e.g.
24636
+ * In the example: [1,2]
24637
+ * 2. apply `track by` to the already selected value in `ngModel`:
24638
+ * In the example: this is not possible, as `track by` refers to `item.id`, but the selected
24639
+ * value from `ngModel` is `{name: aSubItem}`.
24640
+ *
24641
+ * </div>
24642
+ *
24643
+ * @example
24644
+ <example module="selectExample">
24645
+ <file name="index.html">
24646
+ <script>
24647
+ angular.module('selectExample', [])
24648
+ .controller('ExampleController', ['$scope', function($scope) {
24649
+ $scope.colors = [
24650
+ {name:'black', shade:'dark'},
24651
+ {name:'white', shade:'light'},
24652
+ {name:'red', shade:'dark'},
24653
+ {name:'blue', shade:'dark'},
24654
+ {name:'yellow', shade:'light'}
24655
+ ];
24656
+ $scope.myColor = $scope.colors[2]; // red
24657
+ }]);
24658
+ </script>
24659
+ <div ng-controller="ExampleController">
24660
+ <ul>
24661
+ <li ng-repeat="color in colors">
24662
+ Name: <input ng-model="color.name">
24663
+ [<a href ng-click="colors.splice($index, 1)">X</a>]
24664
+ </li>
24665
+ <li>
24666
+ [<a href ng-click="colors.push({})">add</a>]
24667
+ </li>
24668
+ </ul>
24669
+ <hr/>
24670
+ Color (null not allowed):
24671
+ <select ng-model="myColor" ng-options="color.name for color in colors"></select><br>
24672
+
24673
+ Color (null allowed):
24674
+ <span class="nullable">
24675
+ <select ng-model="myColor" ng-options="color.name for color in colors">
24676
+ <option value="">-- choose color --</option>
24677
+ </select>
24678
+ </span><br/>
24679
+
24680
+ Color grouped by shade:
24681
+ <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors">
24682
+ </select><br/>
24683
+
24684
+
24685
+ Select <a href ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</a>.<br>
24686
+ <hr/>
24687
+ Currently selected: {{ {selected_color:myColor} }}
24688
+ <div style="border:solid 1px black; height:20px"
24689
+ ng-style="{'background-color':myColor.name}">
24690
+ </div>
24691
+ </div>
24692
+ </file>
24693
+ <file name="protractor.js" type="protractor">
24694
+ it('should check ng-options', function() {
24695
+ expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');
24696
+ element.all(by.model('myColor')).first().click();
24697
+ element.all(by.css('select[ng-model="myColor"] option')).first().click();
24698
+ expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');
24699
+ element(by.css('.nullable select[ng-model="myColor"]')).click();
24700
+ element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click();
24701
+ expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');
24702
+ });
24703
+ </file>
24704
+ </example>
24705
+ */
24706
+
24707
+var ngOptionsDirective = valueFn({
24708
+ restrict: 'A',
24709
+ terminal: true
24710
+});
24711
+
24712
+// jshint maxlen: false
24713
+var selectDirective = ['$compile', '$parse', function($compile, $parse) {
24714
+ //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888
24715
+ var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\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]+?))?$/,
24716
+ nullModelCtrl = {$setViewValue: noop};
24717
+// jshint maxlen: 100
24718
+
24719
+ return {
24720
+ restrict: 'E',
24721
+ require: ['select', '?ngModel'],
24722
+ controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
24723
+ var self = this,
24724
+ optionsMap = {},
24725
+ ngModelCtrl = nullModelCtrl,
24726
+ nullOption,
24727
+ unknownOption;
24728
+
24729
+
24730
+ self.databound = $attrs.ngModel;
24731
+
24732
+
24733
+ self.init = function(ngModelCtrl_, nullOption_, unknownOption_) {
24734
+ ngModelCtrl = ngModelCtrl_;
24735
+ nullOption = nullOption_;
24736
+ unknownOption = unknownOption_;
24737
+ };
24738
+
24739
+
24740
+ self.addOption = function(value, element) {
24741
+ assertNotHasOwnProperty(value, '"option value"');
24742
+ optionsMap[value] = true;
24743
+
24744
+ if (ngModelCtrl.$viewValue == value) {
24745
+ $element.val(value);
24746
+ if (unknownOption.parent()) unknownOption.remove();
24747
+ }
24748
+ // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459
24749
+ // Adding an <option selected="selected"> element to a <select required="required"> should
24750
+ // automatically select the new element
24751
+ if (element[0].hasAttribute('selected')) {
24752
+ element[0].selected = true;
24753
+ }
24754
+ };
24755
+
24756
+
24757
+ self.removeOption = function(value) {
24758
+ if (this.hasOption(value)) {
24759
+ delete optionsMap[value];
24760
+ if (ngModelCtrl.$viewValue == value) {
24761
+ this.renderUnknownOption(value);
24762
+ }
24763
+ }
24764
+ };
24765
+
24766
+
24767
+ self.renderUnknownOption = function(val) {
24768
+ var unknownVal = '? ' + hashKey(val) + ' ?';
24769
+ unknownOption.val(unknownVal);
24770
+ $element.prepend(unknownOption);
24771
+ $element.val(unknownVal);
24772
+ unknownOption.prop('selected', true); // needed for IE
24773
+ };
24774
+
24775
+
24776
+ self.hasOption = function(value) {
24777
+ return optionsMap.hasOwnProperty(value);
24778
+ };
24779
+
24780
+ $scope.$on('$destroy', function() {
24781
+ // disable unknown option so that we don't do work when the whole select is being destroyed
24782
+ self.renderUnknownOption = noop;
24783
+ });
24784
+ }],
24785
+
24786
+ link: function(scope, element, attr, ctrls) {
24787
+ // if ngModel is not defined, we don't need to do anything
24788
+ if (!ctrls[1]) return;
24789
+
24790
+ var selectCtrl = ctrls[0],
24791
+ ngModelCtrl = ctrls[1],
24792
+ multiple = attr.multiple,
24793
+ optionsExp = attr.ngOptions,
24794
+ nullOption = false, // if false, user will not be able to select it (used by ngOptions)
24795
+ emptyOption,
24796
+ renderScheduled = false,
24797
+ // we can't just jqLite('<option>') since jqLite is not smart enough
24798
+ // to create it in <select> and IE barfs otherwise.
24799
+ optionTemplate = jqLite(document.createElement('option')),
24800
+ optGroupTemplate =jqLite(document.createElement('optgroup')),
24801
+ unknownOption = optionTemplate.clone();
24802
+
24803
+ // find "null" option
24804
+ for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) {
24805
+ if (children[i].value === '') {
24806
+ emptyOption = nullOption = children.eq(i);
24807
+ break;
24808
+ }
24809
+ }
24810
+
24811
+ selectCtrl.init(ngModelCtrl, nullOption, unknownOption);
24812
+
24813
+ // required validator
24814
+ if (multiple) {
24815
+ ngModelCtrl.$isEmpty = function(value) {
24816
+ return !value || value.length === 0;
24817
+ };
24818
+ }
24819
+
24820
+ if (optionsExp) setupAsOptions(scope, element, ngModelCtrl);
24821
+ else if (multiple) setupAsMultiple(scope, element, ngModelCtrl);
24822
+ else setupAsSingle(scope, element, ngModelCtrl, selectCtrl);
24823
+
24824
+
24825
+ ////////////////////////////
24826
+
24827
+
24828
+
24829
+ function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) {
24830
+ ngModelCtrl.$render = function() {
24831
+ var viewValue = ngModelCtrl.$viewValue;
24832
+
24833
+ if (selectCtrl.hasOption(viewValue)) {
24834
+ if (unknownOption.parent()) unknownOption.remove();
24835
+ selectElement.val(viewValue);
24836
+ if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy
24837
+ } else {
24838
+ if (isUndefined(viewValue) && emptyOption) {
24839
+ selectElement.val('');
24840
+ } else {
24841
+ selectCtrl.renderUnknownOption(viewValue);
24842
+ }
24843
+ }
24844
+ };
24845
+
24846
+ selectElement.on('change', function() {
24847
+ scope.$apply(function() {
24848
+ if (unknownOption.parent()) unknownOption.remove();
24849
+ ngModelCtrl.$setViewValue(selectElement.val());
24850
+ });
24851
+ });
24852
+ }
24853
+
24854
+ function setupAsMultiple(scope, selectElement, ctrl) {
24855
+ var lastView;
24856
+ ctrl.$render = function() {
24857
+ var items = new HashMap(ctrl.$viewValue);
24858
+ forEach(selectElement.find('option'), function(option) {
24859
+ option.selected = isDefined(items.get(option.value));
24860
+ });
24861
+ };
24862
+
24863
+ // we have to do it on each watch since ngModel watches reference, but
24864
+ // we need to work of an array, so we need to see if anything was inserted/removed
24865
+ scope.$watch(function selectMultipleWatch() {
24866
+ if (!equals(lastView, ctrl.$viewValue)) {
24867
+ lastView = shallowCopy(ctrl.$viewValue);
24868
+ ctrl.$render();
24869
+ }
24870
+ });
24871
+
24872
+ selectElement.on('change', function() {
24873
+ scope.$apply(function() {
24874
+ var array = [];
24875
+ forEach(selectElement.find('option'), function(option) {
24876
+ if (option.selected) {
24877
+ array.push(option.value);
24878
+ }
24879
+ });
24880
+ ctrl.$setViewValue(array);
24881
+ });
24882
+ });
24883
+ }
24884
+
24885
+ function setupAsOptions(scope, selectElement, ctrl) {
24886
+ var match;
24887
+
24888
+ if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) {
24889
+ throw ngOptionsMinErr('iexp',
24890
+ "Expected expression in form of " +
24891
+ "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
24892
+ " but got '{0}'. Element: {1}",
24893
+ optionsExp, startingTag(selectElement));
24894
+ }
24895
+
24896
+ var displayFn = $parse(match[2] || match[1]),
24897
+ valueName = match[4] || match[6],
24898
+ selectAs = / as /.test(match[0]) && match[1],
24899
+ selectAsFn = selectAs ? $parse(selectAs) : null,
24900
+ keyName = match[5],
24901
+ groupByFn = $parse(match[3] || ''),
24902
+ valueFn = $parse(match[2] ? match[1] : valueName),
24903
+ valuesFn = $parse(match[7]),
24904
+ track = match[8],
24905
+ trackFn = track ? $parse(match[8]) : null,
24906
+ // This is an array of array of existing option groups in DOM.
24907
+ // We try to reuse these if possible
24908
+ // - optionGroupsCache[0] is the options with no option group
24909
+ // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element
24910
+ optionGroupsCache = [[{element: selectElement, label:''}]],
24911
+ //re-usable object to represent option's locals
24912
+ locals = {};
24913
+
24914
+ if (trackFn && selectAsFn) {
24915
+ throw ngOptionsMinErr('trkslct',
24916
+ "Comprehension expression cannot contain both selectAs '{0}' " +
24917
+ "and trackBy '{1}' expressions.",
24918
+ selectAs, track);
24919
+ }
24920
+
24921
+ if (nullOption) {
24922
+ // compile the element since there might be bindings in it
24923
+ $compile(nullOption)(scope);
24924
+
24925
+ // remove the class, which is added automatically because we recompile the element and it
24926
+ // becomes the compilation root
24927
+ nullOption.removeClass('ng-scope');
24928
+
24929
+ // we need to remove it before calling selectElement.empty() because otherwise IE will
24930
+ // remove the label from the element. wtf?
24931
+ nullOption.remove();
24932
+ }
24933
+
24934
+ // clear contents, we'll add what's needed based on the model
24935
+ selectElement.empty();
24936
+
24937
+ selectElement.on('change', selectionChanged);
24938
+
24939
+ ctrl.$render = render;
24940
+
24941
+ scope.$watchCollection(valuesFn, scheduleRendering);
24942
+ scope.$watchCollection(getLabels, scheduleRendering);
24943
+
24944
+ if (multiple) {
24945
+ scope.$watchCollection(function() { return ctrl.$modelValue; }, scheduleRendering);
24946
+ }
24947
+
24948
+ // ------------------------------------------------------------------ //
24949
+
24950
+ function callExpression(exprFn, key, value) {
24951
+ locals[valueName] = value;
24952
+ if (keyName) locals[keyName] = key;
24953
+ return exprFn(scope, locals);
24954
+ }
24955
+
24956
+ function selectionChanged() {
24957
+ scope.$apply(function() {
24958
+ var optionGroup,
24959
+ collection = valuesFn(scope) || [],
24960
+ key, value, optionElement, index, groupIndex, length, groupLength, trackIndex;
24961
+ var viewValue;
24962
+ if (multiple) {
24963
+ viewValue = [];
24964
+ forEach(selectElement.val(), function(selectedKey) {
24965
+ viewValue.push(getViewValue(selectedKey, collection[selectedKey]));
24966
+ });
24967
+ } else {
24968
+ var selectedKey = selectElement.val();
24969
+ viewValue = getViewValue(selectedKey, collection[selectedKey]);
24970
+ }
24971
+ ctrl.$setViewValue(viewValue);
24972
+ render();
24973
+ });
24974
+ }
24975
+
24976
+ function getViewValue(key, value) {
24977
+ if (key === '?') {
24978
+ return undefined;
24979
+ } else if (key === '') {
24980
+ return null;
24981
+ } else {
24982
+ var viewValueFn = selectAsFn ? selectAsFn : valueFn;
24983
+ return callExpression(viewValueFn, key, value);
24984
+ }
24985
+ }
24986
+
24987
+ function getLabels() {
24988
+ var values = valuesFn(scope);
24989
+ var toDisplay;
24990
+ if (values && isArray(values)) {
24991
+ toDisplay = new Array(values.length);
24992
+ for (var i = 0, ii = values.length; i < ii; i++) {
24993
+ toDisplay[i] = callExpression(displayFn, i, values[i]);
24994
+ }
24995
+ return toDisplay;
24996
+ } else if (values) {
24997
+ // TODO: Add a test for this case
24998
+ toDisplay = {};
24999
+ for (var prop in values) {
25000
+ if (values.hasOwnProperty(prop)) {
25001
+ toDisplay[prop] = callExpression(displayFn, prop, values[prop]);
25002
+ }
25003
+ }
25004
+ }
25005
+ return toDisplay;
25006
+ }
25007
+
25008
+ function createIsSelectedFn(viewValue) {
25009
+ var selectedSet;
25010
+ if (multiple) {
25011
+ if (!selectAs && trackFn && isArray(viewValue)) {
25012
+
25013
+ selectedSet = new HashMap([]);
25014
+ for (var trackIndex = 0; trackIndex < viewValue.length; trackIndex++) {
25015
+ // tracking by key
25016
+ selectedSet.put(callExpression(trackFn, null, viewValue[trackIndex]), true);
25017
+ }
25018
+ } else {
25019
+ selectedSet = new HashMap(viewValue);
25020
+ }
25021
+ } else if (!selectAsFn && trackFn) {
25022
+ viewValue = callExpression(trackFn, null, viewValue);
25023
+ }
25024
+ return function isSelected(key, value) {
25025
+ var compareValueFn;
25026
+ if (selectAsFn) {
25027
+ compareValueFn = selectAsFn;
25028
+ } else if (trackFn) {
25029
+ compareValueFn = trackFn;
25030
+ } else {
25031
+ compareValueFn = valueFn;
25032
+ }
25033
+
25034
+ if (multiple) {
25035
+ return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value)));
25036
+ } else {
25037
+ return viewValue == callExpression(compareValueFn, key, value);
25038
+ }
25039
+ };
25040
+ }
25041
+
25042
+ function scheduleRendering() {
25043
+ if (!renderScheduled) {
25044
+ scope.$$postDigest(render);
25045
+ renderScheduled = true;
25046
+ }
25047
+ }
25048
+
25049
+ function render() {
25050
+ renderScheduled = false;
25051
+
25052
+ // Temporary location for the option groups before we render them
25053
+ var optionGroups = {'':[]},
25054
+ optionGroupNames = [''],
25055
+ optionGroupName,
25056
+ optionGroup,
25057
+ option,
25058
+ existingParent, existingOptions, existingOption,
25059
+ viewValue = ctrl.$viewValue,
25060
+ values = valuesFn(scope) || [],
25061
+ keys = keyName ? sortedKeys(values) : values,
25062
+ key,
25063
+ value,
25064
+ groupLength, length,
25065
+ groupIndex, index,
25066
+ selected,
25067
+ isSelected = createIsSelectedFn(viewValue),
25068
+ anySelected = false,
25069
+ lastElement,
25070
+ element,
25071
+ label;
25072
+
25073
+ // We now build up the list of options we need (we merge later)
25074
+ for (index = 0; length = keys.length, index < length; index++) {
25075
+ key = index;
25076
+ if (keyName) {
25077
+ key = keys[index];
25078
+ if ( key.charAt(0) === '$' ) continue;
25079
+ }
25080
+ value = values[key];
25081
+
25082
+ optionGroupName = callExpression(groupByFn, key, value) || '';
25083
+ if (!(optionGroup = optionGroups[optionGroupName])) {
25084
+ optionGroup = optionGroups[optionGroupName] = [];
25085
+ optionGroupNames.push(optionGroupName);
25086
+ }
25087
+
25088
+ selected = isSelected(key, value);
25089
+ anySelected = anySelected || selected;
25090
+
25091
+ label = callExpression(displayFn, key, value); // what will be seen by the user
25092
+
25093
+ // doing displayFn(scope, locals) || '' overwrites zero values
25094
+ label = isDefined(label) ? label : '';
25095
+ optionGroup.push({
25096
+ // either the index into array or key from object
25097
+ id: (keyName ? keys[index] : index),
25098
+ label: label,
25099
+ selected: selected // determine if we should be selected
25100
+ });
25101
+ }
25102
+ if (!multiple) {
25103
+ if (nullOption || viewValue === null) {
25104
+ // insert null option if we have a placeholder, or the model is null
25105
+ optionGroups[''].unshift({id:'', label:'', selected:!anySelected});
25106
+ } else if (!anySelected) {
25107
+ // option could not be found, we have to insert the undefined item
25108
+ optionGroups[''].unshift({id:'?', label:'', selected:true});
25109
+ }
25110
+ }
25111
+
25112
+ // Now we need to update the list of DOM nodes to match the optionGroups we computed above
25113
+ for (groupIndex = 0, groupLength = optionGroupNames.length;
25114
+ groupIndex < groupLength;
25115
+ groupIndex++) {
25116
+ // current option group name or '' if no group
25117
+ optionGroupName = optionGroupNames[groupIndex];
25118
+
25119
+ // list of options for that group. (first item has the parent)
25120
+ optionGroup = optionGroups[optionGroupName];
25121
+
25122
+ if (optionGroupsCache.length <= groupIndex) {
25123
+ // we need to grow the optionGroups
25124
+ existingParent = {
25125
+ element: optGroupTemplate.clone().attr('label', optionGroupName),
25126
+ label: optionGroup.label
25127
+ };
25128
+ existingOptions = [existingParent];
25129
+ optionGroupsCache.push(existingOptions);
25130
+ selectElement.append(existingParent.element);
25131
+ } else {
25132
+ existingOptions = optionGroupsCache[groupIndex];
25133
+ existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element
25134
+
25135
+ // update the OPTGROUP label if not the same.
25136
+ if (existingParent.label != optionGroupName) {
25137
+ existingParent.element.attr('label', existingParent.label = optionGroupName);
25138
+ }
25139
+ }
25140
+
25141
+ lastElement = null; // start at the beginning
25142
+ for(index = 0, length = optionGroup.length; index < length; index++) {
25143
+ option = optionGroup[index];
25144
+ if ((existingOption = existingOptions[index+1])) {
25145
+ // reuse elements
25146
+ lastElement = existingOption.element;
25147
+ if (existingOption.label !== option.label) {
25148
+ lastElement.text(existingOption.label = option.label);
25149
+ }
25150
+ if (existingOption.id !== option.id) {
25151
+ lastElement.val(existingOption.id = option.id);
25152
+ }
25153
+ // lastElement.prop('selected') provided by jQuery has side-effects
25154
+ if (lastElement[0].selected !== option.selected) {
25155
+ lastElement.prop('selected', (existingOption.selected = option.selected));
25156
+ if (msie) {
25157
+ // See #7692
25158
+ // The selected item wouldn't visually update on IE without this.
25159
+ // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well
25160
+ lastElement.prop('selected', existingOption.selected);
25161
+ }
25162
+ }
25163
+ } else {
25164
+ // grow elements
25165
+
25166
+ // if it's a null option
25167
+ if (option.id === '' && nullOption) {
25168
+ // put back the pre-compiled element
25169
+ element = nullOption;
25170
+ } else {
25171
+ // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but
25172
+ // in this version of jQuery on some browser the .text() returns a string
25173
+ // rather then the element.
25174
+ (element = optionTemplate.clone())
25175
+ .val(option.id)
25176
+ .prop('selected', option.selected)
25177
+ .attr('selected', option.selected)
25178
+ .text(option.label);
25179
+ }
25180
+
25181
+ existingOptions.push(existingOption = {
25182
+ element: element,
25183
+ label: option.label,
25184
+ id: option.id,
25185
+ selected: option.selected
25186
+ });
25187
+ selectCtrl.addOption(option.label, element);
25188
+ if (lastElement) {
25189
+ lastElement.after(element);
25190
+ } else {
25191
+ existingParent.element.append(element);
25192
+ }
25193
+ lastElement = element;
25194
+ }
25195
+ }
25196
+ // remove any excessive OPTIONs in a group
25197
+ index++; // increment since the existingOptions[0] is parent element not OPTION
25198
+ while(existingOptions.length > index) {
25199
+ option = existingOptions.pop();
25200
+ selectCtrl.removeOption(option.label);
25201
+ option.element.remove();
25202
+ }
25203
+ }
25204
+ // remove any excessive OPTGROUPs from select
25205
+ while(optionGroupsCache.length > groupIndex) {
25206
+ optionGroupsCache.pop()[0].element.remove();
25207
+ }
25208
+ }
25209
+ }
25210
+ }
25211
+ };
25212
+}];
25213
+
25214
+var optionDirective = ['$interpolate', function($interpolate) {
25215
+ var nullSelectCtrl = {
25216
+ addOption: noop,
25217
+ removeOption: noop
25218
+ };
25219
+
25220
+ return {
25221
+ restrict: 'E',
25222
+ priority: 100,
25223
+ compile: function(element, attr) {
25224
+ if (isUndefined(attr.value)) {
25225
+ var interpolateFn = $interpolate(element.text(), true);
25226
+ if (!interpolateFn) {
25227
+ attr.$set('value', element.text());
25228
+ }
25229
+ }
25230
+
25231
+ return function (scope, element, attr) {
25232
+ var selectCtrlName = '$selectController',
25233
+ parent = element.parent(),
25234
+ selectCtrl = parent.data(selectCtrlName) ||
25235
+ parent.parent().data(selectCtrlName); // in case we are in optgroup
25236
+
25237
+ if (!selectCtrl || !selectCtrl.databound) {
25238
+ selectCtrl = nullSelectCtrl;
25239
+ }
25240
+
25241
+ if (interpolateFn) {
25242
+ scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) {
25243
+ attr.$set('value', newVal);
25244
+ if (oldVal !== newVal) {
25245
+ selectCtrl.removeOption(oldVal);
25246
+ }
25247
+ selectCtrl.addOption(newVal, element);
25248
+ });
25249
+ } else {
25250
+ selectCtrl.addOption(attr.value, element);
25251
+ }
25252
+
25253
+ element.on('$destroy', function() {
25254
+ selectCtrl.removeOption(attr.value);
25255
+ });
25256
+ };
25257
+ }
25258
+ };
25259
+}];
25260
+
25261
+var styleDirective = valueFn({
25262
+ restrict: 'E',
25263
+ terminal: false
25264
+});
25265
+
25266
+ if (window.angular.bootstrap) {
25267
+ //AngularJS is already loaded, so we can return here...
25268
+ console.log('WARNING: Tried to load angular more than once.');
25269
+ return;
25270
+ }
25271
+
25272
+ //try to bind to jquery now so that one can write jqLite(document).ready()
25273
+ //but we will rebind on bootstrap again.
25274
+ bindJQuery();
25275
+
25276
+ publishExternalAPI(angular);
25277
+
25278
+ jqLite(document).ready(function() {
25279
+ angularInit(document, bootstrap);
25280
+ });
25281
+
25282
+})(window, document);
25283
+
25284
+!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
securis/src/main/resources/static/js/angular/angular.min.js
....@@ -1,202 +1,246 @@
11 /*
2
- AngularJS v1.2.9
2
+ AngularJS v1.3.0-rc.5
33 (c) 2010-2014 Google, Inc. http://angularjs.org
44 License: MIT
55 */
6
-(function(Z,Q,r){'use strict';function F(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.9/"+(b?b+"/":"")+a;for(c=1;c<arguments.length;c++)a=a+(1==c?"?":"&")+"p"+(c-1)+"="+encodeURIComponent("function"==typeof arguments[c]?arguments[c].toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof arguments[c]?"undefined":"string"!=typeof arguments[c]?JSON.stringify(arguments[c]):arguments[c]);return Error(a)}}function rb(b){if(null==b||Aa(b))return!1;var a=
7
-b.length;return 1===b.nodeType&&a?!0:D(b)||K(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function q(b,a,c){var d;if(b)if(L(b))for(d in b)"prototype"==d||("length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d))||a.call(c,b[d],d);else if(b.forEach&&b.forEach!==q)b.forEach(a,c);else if(rb(b))for(d=0;d<b.length;d++)a.call(c,b[d],d);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d);return b}function Pb(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push(c);return a.sort()}function Pc(b,
8
-a,c){for(var d=Pb(b),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function Qb(b){return function(a,c){b(c,a)}}function Za(){for(var b=ka.length,a;b;){b--;a=ka[b].charCodeAt(0);if(57==a)return ka[b]="A",ka.join("");if(90==a)ka[b]="0";else return ka[b]=String.fromCharCode(a+1),ka.join("")}ka.unshift("0");return ka.join("")}function Rb(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function t(b){var a=b.$$hashKey;q(arguments,function(a){a!==b&&q(a,function(a,c){b[c]=a})});Rb(b,a);return b}function S(b){return parseInt(b,
9
-10)}function Sb(b,a){return t(new (t(function(){},{prototype:b})),a)}function w(){}function Ba(b){return b}function $(b){return function(){return b}}function z(b){return"undefined"===typeof b}function B(b){return"undefined"!==typeof b}function X(b){return null!=b&&"object"===typeof b}function D(b){return"string"===typeof b}function sb(b){return"number"===typeof b}function La(b){return"[object Date]"===$a.call(b)}function K(b){return"[object Array]"===$a.call(b)}function L(b){return"function"===typeof b}
10
-function ab(b){return"[object RegExp]"===$a.call(b)}function Aa(b){return b&&b.document&&b.location&&b.alert&&b.setInterval}function Qc(b){return!(!b||!(b.nodeName||b.on&&b.find))}function Rc(b,a,c){var d=[];q(b,function(b,g,f){d.push(a.call(c,b,g,f))});return d}function bb(b,a){if(b.indexOf)return b.indexOf(a);for(var c=0;c<b.length;c++)if(a===b[c])return c;return-1}function Ma(b,a){var c=bb(b,a);0<=c&&b.splice(c,1);return a}function aa(b,a){if(Aa(b)||b&&b.$evalAsync&&b.$watch)throw Na("cpws");if(a){if(b===
11
-a)throw Na("cpi");if(K(b))for(var c=a.length=0;c<b.length;c++)a.push(aa(b[c]));else{c=a.$$hashKey;q(a,function(b,c){delete a[c]});for(var d in b)a[d]=aa(b[d]);Rb(a,c)}}else(a=b)&&(K(b)?a=aa(b,[]):La(b)?a=new Date(b.getTime()):ab(b)?a=RegExp(b.source):X(b)&&(a=aa(b,{})));return a}function Tb(b,a){a=a||{};for(var c in b)b.hasOwnProperty(c)&&("$"!==c.charAt(0)&&"$"!==c.charAt(1))&&(a[c]=b[c]);return a}function ua(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,
12
-d;if(c==typeof a&&"object"==c)if(K(b)){if(!K(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ua(b[d],a[d]))return!1;return!0}}else{if(La(b))return La(a)&&b.getTime()==a.getTime();if(ab(b)&&ab(a))return b.toString()==a.toString();if(b&&b.$evalAsync&&b.$watch||a&&a.$evalAsync&&a.$watch||Aa(b)||Aa(a)||K(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!L(b[d])){if(!ua(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==r&&!L(a[d]))return!1;return!0}return!1}
13
-function Ub(){return Q.securityPolicy&&Q.securityPolicy.isActive||Q.querySelector&&!(!Q.querySelector("[ng-csp]")&&!Q.querySelector("[data-ng-csp]"))}function cb(b,a){var c=2<arguments.length?va.call(arguments,2):[];return!L(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,c.concat(va.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Sc(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)?c=r:Aa(a)?c="$WINDOW":
14
-a&&Q===a?c="$DOCUMENT":a&&(a.$evalAsync&&a.$watch)&&(c="$SCOPE");return c}function qa(b,a){return"undefined"===typeof b?r:JSON.stringify(b,Sc,a?" ":null)}function Vb(b){return D(b)?JSON.parse(b):b}function Oa(b){"function"===typeof b?b=!0:b&&0!==b.length?(b=x(""+b),b=!("f"==b||"0"==b||"false"==b||"no"==b||"n"==b||"[]"==b)):b=!1;return b}function ga(b){b=A(b).clone();try{b.empty()}catch(a){}var c=A("<div>").append(b).html();try{return 3===b[0].nodeType?x(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,
15
-function(a,b){return"<"+x(b)})}catch(d){return x(c)}}function Wb(b){try{return decodeURIComponent(b)}catch(a){}}function Xb(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=Wb(c[0]),B(d)&&(b=B(c[1])?Wb(c[1]):!0,a[d]?K(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Yb(b){var a=[];q(b,function(b,d){K(b)?q(b,function(b){a.push(wa(d,!0)+(!0===b?"":"="+wa(b,!0)))}):a.push(wa(d,!0)+(!0===b?"":"="+wa(b,!0)))});return a.length?a.join("&"):""}function tb(b){return wa(b,
16
-!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function wa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Tc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,f=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(f,function(a){f[a]=!0;c(Q.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+
17
-a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&f[b.name]&&(e=a,g=b.value)})}});e&&a(e,g?[g]:[])}function Zb(b,a){var c=function(){b=A(b);if(b.injector()){var c=b[0]===Q?"document":ga(b);throw Na("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=$b(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",
18
-function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(Z&&!d.test(Z.name))return c();Z.name=Z.name.replace(d,"");Ca.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function db(b,a){a=a||"_";return b.replace(Uc,function(b,d){return(d?a:"")+b.toLowerCase()})}function ub(b,a,c){if(!b)throw Na("areq",a||"?",c||"required");return b}function Pa(b,a,c){c&&K(b)&&(b=b[b.length-1]);ub(L(b),a,"not a function, got "+(b&&"object"==typeof b?
19
-b.constructor.name||"Object":typeof b));return b}function xa(b,a){if("hasOwnProperty"===b)throw Na("badname",a);}function vb(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,g=a.length,f=0;f<g;f++)d=a[f],b&&(b=(e=b)[d]);return!c&&L(b)?cb(e,b):b}function wb(b){var a=b[0];b=b[b.length-1];if(a===b)return A(a);var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return A(c)}function Vc(b){var a=F("$injector"),c=F("ng");b=b.angular||(b.angular={});b.$$minErr=b.$$minErr||F;return b.module||
20
-(b.module=function(){var b={};return function(e,g,f){if("hasOwnProperty"===e)throw c("badname","module");g&&b.hasOwnProperty(e)&&(b[e]=null);return b[e]||(b[e]=function(){function b(a,d,e){return function(){c[e||"push"]([a,d,arguments]);return n}}if(!g)throw a("nomod",e);var c=[],d=[],l=b("$injector","invoke"),n={_invokeQueue:c,_runBlocks:d,requires:g,name:e,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:b("$provide","value"),constant:b("$provide",
21
-"constant","unshift"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:l,run:function(a){d.push(a);return this}};f&&l(f);return n}())}}())}function Qa(b){return b.replace(Wc,function(a,b,d,e){return e?d.toUpperCase():d}).replace(Xc,"Moz$1")}function xb(b,a,c,d){function e(b){var e=c&&b?[this.filter(b)]:[this],m=a,k,l,n,p,s,C;if(!d||null!=b)for(;e.length;)for(k=e.shift(),
22
-l=0,n=k.length;l<n;l++)for(p=A(k[l]),m?p.triggerHandler("$destroy"):m=!m,s=0,p=(C=p.children()).length;s<p;s++)e.push(Da(C[s]));return g.apply(this,arguments)}var g=Da.fn[b],g=g.$original||g;e.$original=g;Da.fn[b]=e}function O(b){if(b instanceof O)return b;if(!(this instanceof O)){if(D(b)&&"<"!=b.charAt(0))throw yb("nosel");return new O(b)}if(D(b)){var a=Q.createElement("div");a.innerHTML="<div>&#160;</div>"+b;a.removeChild(a.firstChild);zb(this,a.childNodes);A(Q.createDocumentFragment()).append(this)}else zb(this,
23
-b)}function Ab(b){return b.cloneNode(!0)}function Ea(b){ac(b);var a=0;for(b=b.childNodes||[];a<b.length;a++)Ea(b[a])}function bc(b,a,c,d){if(B(d))throw yb("offargs");var e=la(b,"events");la(b,"handle")&&(z(a)?q(e,function(a,c){Bb(b,c,a);delete e[c]}):q(a.split(" "),function(a){z(c)?(Bb(b,a,e[a]),delete e[a]):Ma(e[a]||[],c)}))}function ac(b,a){var c=b[eb],d=Ra[c];d&&(a?delete Ra[c].data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),bc(b)),delete Ra[c],b[eb]=r))}function la(b,a,c){var d=
24
-b[eb],d=Ra[d||-1];if(B(c))d||(b[eb]=d=++Yc,d=Ra[d]={}),d[a]=c;else return d&&d[a]}function cc(b,a,c){var d=la(b,"data"),e=B(c),g=!e&&B(a),f=g&&!X(a);d||f||la(b,"data",d={});if(e)d[a]=c;else if(g){if(f)return d&&d[a];t(d,a)}else return d}function Cb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Db(b,a){a&&b.setAttribute&&q(a.split(" "),function(a){b.setAttribute("class",ba((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g,
25
-" ").replace(" "+ba(a)+" "," ")))})}function Eb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(a.split(" "),function(a){a=ba(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",ba(c))}}function zb(b,a){if(a){a=a.nodeName||!B(a.length)||Aa(a)?[a]:a;for(var c=0;c<a.length;c++)b.push(a[c])}}function dc(b,a){return fb(b,"$"+(a||"ngController")+"Controller")}function fb(b,a,c){b=A(b);9==b[0].nodeType&&(b=b.find("html"));for(a=K(a)?a:[a];b.length;){for(var d=
26
-0,e=a.length;d<e;d++)if((c=b.data(a[d]))!==r)return c;b=b.parent()}}function ec(b){for(var a=0,c=b.childNodes;a<c.length;a++)Ea(c[a]);for(;b.firstChild;)b.removeChild(b.firstChild)}function fc(b,a){var c=gb[a.toLowerCase()];return c&&gc[b.nodeName]&&c}function Zc(b,a){var c=function(c,e){c.preventDefault||(c.preventDefault=function(){c.returnValue=!1});c.stopPropagation||(c.stopPropagation=function(){c.cancelBubble=!0});c.target||(c.target=c.srcElement||Q);if(z(c.defaultPrevented)){var g=c.preventDefault;
27
-c.preventDefault=function(){c.defaultPrevented=!0;g.call(c)};c.defaultPrevented=!1}c.isDefaultPrevented=function(){return c.defaultPrevented||!1===c.returnValue};var f=Tb(a[e||c.type]||[]);q(f,function(a){a.call(b,c)});8>=M?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Fa(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c===
28
-r&&(c=b.$$hashKey=Za()):c=b;return a+":"+c}function Sa(b){q(b,this.put,this)}function hc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace($c,""),c=c.match(ad),q(c[1].split(bd),function(b){b.replace(cd,function(b,c,d){a.push(d)})})),b.$inject=a):K(b)?(c=b.length-1,Pa(b[c],"fn"),a=b.slice(0,c)):Pa(b,"fn",!0);return a}function $b(b){function a(a){return function(b,c){if(X(b))q(b,Qb(a));else return a(b,c)}}function c(a,b){xa(a,"service");if(L(b)||K(b))b=n.instantiate(b);
29
-if(!b.$get)throw Ta("pget",a);return l[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,g,h;q(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(D(a))for(c=Ua(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,g=0,h=d.length;g<h;g++){var f=d[g],m=n.get(f[0]);m[f[1]].apply(m,f[2])}else L(a)?b.push(n.invoke(a)):K(a)?b.push(n.invoke(a)):Pa(a,"module")}catch(s){throw K(a)&&(a=a[a.length-1]),s.message&&(s.stack&&-1==s.stack.indexOf(s.message))&&(s=s.message+"\n"+s.stack),
30
-Ta("modulerr",a,s.stack||s.message||s);}}});return b}function g(a,b){function c(d){if(a.hasOwnProperty(d)){if(a[d]===f)throw Ta("cdep",m.join(" <- "));return a[d]}try{return m.unshift(d),a[d]=f,a[d]=b(d)}catch(e){throw a[d]===f&&delete a[d],e;}finally{m.shift()}}function d(a,b,e){var g=[],h=hc(a),f,k,m;k=0;for(f=h.length;k<f;k++){m=h[k];if("string"!==typeof m)throw Ta("itkn",m);g.push(e&&e.hasOwnProperty(m)?e[m]:c(m))}a.$inject||(a=a[f]);return a.apply(b,g)}return{invoke:d,instantiate:function(a,
31
-b){var c=function(){},e;c.prototype=(K(a)?a[a.length-1]:a).prototype;c=new c;e=d(a,c,b);return X(e)||L(e)?e:c},get:c,annotate:hc,has:function(b){return l.hasOwnProperty(b+h)||a.hasOwnProperty(b)}}}var f={},h="Provider",m=[],k=new Sa,l={$provide:{provider:a(c),factory:a(d),service:a(function(a,b){return d(a,["$injector",function(a){return a.instantiate(b)}])}),value:a(function(a,b){return d(a,$(b))}),constant:a(function(a,b){xa(a,"constant");l[a]=b;p[a]=b}),decorator:function(a,b){var c=n.get(a+h),
32
-d=c.$get;c.$get=function(){var a=s.invoke(d,c);return s.invoke(b,null,{$delegate:a})}}}},n=l.$injector=g(l,function(){throw Ta("unpr",m.join(" <- "));}),p={},s=p.$injector=g(p,function(a){a=n.get(a+h);return s.invoke(a.$get,a)});q(e(b),function(a){s.invoke(a||w)});return s}function dd(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;q(a,function(a){b||"a"!==x(a.nodeName)||(b=a)});return b}function g(){var b=
33
-c.hash(),d;b?(d=f.getElementById(b))?d.scrollIntoView():(d=e(f.getElementsByName(b)))?d.scrollIntoView():"top"===b&&a.scrollTo(0,0):a.scrollTo(0,0)}var f=a.document;b&&d.$watch(function(){return c.hash()},function(){d.$evalAsync(g)});return g}]}function ed(b,a,c,d){function e(a){try{a.apply(null,va.call(arguments,1))}finally{if(C--,0===C)for(;y.length;)try{y.pop()()}catch(b){c.error(b)}}}function g(a,b){(function T(){q(E,function(a){a()});u=b(T,a)})()}function f(){v=null;R!=h.url()&&(R=h.url(),q(ha,
34
-function(a){a(h.url())}))}var h=this,m=a[0],k=b.location,l=b.history,n=b.setTimeout,p=b.clearTimeout,s={};h.isMock=!1;var C=0,y=[];h.$$completeOutstandingRequest=e;h.$$incOutstandingRequestCount=function(){C++};h.notifyWhenNoOutstandingRequests=function(a){q(E,function(a){a()});0===C?a():y.push(a)};var E=[],u;h.addPollFn=function(a){z(u)&&g(100,n);E.push(a);return a};var R=k.href,H=a.find("base"),v=null;h.url=function(a,c){k!==b.location&&(k=b.location);l!==b.history&&(l=b.history);if(a){if(R!=a)return R=
35
-a,d.history?c?l.replaceState(null,"",a):(l.pushState(null,"",a),H.attr("href",H.attr("href"))):(v=a,c?k.replace(a):k.href=a),h}else return v||k.href.replace(/%27/g,"'")};var ha=[],N=!1;h.onUrlChange=function(a){if(!N){if(d.history)A(b).on("popstate",f);if(d.hashchange)A(b).on("hashchange",f);else h.addPollFn(f);N=!0}ha.push(a);return a};h.baseHref=function(){var a=H.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var V={},J="",ca=h.baseHref();h.cookies=function(a,b){var d,e,g,h;if(a)b===
36
-r?m.cookie=escape(a)+"=;path="+ca+";expires=Thu, 01 Jan 1970 00:00:00 GMT":D(b)&&(d=(m.cookie=escape(a)+"="+escape(b)+";path="+ca).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(m.cookie!==J)for(J=m.cookie,d=J.split("; "),V={},g=0;g<d.length;g++)e=d[g],h=e.indexOf("="),0<h&&(a=unescape(e.substring(0,h)),V[a]===r&&(V[a]=unescape(e.substring(h+1))));return V}};h.defer=function(a,b){var c;C++;c=n(function(){delete s[c];
37
-e(a)},b||0);s[c]=!0;return c};h.defer.cancel=function(a){return s[a]?(delete s[a],p(a),e(w),!0):!1}}function fd(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new ed(b,d,a,c)}]}function gd(){this.$get=function(){function b(b,d){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,g(a.n,a.p),g(a,n),n=a,n.n=null)}function g(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw F("$cacheFactory")("iid",b);var f=0,h=t({},d,{id:b}),m={},k=d&&d.capacity||Number.MAX_VALUE,l={},n=null,p=null;
38
-return a[b]={put:function(a,b){var c=l[a]||(l[a]={key:a});e(c);if(!z(b))return a in m||f++,m[a]=b,f>k&&this.remove(p.key),b},get:function(a){var b=l[a];if(b)return e(b),m[a]},remove:function(a){var b=l[a];b&&(b==n&&(n=b.p),b==p&&(p=b.n),g(b.n,b.p),delete l[a],delete m[a],f--)},removeAll:function(){m={};f=0;l={};n=p=null},destroy:function(){l=h=m=null;delete a[b]},info:function(){return t({},h,{size:f})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};
39
-return b}}function hd(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function jc(b,a){var c={},d="Directive",e=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,g=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,f=/^(on[a-z]+|formaction)$/;this.directive=function m(a,e){xa(a,"directive");D(a)?(ub(e,"directiveFactory"),c.hasOwnProperty(a)||(c[a]=[],b.factory(a+d,["$injector","$exceptionHandler",function(b,d){var e=[];q(c[a],function(c,g){try{var f=b.invoke(c);L(f)?f={compile:$(f)}:!f.compile&&f.link&&(f.compile=
40
-$(f.link));f.priority=f.priority||0;f.index=g;f.name=f.name||a;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(m){d(m)}});return e}])),c[a].push(e)):q(a,Qb(m));return this};this.aHrefSanitizationWhitelist=function(b){return B(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};this.$get=["$injector","$interpolate",
41
-"$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,l,n,p,s,C,y,E,u,R,H){function v(a,b,c,d,e){a instanceof A||(a=A(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=A(b).wrap("<span></span>").parent()[0])});var g=N(a,b,a,c,d,e);ha(a,"ng-scope");return function(b,c,d){ub(b,"scope");var e=c?Ga.clone.call(a):a;q(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var f=e.length;d<f;d++){var m=
42
-e[d].nodeType;1!==m&&9!==m||e.eq(d).data("$scope",b)}c&&c(e,b);g&&g(b,e,e);return e}}function ha(a,b){try{a.addClass(b)}catch(c){}}function N(a,b,c,d,e,g){function f(a,c,d,e){var g,k,s,l,n,p,I;g=c.length;var C=Array(g);for(n=0;n<g;n++)C[n]=c[n];I=n=0;for(p=m.length;n<p;I++)k=C[I],c=m[n++],g=m[n++],s=A(k),c?(c.scope?(l=a.$new(),s.data("$scope",l)):l=a,(s=c.transclude)||!e&&b?c(g,l,k,d,V(a,s||b)):c(g,l,k,d,e)):g&&g(a,k.childNodes,r,e)}for(var m=[],k,s,l,n,p=0;p<a.length;p++)k=new Fb,s=J(a[p],[],k,0===
43
-p?d:r,e),(g=s.length?ia(s,a[p],k,b,c,null,[],[],g):null)&&g.scope&&ha(A(a[p]),"ng-scope"),k=g&&g.terminal||!(l=a[p].childNodes)||!l.length?null:N(l,g?g.transclude:b),m.push(g,k),n=n||g||k,g=null;return n?f:null}function V(a,b){return function(c,d,e){var g=!1;c||(c=a.$new(),g=c.$$transcluded=!0);d=b(c,d,e);if(g)d.on("$destroy",cb(c,c.$destroy));return d}}function J(a,b,c,d,f){var k=c.$attr,m;switch(a.nodeType){case 1:T(b,ma(Ha(a).toLowerCase()),"E",d,f);var s,l,n;m=a.attributes;for(var p=0,C=m&&m.length;p<
44
-C;p++){var y=!1,R=!1;s=m[p];if(!M||8<=M||s.specified){l=s.name;n=ma(l);W.test(n)&&(l=db(n.substr(6),"-"));var v=n.replace(/(Start|End)$/,"");n===v+"Start"&&(y=l,R=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));n=ma(l.toLowerCase());k[n]=l;c[n]=s=ba(s.value);fc(a,n)&&(c[n]=!0);S(a,b,s,n);T(b,n,"A",d,f,y,R)}}a=a.className;if(D(a)&&""!==a)for(;m=g.exec(a);)n=ma(m[2]),T(b,n,"C",d,f)&&(c[n]=ba(m[3])),a=a.substr(m.index+m[0].length);break;case 3:F(b,a.nodeValue);break;case 8:try{if(m=e.exec(a.nodeValue))n=
45
-ma(m[1]),T(b,n,"M",d,f)&&(c[n]=ba(m[2]))}catch(E){}}b.sort(z);return b}function ca(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ja("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return A(d)}function P(a,b,c){return function(d,e,g,f,m){e=ca(e[0],b,c);return a(d,e,g,f,m)}}function ia(a,c,d,e,g,f,m,n,p){function y(a,b,c,d){if(a){c&&(a=P(a,c,d));a.require=G.require;if(H===G||G.$$isolateScope)a=
46
-kc(a,{isolateScope:!0});m.push(a)}if(b){c&&(b=P(b,c,d));b.require=G.require;if(H===G||G.$$isolateScope)b=kc(b,{isolateScope:!0});n.push(b)}}function R(a,b,c){var d,e="data",g=!1;if(D(a)){for(;"^"==(d=a.charAt(0))||"?"==d;)a=a.substr(1),"^"==d&&(e="inheritedData"),g=g||"?"==d;d=null;c&&"data"===e&&(d=c[a]);d=d||b[e]("$"+a+"Controller");if(!d&&!g)throw ja("ctreq",a,da);}else K(a)&&(d=[],q(a,function(a){d.push(R(a,b,c))}));return d}function E(a,e,g,f,p){function y(a,b){var c;2>arguments.length&&(b=a,
47
-a=r);z&&(c=ca);return p(a,b,c)}var I,v,N,u,P,J,ca={},hb;I=c===g?d:Tb(d,new Fb(A(g),d.$attr));v=I.$$element;if(H){var T=/^\s*([@=&])(\??)\s*(\w*)\s*$/;f=A(g);J=e.$new(!0);ia&&ia===H.$$originalDirective?f.data("$isolateScope",J):f.data("$isolateScopeNoTemplate",J);ha(f,"ng-isolate-scope");q(H.scope,function(a,c){var d=a.match(T)||[],g=d[3]||c,f="?"==d[2],d=d[1],m,l,n,p;J.$$isolateBindings[c]=d+g;switch(d){case "@":I.$observe(g,function(a){J[c]=a});I.$$observers[g].$$scope=e;I[g]&&(J[c]=b(I[g])(e));
48
-break;case "=":if(f&&!I[g])break;l=s(I[g]);p=l.literal?ua:function(a,b){return a===b};n=l.assign||function(){m=J[c]=l(e);throw ja("nonassign",I[g],H.name);};m=J[c]=l(e);J.$watch(function(){var a=l(e);p(a,J[c])||(p(a,m)?n(e,a=J[c]):J[c]=a);return m=a},null,l.literal);break;case "&":l=s(I[g]);J[c]=function(a){return l(e,a)};break;default:throw ja("iscp",H.name,c,a);}})}hb=p&&y;V&&q(V,function(a){var b={$scope:a===H||a.$$isolateScope?J:e,$element:v,$attrs:I,$transclude:hb},c;P=a.controller;"@"==P&&(P=
49
-I[a.name]);c=C(P,b);ca[a.name]=c;z||v.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(N=m.length;f<N;f++)try{u=m[f],u(u.isolateScope?J:e,v,I,u.require&&R(u.require,v,ca),hb)}catch(G){l(G,ga(v))}f=e;H&&(H.template||null===H.templateUrl)&&(f=J);a&&a(f,g.childNodes,r,p);for(f=n.length-1;0<=f;f--)try{u=n[f],u(u.isolateScope?J:e,v,I,u.require&&R(u.require,v,ca),hb)}catch(B){l(B,ga(v))}}p=p||{};var N=-Number.MAX_VALUE,u,V=p.controllerDirectives,H=p.newIsolateScopeDirective,
50
-ia=p.templateDirective;p=p.nonTlbTranscludeDirective;for(var T=!1,z=!1,t=d.$$element=A(c),G,da,U,F=e,O,M=0,na=a.length;M<na;M++){G=a[M];var Va=G.$$start,S=G.$$end;Va&&(t=ca(c,Va,S));U=r;if(N>G.priority)break;if(U=G.scope)u=u||G,G.templateUrl||(x("new/isolated scope",H,G,t),X(U)&&(H=G));da=G.name;!G.templateUrl&&G.controller&&(U=G.controller,V=V||{},x("'"+da+"' controller",V[da],G,t),V[da]=G);if(U=G.transclude)T=!0,G.$$tlb||(x("transclusion",p,G,t),p=G),"element"==U?(z=!0,N=G.priority,U=ca(c,Va,S),
51
-t=d.$$element=A(Q.createComment(" "+da+": "+d[da]+" ")),c=t[0],ib(g,A(va.call(U,0)),c),F=v(U,e,N,f&&f.name,{nonTlbTranscludeDirective:p})):(U=A(Ab(c)).contents(),t.empty(),F=v(U,e));if(G.template)if(x("template",ia,G,t),ia=G,U=L(G.template)?G.template(t,d):G.template,U=Y(U),G.replace){f=G;U=A("<div>"+ba(U)+"</div>").contents();c=U[0];if(1!=U.length||1!==c.nodeType)throw ja("tplrt",da,"");ib(g,t,c);na={$attr:{}};U=J(c,[],na);var W=a.splice(M+1,a.length-(M+1));H&&ic(U);a=a.concat(U).concat(W);B(d,na);
52
-na=a.length}else t.html(U);if(G.templateUrl)x("template",ia,G,t),ia=G,G.replace&&(f=G),E=w(a.splice(M,a.length-M),t,d,g,F,m,n,{controllerDirectives:V,newIsolateScopeDirective:H,templateDirective:ia,nonTlbTranscludeDirective:p}),na=a.length;else if(G.compile)try{O=G.compile(t,d,F),L(O)?y(null,O,Va,S):O&&y(O.pre,O.post,Va,S)}catch(Z){l(Z,ga(t))}G.terminal&&(E.terminal=!0,N=Math.max(N,G.priority))}E.scope=u&&!0===u.scope;E.transclude=T&&F;return E}function ic(a){for(var b=0,c=a.length;b<c;b++)a[b]=Sb(a[b],
53
-{$$isolateScope:!0})}function T(b,e,g,f,k,s,n){if(e===k)return null;k=null;if(c.hasOwnProperty(e)){var p;e=a.get(e+d);for(var C=0,y=e.length;C<y;C++)try{p=e[C],(f===r||f>p.priority)&&-1!=p.restrict.indexOf(g)&&(s&&(p=Sb(p,{$$start:s,$$end:n})),b.push(p),k=p)}catch(v){l(v)}}return k}function B(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,g){"class"==g?(ha(e,b),a["class"]=(a["class"]?a["class"]+
54
-" ":"")+b):"style"==g?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==g.charAt(0)||a.hasOwnProperty(g)||(a[g]=b,d[g]=c[g])})}function w(a,b,c,d,e,g,f,m){var k=[],s,l,C=b[0],y=a.shift(),v=t({},y,{templateUrl:null,transclude:null,replace:null,$$originalDirective:y}),R=L(y.templateUrl)?y.templateUrl(b,c):y.templateUrl;b.empty();n.get(u.getTrustedResourceUrl(R),{cache:p}).success(function(n){var p,E;n=Y(n);if(y.replace){n=A("<div>"+ba(n)+"</div>").contents();p=n[0];if(1!=
55
-n.length||1!==p.nodeType)throw ja("tplrt",y.name,R);n={$attr:{}};ib(d,b,p);var u=J(p,[],n);X(y.scope)&&ic(u);a=u.concat(a);B(c,n)}else p=C,b.html(n);a.unshift(v);s=ia(a,p,c,e,b,y,g,f,m);q(d,function(a,c){a==p&&(d[c]=b[0])});for(l=N(b[0].childNodes,e);k.length;){n=k.shift();E=k.shift();var H=k.shift(),ha=k.shift(),u=b[0];E!==C&&(u=Ab(p),ib(H,A(E),u));E=s.transclude?V(n,s.transclude):ha;s(l,n,u,d,E)}k=null}).error(function(a,b,c,d){throw ja("tpload",d.url);});return function(a,b,c,d,e){k?(k.push(b),
56
-k.push(c),k.push(d),k.push(e)):s(l,b,c,d,e)}}function z(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 x(a,b,c,d){if(b)throw ja("multidir",b.name,c.name,a,ga(d));}function F(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:$(function(a,b){var c=b.parent(),e=c.data("$binding")||[];e.push(d);ha(c.data("$binding",e),"ng-binding");a.$watch(d,function(a){b[0].nodeValue=a})})})}function O(a,b){if("srcdoc"==b)return u.HTML;var c=Ha(a);if("xlinkHref"==
57
-b||"FORM"==c&&"action"==b||"IMG"!=c&&("src"==b||"ngSrc"==b))return u.RESOURCE_URL}function S(a,c,d,e){var g=b(d,!0);if(g){if("multiple"===e&&"SELECT"===Ha(a))throw ja("selmulti",ga(a));c.push({priority:100,compile:function(){return{pre:function(c,d,m){d=m.$$observers||(m.$$observers={});if(f.test(e))throw ja("nodomevents");if(g=b(m[e],!0,O(a,e)))m[e]=g(c),(d[e]||(d[e]=[])).$$inter=!0,(m.$$observers&&m.$$observers[e].$$scope||c).$watch(g,function(a,b){"class"===e&&a!=b?m.$updateClass(a,b):m.$set(e,
58
-a)})}}}})}}function ib(a,b,c){var d=b[0],e=b.length,g=d.parentNode,f,m;if(a)for(f=0,m=a.length;f<m;f++)if(a[f]==d){a[f++]=c;m=f+e-1;for(var k=a.length;f<k;f++,m++)m<k?a[f]=a[m]:delete a[f];a.length-=e-1;break}g&&g.replaceChild(c,d);a=Q.createDocumentFragment();a.appendChild(d);c[A.expando]=d[A.expando];d=1;for(e=b.length;d<e;d++)g=b[d],A(g).remove(),a.appendChild(g),delete b[d];b[0]=c;b.length=1}function kc(a,b){return t(function(){return a.apply(null,arguments)},a,b)}var Fb=function(a,b){this.$$element=
59
-a;this.$attr=b||{}};Fb.prototype={$normalize:ma,$addClass:function(a){a&&0<a.length&&R.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&R.removeClass(this.$$element,a)},$updateClass:function(a,b){this.$removeClass(lc(b,a));this.$addClass(lc(a,b))},$set:function(a,b,c,d){var e=fc(this.$$element[0],a);e&&(this.$$element.prop(a,b),d=e);this[a]=b;d?this.$attr[a]=d:(d=this.$attr[a])||(this.$attr[a]=d=db(a,"-"));e=Ha(this.$$element);if("A"===e&&"href"===a||"IMG"===e&&"src"===a)this[a]=
60
-b=H(b,"src"===a);!1!==c&&(null===b||b===r?this.$$element.removeAttr(d):this.$$element.attr(d,b));(c=this.$$observers)&&q(c[a],function(a){try{a(b)}catch(c){l(c)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers={}),e=d[a]||(d[a]=[]);e.push(b);y.$evalAsync(function(){e.$$inter||b(c[a])});return b}};var da=b.startSymbol(),na=b.endSymbol(),Y="{{"==da||"}}"==na?Ba:function(a){return a.replace(/\{\{/g,da).replace(/}}/g,na)},W=/^ngAttr[A-Z]/;return v}]}function ma(b){return Qa(b.replace(id,
61
-""))}function lc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),g=0;a:for(;g<d.length;g++){for(var f=d[g],h=0;h<e.length;h++)if(f==e[h])continue a;c+=(0<c.length?" ":"")+f}return c}function jd(){var b={},a=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,d){xa(a,"controller");X(a)?t(b,a):b[a]=d};this.$get=["$injector","$window",function(c,d){return function(e,g){var f,h,m;D(e)&&(f=e.match(a),h=f[1],m=f[3],e=b.hasOwnProperty(h)?b[h]:vb(g.$scope,h,!0)||vb(d,h,!0),Pa(e,h,!0));f=c.instantiate(e,g);
62
-if(m){if(!g||"object"!=typeof g.$scope)throw F("$controller")("noscp",h||e.name,m);g.$scope[m]=f}return f}}]}function kd(){this.$get=["$window",function(b){return A(b.document)}]}function ld(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function mc(b){var a={},c,d,e;if(!b)return a;q(b.split("\n"),function(b){e=b.indexOf(":");c=x(ba(b.substr(0,e)));d=ba(b.substr(e+1));c&&(a[c]=a[c]?a[c]+(", "+d):d)});return a}function nc(b){var a=X(b)?b:r;return function(c){a||
63
-(a=mc(b));return c?a[x(c)]||null:a}}function oc(b,a,c){if(L(c))return c(b,a);q(c,function(c){b=c(b,a)});return b}function md(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d={"Content-Type":"application/json;charset=utf-8"},e=this.defaults={transformResponse:[function(d){D(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=Vb(d)));return d}],transformRequest:[function(a){return X(a)&&"[object File]"!==$a.call(a)?qa(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:aa(d),
64
-put:aa(d),patch:aa(d)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},g=this.interceptors=[],f=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a,b,c,d,n,p){function s(a){function c(a){var b=t({},a,{data:oc(a.data,a.headers,d.transformResponse)});return 200<=a.status&&300>a.status?b:n.reject(b)}var d={transformRequest:e.transformRequest,transformResponse:e.transformResponse},g=function(a){function b(a){var c;q(a,function(b,
65
-d){L(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=t({},a.headers),g,f,c=t({},c.common,c[x(a.method)]);b(c);b(d);a:for(g in c){a=x(g);for(f in d)if(x(f)===a)continue a;d[g]=c[g]}return d}(a);t(d,a);d.headers=g;d.method=Ia(d.method);(a=Gb(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:r)&&(g[d.xsrfHeaderName||e.xsrfHeaderName]=a);var f=[function(a){g=a.headers;var b=oc(a.data,nc(g),a.transformRequest);z(a.data)&&q(g,function(a,b){"content-type"===x(b)&&delete g[b]});z(a.withCredentials)&&
66
-!z(e.withCredentials)&&(a.withCredentials=e.withCredentials);return C(a,b,g).then(c,c)},r],h=n.when(d);for(q(u,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),h=h.then(a,k)}h.success=function(a){h.then(function(b){a(b.data,b.status,b.headers,d)});return h};h.error=function(a){h.then(null,function(b){a(b.data,b.status,b.headers,d)});return h};return h}function C(b,
67
-c,g){function f(a,b,c){u&&(200<=a&&300>a?u.put(r,[a,b,mc(c)]):u.remove(r));m(b,a,c);d.$$phase||d.$apply()}function m(a,c,d){c=Math.max(c,0);(200<=c&&300>c?p.resolve:p.reject)({data:a,status:c,headers:nc(d),config:b})}function k(){var a=bb(s.pendingRequests,b);-1!==a&&s.pendingRequests.splice(a,1)}var p=n.defer(),C=p.promise,u,q,r=y(b.url,b.params);s.pendingRequests.push(b);C.then(k,k);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(u=X(b.cache)?b.cache:X(e.cache)?e.cache:E);if(u)if(q=u.get(r),
68
-B(q)){if(q.then)return q.then(k,k),q;K(q)?m(q[1],q[0],aa(q[2])):m(q,200,{})}else u.put(r,C);z(q)&&a(b.method,r,c,f,g,b.timeout,b.withCredentials,b.responseType);return C}function y(a,b){if(!b)return a;var c=[];Pc(b,function(a,b){null===a||z(a)||(K(a)||(a=[a]),q(a,function(a){X(a)&&(a=qa(a));c.push(wa(b)+"="+wa(a))}))});return a+(-1==a.indexOf("?")?"?":"&")+c.join("&")}var E=c("$http"),u=[];q(g,function(a){u.unshift(D(a)?p.get(a):p.invoke(a))});q(f,function(a,b){var c=D(a)?p.get(a):p.invoke(a);u.splice(b,
69
-0,{response:function(a){return c(n.when(a))},responseError:function(a){return c(n.reject(a))}})});s.pendingRequests=[];(function(a){q(arguments,function(a){s[a]=function(b,c){return s(t(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){s[a]=function(b,c,d){return s(t(d||{},{method:a,url:b,data:c}))}})})("post","put");s.defaults=e;return s}]}function nd(b){return 8>=M&&"patch"===x(b)?new ActiveXObject("Microsoft.XMLHTTP"):new Z.XMLHttpRequest}function od(){this.$get=
70
-["$browser","$window","$document",function(b,a,c){return pd(b,nd,b.defer,a.angular.callbacks,c[0])}]}function pd(b,a,c,d,e){function g(a,b){var c=e.createElement("script"),d=function(){c.onreadystatechange=c.onload=c.onerror=null;e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;M&&8>=M?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=function(){d()};e.body.appendChild(c);return d}var f=-1;return function(e,m,k,l,n,p,s,C){function y(){u=f;
71
-H&&H();v&&v.abort()}function E(a,d,e,g){r&&c.cancel(r);H=v=null;d=0===d?e?200:404:d;a(1223==d?204:d,e,g);b.$$completeOutstandingRequest(w)}var u;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==x(e)){var R="_"+(d.counter++).toString(36);d[R]=function(a){d[R].data=a};var H=g(m.replace("JSON_CALLBACK","angular.callbacks."+R),function(){d[R].data?E(l,200,d[R].data):E(l,u||-2);d[R]=Ca.noop})}else{var v=a(e);v.open(e,m,!0);q(n,function(a,b){B(a)&&v.setRequestHeader(b,a)});v.onreadystatechange=
72
-function(){if(v&&4==v.readyState){var a=null,b=null;u!==f&&(a=v.getAllResponseHeaders(),b="response"in v?v.response:v.responseText);E(l,u||v.status,b,a)}};s&&(v.withCredentials=!0);C&&(v.responseType=C);v.send(k||null)}if(0<p)var r=c(y,p);else p&&p.then&&p.then(y)}}function qd(){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 g(g,k,l){for(var n,p,s=0,C=[],
73
-y=g.length,E=!1,u=[];s<y;)-1!=(n=g.indexOf(b,s))&&-1!=(p=g.indexOf(a,n+f))?(s!=n&&C.push(g.substring(s,n)),C.push(s=c(E=g.substring(n+f,p))),s.exp=E,s=p+h,E=!0):(s!=y&&C.push(g.substring(s)),s=y);(y=C.length)||(C.push(""),y=1);if(l&&1<C.length)throw pc("noconcat",g);if(!k||E)return u.length=y,s=function(a){try{for(var b=0,c=y,f;b<c;b++)"function"==typeof(f=C[b])&&(f=f(a),f=l?e.getTrusted(l,f):e.valueOf(f),null===f||z(f)?f="":"string"!=typeof f&&(f=qa(f))),u[b]=f;return u.join("")}catch(h){a=pc("interr",
74
-g,h.toString()),d(a)}},s.exp=g,s.parts=C,s}var f=b.length,h=a.length;g.startSymbol=function(){return b};g.endSymbol=function(){return a};return g}]}function rd(){this.$get=["$rootScope","$window","$q",function(b,a,c){function d(d,f,h,m){var k=a.setInterval,l=a.clearInterval,n=c.defer(),p=n.promise,s=0,C=B(m)&&!m;h=B(h)?h:0;p.then(null,null,d);p.$$intervalId=k(function(){n.notify(s++);0<h&&s>=h&&(n.resolve(s),l(p.$$intervalId),delete e[p.$$intervalId]);C||b.$apply()},f);e[p.$$intervalId]=n;return p}
75
-var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function sd(){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(" "),
76
-SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function qc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=
77
-tb(b[a]);return b.join("/")}function rc(b,a,c){b=ya(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=S(b.port)||td[b.protocol]||null}function sc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ya(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=Xb(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function oa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Wa(b){var a=
78
-b.indexOf("#");return-1==a?b:b.substr(0,a)}function Hb(b){return b.substr(0,Wa(b).lastIndexOf("/")+1)}function tc(b,a){this.$$html5=!0;a=a||"";var c=Hb(b);rc(b,this,b);this.$$parse=function(a){var e=oa(c,a);if(!D(e))throw Ib("ipthprfx",a,c);sc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Yb(this.$$search),b=this.$$hash?"#"+tb(this.$$hash):"";this.$$url=qc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;
79
-if((e=oa(b,d))!==r)return d=e,(e=oa(a,e))!==r?c+(oa("/",e)||e):b+d;if((e=oa(c,d))!==r)return c+e;if(c==d+"/")return c}}function Jb(b,a){var c=Hb(b);rc(b,this,b);this.$$parse=function(d){var e=oa(b,d)||oa(c,d),e="#"==e.charAt(0)?oa(a,e):this.$$html5?e:"";if(!D(e))throw Ib("ihshprfx",d,a);sc(e,this,b);d=this.$$path;var g=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));g.exec(e)||(d=(e=g.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Yb(this.$$search),e=this.$$hash?
80
-"#"+tb(this.$$hash):"";this.$$url=qc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Wa(b)==Wa(a))return a}}function uc(b,a){this.$$html5=!0;Jb.apply(this,arguments);var c=Hb(b);this.$$rewrite=function(d){var e;if(b==Wa(d))return d;if(e=oa(c,d))return b+a+e;if(c===d+"/")return c}}function jb(b){return function(){return this[b]}}function vc(b,a){return function(c){if(z(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ud(){var b=
81
-"",a=!1;this.hashPrefix=function(a){return B(a)?(b=a,this):b};this.html5Mode=function(b){return B(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function f(a){c.$broadcast("$locationChangeSuccess",h.absUrl(),a)}var h,m=d.baseHref(),k=d.url();a?(m=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(m||"/"),e=e.history?tc:uc):(m=Wa(k),e=Jb);h=new e(m,"#"+b);h.$$parse(h.$$rewrite(k));g.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=
82
-A(a.target);"a"!==x(b[0].nodeName);)if(b[0]===g[0]||!(b=b.parent())[0])return;var e=b.prop("href");X(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ya(e.animVal).href);var f=h.$$rewrite(e);e&&(!b.attr("target")&&f&&!a.isDefaultPrevented())&&(a.preventDefault(),f!=d.url()&&(h.$$parse(f),c.$apply(),Z.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);c.$broadcast("$locationChangeStart",
83
-a,b).defaultPrevented?(h.$$parse(b),d.url(b)):f(b)}),c.$$phase||c.$digest())});var l=0;c.$watch(function(){var a=d.url(),b=h.$$replace;l&&a==h.absUrl()||(l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),f(a))}));h.$$replace=!1;return l});return h}]}function vd(){var b=!0,a=this;this.debugEnabled=function(a){return B(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&
84
--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||w;a=!1;try{a=!!e.apply}catch(m){}return a?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ea(b,
85
-a){if("constructor"===b)throw za("isecfld",a);return b}function Xa(b,a){if(b){if(b.constructor===b)throw za("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw za("isecwindow",a);if(b.children&&(b.nodeName||b.on&&b.find))throw za("isecdom",a);}return b}function kb(b,a,c,d,e){e=e||{};a=a.split(".");for(var g,f=0;1<a.length;f++){g=ea(a.shift(),d);var h=b[g];h||(h={},b[g]=h);b=h;b.then&&e.unwrapPromises&&(ra(d),"$$v"in b||function(a){a.then(function(b){a.$$v=b})}(b),b.$$v===r&&(b.$$v=
86
-{}),b=b.$$v)}g=ea(a.shift(),d);return b[g]=c}function wc(b,a,c,d,e,g,f){ea(b,g);ea(a,g);ea(c,g);ea(d,g);ea(e,g);return f.unwrapPromises?function(f,m){var k=m&&m.hasOwnProperty(b)?m:f,l;if(null==k)return k;(k=k[b])&&k.then&&(ra(g),"$$v"in k||(l=k,l.$$v=r,l.then(function(a){l.$$v=a})),k=k.$$v);if(!a)return k;if(null==k)return r;(k=k[a])&&k.then&&(ra(g),"$$v"in k||(l=k,l.$$v=r,l.then(function(a){l.$$v=a})),k=k.$$v);if(!c)return k;if(null==k)return r;(k=k[c])&&k.then&&(ra(g),"$$v"in k||(l=k,l.$$v=r,l.then(function(a){l.$$v=
87
-a})),k=k.$$v);if(!d)return k;if(null==k)return r;(k=k[d])&&k.then&&(ra(g),"$$v"in k||(l=k,l.$$v=r,l.then(function(a){l.$$v=a})),k=k.$$v);if(!e)return k;if(null==k)return r;(k=k[e])&&k.then&&(ra(g),"$$v"in k||(l=k,l.$$v=r,l.then(function(a){l.$$v=a})),k=k.$$v);return k}:function(g,f){var k=f&&f.hasOwnProperty(b)?f:g;if(null==k)return k;k=k[b];if(!a)return k;if(null==k)return r;k=k[a];if(!c)return k;if(null==k)return r;k=k[c];if(!d)return k;if(null==k)return r;k=k[d];return e?null==k?r:k=k[e]:k}}function wd(b,
88
-a){ea(b,a);return function(a,d){return null==a?r:(d&&d.hasOwnProperty(b)?d:a)[b]}}function xd(b,a,c){ea(b,c);ea(a,c);return function(c,e){if(null==c)return r;c=(e&&e.hasOwnProperty(b)?e:c)[b];return null==c?r:c[a]}}function xc(b,a,c){if(Kb.hasOwnProperty(b))return Kb[b];var d=b.split("."),e=d.length,g;if(a.unwrapPromises||1!==e)if(a.unwrapPromises||2!==e)if(a.csp)g=6>e?wc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,g){var f=0,h;do h=wc(d[f++],d[f++],d[f++],d[f++],d[f++],c,a)(b,g),g=r,b=h;while(f<e);
89
-return h};else{var f="var p;\n";q(d,function(b,d){ea(b,c);f+="if(s == null) return undefined;\ns="+(d?"s":'((k&&k.hasOwnProperty("'+b+'"))?k:s)')+'["'+b+'"];\n'+(a.unwrapPromises?'if (s && s.then) {\n pw("'+c.replace(/(["\r\n])/g,"\\$1")+'");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n':"")});var f=f+"return s;",h=new Function("s","k","pw",f);h.toString=$(f);g=a.unwrapPromises?function(a,b){return h(a,b,ra)}:h}else g=xd(d[0],d[1],c);else g=
90
-wd(d[0],c);"hasOwnProperty"!==b&&(Kb[b]=g);return g}function yd(){var b={},a={csp:!1,unwrapPromises:!1,logPromiseWarnings:!0};this.unwrapPromises=function(b){return B(b)?(a.unwrapPromises=!!b,this):a.unwrapPromises};this.logPromiseWarnings=function(b){return B(b)?(a.logPromiseWarnings=b,this):a.logPromiseWarnings};this.$get=["$filter","$sniffer","$log",function(c,d,e){a.csp=d.csp;ra=function(b){a.logPromiseWarnings&&!yc.hasOwnProperty(b)&&(yc[b]=!0,e.warn("[$parse] Promise found in the expression `"+
91
-b+"`. Automatic unwrapping of promises in Angular expressions is deprecated."))};return function(d){var e;switch(typeof d){case "string":if(b.hasOwnProperty(d))return b[d];e=new Lb(a);e=(new Ya(e,c,a)).parse(d,!1);"hasOwnProperty"!==d&&(b[d]=e);return e;case "function":return d;default:return w}}}]}function zd(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return Ad(function(a){b.$evalAsync(a)},a)}]}function Ad(b,a){function c(a){return a}function d(a){return f(a)}var e=function(){var h=
92
-[],m,k;return k={resolve:function(a){if(h){var c=h;h=r;m=g(a);c.length&&b(function(){for(var a,b=0,d=c.length;b<d;b++)a=c[b],m.then(a[0],a[1],a[2])})}},reject:function(a){k.resolve(f(a))},notify:function(a){if(h){var c=h;h.length&&b(function(){for(var b,d=0,e=c.length;d<e;d++)b=c[d],b[2](a)})}},promise:{then:function(b,g,f){var k=e(),C=function(d){try{k.resolve((L(b)?b:c)(d))}catch(e){k.reject(e),a(e)}},y=function(b){try{k.resolve((L(g)?g:d)(b))}catch(c){k.reject(c),a(c)}},E=function(b){try{k.notify((L(f)?
93
-f:c)(b))}catch(d){a(d)}};h?h.push([C,y,E]):m.then(C,y,E);return k.promise},"catch":function(a){return this.then(null,a)},"finally":function(a){function b(a,c){var d=e();c?d.resolve(a):d.reject(a);return d.promise}function d(e,g){var f=null;try{f=(a||c)()}catch(h){return b(h,!1)}return f&&L(f.then)?f.then(function(){return b(e,g)},function(a){return b(a,!1)}):b(e,g)}return this.then(function(a){return d(a,!0)},function(a){return d(a,!1)})}}}},g=function(a){return a&&L(a.then)?a:{then:function(c){var d=
94
-e();b(function(){d.resolve(c(a))});return d.promise}}},f=function(c){return{then:function(g,f){var l=e();b(function(){try{l.resolve((L(f)?f:d)(c))}catch(b){l.reject(b),a(b)}});return l.promise}}};return{defer:e,reject:f,when:function(h,m,k,l){var n=e(),p,s=function(b){try{return(L(m)?m:c)(b)}catch(d){return a(d),f(d)}},C=function(b){try{return(L(k)?k:d)(b)}catch(c){return a(c),f(c)}},y=function(b){try{return(L(l)?l:c)(b)}catch(d){a(d)}};b(function(){g(h).then(function(a){p||(p=!0,n.resolve(g(a).then(s,
95
-C,y)))},function(a){p||(p=!0,n.resolve(C(a)))},function(a){p||n.notify(y(a))})});return n.promise},all:function(a){var b=e(),c=0,d=K(a)?[]:{};q(a,function(a,e){c++;g(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}}}function Bd(){var b=10,a=F("$rootScope"),c=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(d,
96
-e,g,f){function h(){this.$id=Za();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this["this"]=this.$root=this;this.$$destroyed=!1;this.$$asyncQueue=[];this.$$postDigestQueue=[];this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings={}}function m(b){if(p.$$phase)throw a("inprog",p.$$phase);p.$$phase=b}function k(a,b){var c=g(a);Pa(c,b);return c}function l(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&
97
-delete a.$$listenerCount[c];while(a=a.$parent)}function n(){}h.prototype={constructor:h,$new:function(a){a?(a=new h,a.$root=this.$root,a.$$asyncQueue=this.$$asyncQueue,a.$$postDigestQueue=this.$$postDigestQueue):(a=function(){},a.prototype=this,a=new a,a.$id=Za());a["this"]=a;a.$$listeners={};a.$$listenerCount={};a.$parent=this;a.$$watchers=a.$$nextSibling=a.$$childHead=a.$$childTail=null;a.$$prevSibling=this.$$childTail;this.$$childHead?this.$$childTail=this.$$childTail.$$nextSibling=a:this.$$childHead=
98
-this.$$childTail=a;return a},$watch:function(a,b,d){var e=k(a,"watch"),g=this.$$watchers,f={fn:b,last:n,get:e,exp:a,eq:!!d};c=null;if(!L(b)){var h=k(b||w,"listener");f.fn=function(a,b,c){h(c)}}if("string"==typeof a&&e.constant){var m=f.fn;f.fn=function(a,b,c){m.call(this,a,b,c);Ma(g,f)}}g||(g=this.$$watchers=[]);g.unshift(f);return function(){Ma(g,f);c=null}},$watchCollection:function(a,b){var c=this,d,e,f=0,h=g(a),m=[],k={},l=0;return this.$watch(function(){e=h(c);var a,b;if(X(e))if(rb(e))for(d!==
99
-m&&(d=m,l=d.length=0,f++),a=e.length,l!==a&&(f++,d.length=l=a),b=0;b<a;b++)d[b]!==e[b]&&(f++,d[b]=e[b]);else{d!==k&&(d=k={},l=0,f++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,d.hasOwnProperty(b)?d[b]!==e[b]&&(f++,d[b]=e[b]):(l++,d[b]=e[b],f++));if(l>a)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!==e&&(d=e,f++);return f},function(){b(e,d,c)})},$digest:function(){var d,f,g,h,k=this.$$asyncQueue,l=this.$$postDigestQueue,q,v,r=b,N,V=[],J,A,P;m("$digest");c=null;do{v=
100
-!1;for(N=this;k.length;){try{P=k.shift(),P.scope.$eval(P.expression)}catch(B){p.$$phase=null,e(B)}c=null}a:do{if(h=N.$$watchers)for(q=h.length;q--;)try{if(d=h[q])if((f=d.get(N))!==(g=d.last)&&!(d.eq?ua(f,g):"number"==typeof f&&"number"==typeof g&&isNaN(f)&&isNaN(g)))v=!0,c=d,d.last=d.eq?aa(f):f,d.fn(f,g===n?f:g,N),5>r&&(J=4-r,V[J]||(V[J]=[]),A=L(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,A+="; newVal: "+qa(f)+"; oldVal: "+qa(g),V[J].push(A));else if(d===c){v=!1;break a}}catch(t){p.$$phase=
101
-null,e(t)}if(!(h=N.$$childHead||N!==this&&N.$$nextSibling))for(;N!==this&&!(h=N.$$nextSibling);)N=N.$parent}while(N=h);if((v||k.length)&&!r--)throw p.$$phase=null,a("infdig",b,qa(V));}while(v||k.length);for(p.$$phase=null;l.length;)try{l.shift()()}catch(z){e(z)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this!==p&&(q(this.$$listenerCount,cb(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&
102
-(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length||f.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},
103
-$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[bb(c,b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=
104
-!0},defaultPrevented:!1},m=[h].concat(va.call(arguments,1)),k,l;do{d=f.$$listeners[a]||c;h.currentScope=f;k=0;for(l=d.length;k<l;k++)if(d[k])try{d[k].apply(null,m)}catch(p){e(p)}else d.splice(k,1),k--,l--;if(g)break;f=f.$parent}while(f);return h},$broadcast:function(a,b){for(var c=this,d=this,f={name:a,targetScope:this,preventDefault:function(){f.defaultPrevented=!0},defaultPrevented:!1},g=[f].concat(va.call(arguments,1)),h,k;c=d;){f.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,
105
-g)}catch(m){e(m)}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}return f}};var p=new h;return p}]}function Cd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*(https?|ftp|file):|data:image\//;this.aHrefSanitizationWhitelist=function(a){return B(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,g;if(!M||8<=
106
-M)if(g=ya(c).href,""!==g&&!g.match(e))return"unsafe:"+g;return c}}}function Dd(b){if("self"===b)return b;if(D(b)){if(-1<b.indexOf("***"))throw sa("iwcard",b);b=b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08").replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return RegExp("^"+b+"$")}if(ab(b))return RegExp("^"+b.source+"$");throw sa("imatcher");}function zc(b){var a=[];B(b)&&q(b,function(b){a.push(Dd(b))});return a}function Ed(){this.SCE_CONTEXTS=fa;var b=["self"],a=[];this.resourceUrlWhitelist=
107
-function(a){arguments.length&&(b=zc(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=zc(b));return a};this.$get=["$injector",function(c){function d(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 e=function(a){throw sa("unsafe");};c.has("$sanitize")&&(e=c.get("$sanitize"));
108
-var g=d(),f={};f[fa.HTML]=d(g);f[fa.CSS]=d(g);f[fa.URL]=d(g);f[fa.JS]=d(g);f[fa.RESOURCE_URL]=d(f[fa.URL]);return{trustAs:function(a,b){var c=f.hasOwnProperty(a)?f[a]:null;if(!c)throw sa("icontext",a,b);if(null===b||b===r||""===b)return b;if("string"!==typeof b)throw sa("itype",a);return new c(b)},getTrusted:function(c,d){if(null===d||d===r||""===d)return d;var g=f.hasOwnProperty(c)?f[c]:null;if(g&&d instanceof g)return d.$$unwrapTrustedValue();if(c===fa.RESOURCE_URL){var g=ya(d.toString()),l,n,p=
109
-!1;l=0;for(n=b.length;l<n;l++)if("self"===b[l]?Gb(g):b[l].exec(g.href)){p=!0;break}if(p)for(l=0,n=a.length;l<n;l++)if("self"===a[l]?Gb(g):a[l].exec(g.href)){p=!1;break}if(p)return d;throw sa("insecurl",d.toString());}if(c===fa.HTML)return e(d);throw sa("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Fd(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sniffer","$sceDelegate",function(a,c,d){if(b&&c.msie&&8>c.msieDocumentMode)throw sa("iequirks");
110
-var e=aa(fa);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Ba);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var g=e.parseAs,f=e.getTrusted,h=e.trustAs;q(fa,function(a,b){var c=x(b);e[Qa("parse_as_"+c)]=function(b){return g(a,b)};e[Qa("get_trusted_"+c)]=function(b){return f(a,b)};e[Qa("trust_as_"+c)]=function(b){return h(a,
111
-b)}});return e}]}function Gd(){this.$get=["$window","$document",function(b,a){var c={},d=S((/android (\d+)/.exec(x((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),g=a[0]||{},f=g.documentMode,h,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=g.body&&g.body.style,l=!1,n=!1;if(k){for(var p in k)if(l=m.exec(p)){h=l[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||h+"Transition"in k);n=!!("animation"in k||h+"Animation"in
112
-k);!d||l&&n||(l=D(g.body.style.webkitTransition),n=D(g.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f||7<f),hasEvent:function(a){if("input"==a&&9==M)return!1;if(z(c[a])){var b=g.createElement("div");c[a]="on"+a in b}return c[a]},csp:Ub(),vendorPrefix:h,transitions:l,animations:n,android:d,msie:M,msieDocumentMode:f}}]}function Hd(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,h,
113
-m){var k=c.defer(),l=k.promise,n=B(m)&&!m;h=a.defer(function(){try{k.resolve(e())}catch(a){k.reject(a),d(a)}finally{delete g[l.$$timeoutId]}n||b.$apply()},h);l.$$timeoutId=h;g[h]=k;return l}var g={};e.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 e}]}function ya(b,a){var c=b;M&&(Y.setAttribute("href",c),c=Y.href);Y.setAttribute("href",c);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,
114
-""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function Gb(b){b=D(b)?ya(b):b;return b.protocol===Ac.protocol&&b.host===Ac.host}function Id(){this.$get=$(Z)}function Bc(b){function a(d,e){if(X(d)){var g={};q(d,function(b,c){g[c]=a(c,b)});return g}return b.factory(d+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+
115
-c)}}];a("currency",Cc);a("date",Dc);a("filter",Jd);a("json",Kd);a("limitTo",Ld);a("lowercase",Md);a("number",Ec);a("orderBy",Fc);a("uppercase",Nd)}function Jd(){return function(b,a,c){if(!K(b))return b;var d=typeof c,e=[];e.check=function(a){for(var b=0;b<e.length;b++)if(!e[b](a))return!1;return!0};"function"!==d&&(c="boolean"===d&&c?function(a,b){return Ca.equals(a,b)}:function(a,b){b=(""+b).toLowerCase();return-1<(""+a).toLowerCase().indexOf(b)});var g=function(a,b){if("string"==typeof b&&"!"===
116
-b.charAt(0))return!g(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return c(a,b);case "object":switch(typeof b){case "object":return c(a,b);default:for(var d in a)if("$"!==d.charAt(0)&&g(a[d],b))return!0}return!1;case "array":for(d=0;d<a.length;d++)if(g(a[d],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a={$:a};case "object":for(var f in a)(function(b){"undefined"!=typeof a[b]&&e.push(function(c){return g("$"==b?c:
117
-vb(c,b),a[b])})})(f);break;case "function":e.push(a);break;default:return b}d=[];for(f=0;f<b.length;f++){var h=b[f];e.check(h)&&d.push(h)}return d}}function Cc(b){var a=b.NUMBER_FORMATS;return function(b,d){z(d)&&(d=a.CURRENCY_SYM);return Gc(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,2).replace(/\u00A4/g,d)}}function Ec(b){var a=b.NUMBER_FORMATS;return function(b,d){return Gc(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function Gc(b,a,c,d,e){if(isNaN(b)||!isFinite(b))return"";var g=0>b;b=Math.abs(b);
118
-var f=b+"",h="",m=[],k=!1;if(-1!==f.indexOf("e")){var l=f.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&l[3]>e+1?f="0":(h=f,k=!0)}if(k)0<e&&(-1<b&&1>b)&&(h=b.toFixed(e));else{f=(f.split(Hc)[1]||"").length;z(e)&&(e=Math.min(Math.max(a.minFrac,f),a.maxFrac));f=Math.pow(10,e);b=Math.round(b*f)/f;b=(""+b).split(Hc);f=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(f.length>=n+p)for(l=f.length-n,k=0;k<l;k++)0===(l-k)%p&&0!==k&&(h+=c),h+=f.charAt(k);for(k=l;k<f.length;k++)0===(f.length-k)%n&&0!==k&&(h+=c),
119
-h+=f.charAt(k);for(;b.length<e;)b+="0";e&&"0"!==e&&(h+=d+b.substr(0,e))}m.push(g?a.negPre:a.posPre);m.push(h);m.push(g?a.negSuf:a.posSuf);return m.join("")}function Mb(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 W(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 Mb(e,a,d)}}function lb(b,a){return function(c,d){var e=c["get"+b](),g=Ia(a?"SHORT"+b:b);return d[g][e]}}function Dc(b){function a(a){var b;
120
-if(b=a.match(c)){a=new Date(0);var g=0,f=0,h=b[8]?a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=S(b[9]+b[10]),f=S(b[9]+b[11]));h.call(a,S(b[1]),S(b[2])-1,S(b[3]));g=S(b[4]||0)-g;f=S(b[5]||0)-f;h=S(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,g,f,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",f=[],h,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;D(c)&&
121
-(c=Od.test(c)?S(c):a(c));sb(c)&&(c=new Date(c));if(!La(c))return c;for(;e;)(m=Pd.exec(e))?(f=f.concat(va.call(m,1)),e=f.pop()):(f.push(e),e=null);q(f,function(a){h=Qd[a];g+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Kd(){return function(b){return qa(b,!0)}}function Ld(){return function(b,a){if(!K(b)&&!D(b))return b;a=S(a);if(D(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,
122
-e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function Fc(b){return function(a,c,d){function e(a,b){return Oa(b)?function(b,c){return a(c,b)}:a}if(!K(a)||!c)return a;c=K(c)?c:[c];c=Rc(c,function(a){var c=!1,d=a||Ba;if(D(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);d=b(a)}return e(function(a,b){var c;c=d(a);var e=d(b),g=typeof c,f=typeof e;g==f?("string"==g&&(c=c.toLowerCase(),e=e.toLowerCase()),c=c===e?0:c<e?-1:1):c=g<f?-1:1;return c},c)});for(var g=
123
-[],f=0;f<a.length;f++)g.push(a[f]);return g.sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function ta(b){L(b)&&(b={link:b});b.restrict=b.restrict||"AC";return $(b)}function Ic(b,a){function c(a,c){c=c?"-"+db(c,"-"):"";b.removeClass((a?mb:nb)+c).addClass((a?nb:mb)+c)}var d=this,e=b.parent().controller("form")||ob,g=0,f=d.$error={},h=[];d.$name=a.name||a.ngForm;d.$dirty=!1;d.$pristine=!0;d.$valid=!0;d.$invalid=!1;e.$addControl(d);b.addClass(Ja);c(!0);
124
-d.$addControl=function(a){xa(a.$name,"input");h.push(a);a.$name&&(d[a.$name]=a)};d.$removeControl=function(a){a.$name&&d[a.$name]===a&&delete d[a.$name];q(f,function(b,c){d.$setValidity(c,!0,a)});Ma(h,a)};d.$setValidity=function(a,b,h){var n=f[a];if(b)n&&(Ma(n,h),n.length||(g--,g||(c(b),d.$valid=!0,d.$invalid=!1),f[a]=!1,c(!0,a),e.$setValidity(a,!0,d)));else{g||c(b);if(n){if(-1!=bb(n,h))return}else f[a]=n=[],g++,c(!1,a),e.$setValidity(a,!1,d);n.push(h);d.$valid=!1;d.$invalid=!0}};d.$setDirty=function(){b.removeClass(Ja).addClass(pb);
125
-d.$dirty=!0;d.$pristine=!1;e.$setDirty()};d.$setPristine=function(){b.removeClass(pb).addClass(Ja);d.$dirty=!1;d.$pristine=!0;q(h,function(a){a.$setPristine()})}}function pa(b,a,c,d){b.$setValidity(a,c);return c?d:r}function qb(b,a,c,d,e,g){if(!e.android){var f=!1;a.on("compositionstart",function(a){f=!0});a.on("compositionend",function(){f=!1})}var h=function(){if(!f){var e=a.val();Oa(c.ngTrim||"T")&&(e=ba(e));d.$viewValue!==e&&(b.$$phase?d.$setViewValue(e):b.$apply(function(){d.$setViewValue(e)}))}};
126
-if(e.hasEvent("input"))a.on("input",h);else{var m,k=function(){m||(m=g.defer(function(){h();m=null}))};a.on("keydown",function(a){a=a.keyCode;91===a||(15<a&&19>a||37<=a&&40>=a)||k()});if(e.hasEvent("paste"))a.on("paste cut",k)}a.on("change",h);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var l=c.ngPattern;l&&((e=l.match(/^\/(.*)\/([gim]*)$/))?(l=RegExp(e[1],e[2]),e=function(a){return pa(d,"pattern",d.$isEmpty(a)||l.test(a),a)}):e=function(c){var e=b.$eval(l);if(!e||!e.test)throw F("ngPattern")("noregexp",
127
-l,e,ga(a));return pa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var n=S(c.ngMinlength);e=function(a){return pa(d,"minlength",d.$isEmpty(a)||a.length>=n,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var p=S(c.ngMaxlength);e=function(a){return pa(d,"maxlength",d.$isEmpty(a)||a.length<=p,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Nb(b,a){b="ngClass"+b;return function(){return{restrict:"AC",link:function(c,d,e){function g(b){if(!0===
128
-a||c.$index%2===a){var d=f(b||"");h?ua(b,h)||e.$updateClass(d,f(h)):e.$addClass(d)}h=aa(b)}function f(a){if(K(a))return a.join(" ");if(X(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var h;c.$watch(e[b],g,!0);e.$observe("class",function(a){g(c.$eval(e[b]))});"ngClass"!==b&&c.$watch("$index",function(d,g){var h=d&1;if(h!==g&1){var n=f(c.$eval(e[b]));h===a?e.$addClass(n):e.$removeClass(n)}})}}}}var x=function(b){return D(b)?b.toLowerCase():b},Ia=function(b){return D(b)?b.toUpperCase():
129
-b},M,A,Da,va=[].slice,Rd=[].push,$a=Object.prototype.toString,Na=F("ng"),Ca=Z.angular||(Z.angular={}),Ua,Ha,ka=["0","0","0"];M=S((/msie (\d+)/.exec(x(navigator.userAgent))||[])[1]);isNaN(M)&&(M=S((/trident\/.*; rv:(\d+)/.exec(x(navigator.userAgent))||[])[1]));w.$inject=[];Ba.$inject=[];var ba=function(){return String.prototype.trim?function(b){return D(b)?b.trim():b}:function(b){return D(b)?b.replace(/^\s\s*/,"").replace(/\s\s*$/,""):b}}();Ha=9>M?function(b){b=b.nodeName?b:b[0];return b.scopeName&&
130
-"HTML"!=b.scopeName?Ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Uc=/[A-Z]/g,Sd={full:"1.2.9",major:1,minor:2,dot:9,codeName:"enchanted-articulacy"},Ra=O.cache={},eb=O.expando="ng-"+(new Date).getTime(),Yc=1,Jc=Z.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Bb=Z.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},
131
-Wc=/([\:\-\_]+(.))/g,Xc=/^moz([A-Z])/,yb=F("jqLite"),Ga=O.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===Q.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),O(Z).on("load",a))},toString:function(){var b=[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?A(this[b]):A(this[this.length+b])},length:0,push:Rd,sort:[].sort,splice:[].splice},gb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){gb[x(b)]=
132
-b});var gc={};q("input select option textarea button form details".split(" "),function(b){gc[Ia(b)]=!0});q({data:cc,inheritedData:fb,scope:function(b){return A(b).data("$scope")||fb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return A(b).data("$isolateScope")||A(b).data("$isolateScopeNoTemplate")},controller:dc,injector:function(b){return fb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Cb,css:function(b,a,c){a=Qa(a);if(B(c))b.style[a]=c;else{var d;
133
-8>=M&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=M&&(d=""===d?r:d);return d}},attr:function(b,a,c){var d=x(a);if(gb[d])if(B(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||w).specified?d:r;else if(B(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?r:b},prop:function(b,a,c){if(B(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(z(d))return e?
134
-b[e]:"";b[e]=d}var a=[];9>M?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(z(a)){if("SELECT"===Ha(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(z(a))return b.innerHTML;for(var c=0,d=b.childNodes;c<d.length;c++)Ea(d[c]);b.innerHTML=a},empty:ec},function(b,a){O.prototype[a]=function(a,d){var e,g;if(b!==ec&&(2==b.length&&b!==Cb&&b!==
135
-dc?a:d)===r){if(X(a)){for(e=0;e<this.length;e++)if(b===cc)b(this[e],a);else for(g in a)b(this[e],g,a[g]);return this}e=b.$dv;g=e===r?Math.min(this.length,1):this.length;for(var f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<this.length;e++)b(this[e],a,d);return this}});q({removeData:ac,dealoc:Ea,on:function a(c,d,e,g){if(B(g))throw yb("onargs");var f=la(c,"events"),h=la(c,"handle");f||la(c,"events",f={});h||la(c,"handle",h=Zc(c,f));q(d.split(" "),function(d){var g=f[d];if(!g){if("mouseenter"==
136
-d||"mouseleave"==d){var l=Q.body.contains||Q.body.compareDocumentPosition?function(a,c){var d=9===a.nodeType?a.documentElement:a,e=c&&c.parentNode;return a===e||!!(e&&1===e.nodeType&&(d.contains?d.contains(e):a.compareDocumentPosition&&a.compareDocumentPosition(e)&16))}:function(a,c){if(c)for(;c=c.parentNode;)if(c===a)return!0;return!1};f[d]=[];a(c,{mouseleave:"mouseout",mouseenter:"mouseover"}[d],function(a){var c=a.relatedTarget;c&&(c===this||l(this,c))||h(a,d)})}else Jc(c,d,h),f[d]=[];g=f[d]}g.push(e)})},
137
-off:bc,one:function(a,c,d){a=A(a);a.on(c,function g(){a.off(c,d);a.off(c,g)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;Ea(a);q(new O(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];q(a.childNodes,function(a){1===a.nodeType&&c.push(a)});return c},contents:function(a){return a.childNodes||[]},append:function(a,c){q(new O(c),function(c){1!==a.nodeType&&11!==a.nodeType||a.appendChild(c)})},prepend:function(a,c){if(1===a.nodeType){var d=
138
-a.firstChild;q(new O(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=A(c)[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:function(a){Ea(a);var c=a.parentNode;c&&c.removeChild(a)},after:function(a,c){var d=a,e=a.parentNode;q(new O(c),function(a){e.insertBefore(a,d.nextSibling);d=a})},addClass:Eb,removeClass:Db,toggleClass:function(a,c,d){z(d)&&(d=!Cb(a,c));(d?Eb:Db)(a,c)},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){if(a.nextElementSibling)return a.nextElementSibling;
139
-for(a=a.nextSibling;null!=a&&1!==a.nodeType;)a=a.nextSibling;return a},find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Ab,triggerHandler:function(a,c,d){c=(la(a,"events")||{})[c];d=d||[];var e=[{preventDefault:w,stopPropagation:w}];q(c,function(c){c.apply(a,e.concat(d))})}},function(a,c){O.prototype[c]=function(c,e,g){for(var f,h=0;h<this.length;h++)z(f)?(f=a(this[h],c,e,g),B(f)&&(f=A(f))):zb(f,a(this[h],c,e,g));return B(f)?f:this};O.prototype.bind=O.prototype.on;
140
-O.prototype.unbind=O.prototype.off});Sa.prototype={put:function(a,c){this[Fa(a)]=c},get:function(a){return this[Fa(a)]},remove:function(a){var c=this[a=Fa(a)];delete this[a];return c}};var ad=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,bd=/,/,cd=/^\s*(_?)(\S+?)\1\s*$/,$c=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ta=F("$injector"),Td=F("$animate"),Ud=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Td("notcsel",c);this.$$selectors[c.substr(1)]=
141
-e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$timeout",function(a){return{enter:function(d,e,g,f){g?g.after(d):(e&&e[0]||(e=g.parent()),e.append(d));f&&a(f,0,!1)},leave:function(d,e){d.remove();e&&a(e,0,!1)},move:function(a,c,g,f){this.enter(a,c,g,f)},addClass:function(d,e,g){e=D(e)?e:K(e)?e.join(" "):"";q(d,function(a){Eb(a,e)});g&&a(g,0,!1)},removeClass:function(d,e,g){e=D(e)?
142
-e:K(e)?e.join(" "):"";q(d,function(a){Db(a,e)});g&&a(g,0,!1)},enabled:w}}]}],ja=F("$compile");jc.$inject=["$provide","$$sanitizeUriProvider"];var id=/^(x[\:\-_]|data[\:\-_])/i,pc=F("$interpolate"),Vd=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,td={http:80,https:443,ftp:21},Ib=F("$location");uc.prototype=Jb.prototype=tc.prototype={$$html5:!1,$$replace:!1,absUrl:jb("$$absUrl"),url:function(a,c){if(z(a))return this.$$url;var d=Vd.exec(a);d[1]&&this.path(decodeURIComponent(d[1]));(d[2]||d[1])&&this.search(d[3]||
143
-"");this.hash(d[5]||"",c);return this},protocol:jb("$$protocol"),host:jb("$$host"),port:jb("$$port"),path:vc("$$path",function(a){return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(D(a))this.$$search=Xb(a);else if(X(a))this.$$search=a;else throw Ib("isrcharg");break;default:z(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:vc("$$hash",Ba),replace:function(){this.$$replace=!0;return this}};
144
-var za=F("$parse"),yc={},ra,Ka={"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:w,"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return B(d)?B(e)?d+e:d:B(e)?e:r},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(B(d)?d:0)-(B(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"^":function(a,c,d,e){return d(a,c)^e(a,c)},"=":w,"===":function(a,c,d,e){return d(a,c)===e(a,c)},
145
-"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},
146
-"!":function(a,c,d){return!d(a,c)}},Wd={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Lb=function(a){this.options=a};Lb.prototype={constructor:Lb,lex:function(a){this.text=a;this.index=0;this.ch=r;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index<this.text.length;){this.ch=this.text.charAt(this.index);if(this.is("\"'"))this.readString(this.ch);else if(this.isNumber(this.ch)||this.is(".")&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(this.ch))this.readIdent(),this.was("{,")&&
147
-("{"===a[0]&&(c=this.tokens[this.tokens.length-1]))&&(c.json=-1===c.text.indexOf("."));else if(this.is("(){}[].,;:?"))this.tokens.push({index:this.index,text:this.ch,json:this.was(":[,")&&this.is("{[")||this.is("}]:,")}),this.is("{[")&&a.unshift(this.ch),this.is("}]")&&a.shift(),this.index++;else if(this.isWhitespace(this.ch)){this.index++;continue}else{var d=this.ch+this.peek(),e=d+this.peek(2),g=Ka[this.ch],f=Ka[d],h=Ka[e];h?(this.tokens.push({index:this.index,text:e,fn:h}),this.index+=3):f?(this.tokens.push({index:this.index,
148
-text:d,fn:f}),this.index+=2):g?(this.tokens.push({index:this.index,text:this.ch,fn:g,json:this.was("[,:")&&this.is("+-")}),this.index+=1):this.throwError("Unexpected next character ",this.index,this.index+1)}this.lastCh=this.ch}return this.tokens},is:function(a){return-1!==a.indexOf(this.ch)},was:function(a){return-1!==a.indexOf(this.lastCh)},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},isWhitespace:function(a){return" "===
149
-a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=B(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw za("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=x(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=
150
-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++}a*=1;this.tokens.push({index:c,text:a,json:!0,fn:function(){return a}})},readIdent:function(){for(var a=this,c="",d=this.index,e,g,f,h;this.index<this.text.length;){h=this.text.charAt(this.index);if("."===h||this.isIdent(h)||this.isNumber(h))"."===
151
-h&&(e=this.index),c+=h;else break;this.index++}if(e)for(g=this.index;g<this.text.length;){h=this.text.charAt(g);if("("===h){f=c.substr(e-d+1);c=c.substr(0,e-d);this.index=g;break}if(this.isWhitespace(h))g++;else break}d={index:d,text:c};if(Ka.hasOwnProperty(c))d.fn=Ka[c],d.json=Ka[c];else{var m=xc(c,this.options,this.text);d.fn=t(function(a,c){return m(a,c)},{assign:function(d,e){return kb(d,c,e,a.text,a.options)}})}this.tokens.push(d);f&&(this.tokens.push({index:e,text:".",json:!1}),this.tokens.push({index:e+
152
-1,text:f,json:!1}))},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,g=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),e=e+f;if(g)"u"===f?(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=(g=Wd[f])?d+g:d+f,g=!1;else if("\\"===f)g=!0;else{if(f===a){this.index++;this.tokens.push({index:c,text:e,string:d,json:!0,fn:function(){return d}});
153
-return}d+=f}this.index++}this.throwError("Unterminated quote",c)}};var Ya=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};Ya.ZERO=function(){return 0};Ya.prototype={constructor:Ya,parse:function(a,c){this.text=a;this.json=c;this.tokens=this.lexer.lex(a);c&&(this.assignment=this.logicalOR,this.functionCall=this.fieldAccess=this.objectIndex=this.filterChain=function(){this.throwError("is not valid json",{text:a,index:0})});var d=c?this.primary():this.statements();0!==this.tokens.length&&
154
-this.throwError("is an unexpected token",this.tokens[0]);d.literal=!!d.literal;d.constant=!!d.constant;return d},primary:function(){var a;if(this.expect("("))a=this.filterChain(),this.consume(")");else if(this.expect("["))a=this.arrayDeclaration();else if(this.expect("{"))a=this.object();else{var c=this.expect();(a=c.fn)||this.throwError("not a primary expression",c);c.json&&(a.constant=!0,a.literal=!0)}for(var d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?
155
-(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw za("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw za("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){if(0<this.tokens.length){var g=this.tokens[0],f=g.text;if(f===a||f===c||f===d||f===e||!(a||c||d||e))return g}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,
156
-e))?(this.json&&!a.json&&this.throwError("is not valid json",a),this.tokens.shift(),a):!1},consume:function(a){this.expect(a)||this.throwError("is unexpected, expecting ["+a+"]",this.peek())},unaryFn:function(a,c){return t(function(d,e){return a(d,e,c)},{constant:c.constant})},ternaryFn:function(a,c,d){return t(function(e,g){return a(e,g)?c(e,g):d(e,g)},{constant:a.constant&&c.constant&&d.constant})},binaryFn:function(a,c,d){return t(function(e,g){return c(e,g,a,d)},{constant:a.constant&&d.constant})},
157
-statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,g=0;g<a.length;g++){var f=a[g];f&&(e=f(c,d))}return e}},filterChain:function(){for(var a=this.expression(),c;;)if(c=this.expect("|"))a=this.binaryFn(a,c.fn,this.filter());else return a},filter:function(){for(var a=this.expect(),c=this.$filter(a.text),d=[];;)if(a=this.expect(":"))d.push(this.expression());else{var e=
158
-function(a,e,h){h=[h];for(var m=0;m<d.length;m++)h.push(d[m](a,e));return c.apply(a,h)};return function(){return e}}},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),function(d,g){return a.assign(d,c(d,g),g)}):a},ternary:function(){var a=this.logicalOR(),c,d;if(this.expect("?")){c=this.ternary();
159
-if(d=this.expect(":"))return this.ternaryFn(a,c,this.ternary());this.throwError("expected :",d)}else return a},logicalOR:function(){for(var a=this.logicalAND(),c;;)if(c=this.expect("||"))a=this.binaryFn(a,c.fn,this.logicalAND());else return a},logicalAND:function(){var a=this.equality(),c;if(c=this.expect("&&"))a=this.binaryFn(a,c.fn,this.logicalAND());return a},equality:function(){var a=this.relational(),c;if(c=this.expect("==","!=","===","!=="))a=this.binaryFn(a,c.fn,this.equality());return a},
160
-relational:function(){var a=this.additive(),c;if(c=this.expect("<",">","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(Ya.ZERO,a.fn,
161
-this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=xc(d,this.options,this.text);return t(function(c,d,h){return e(h||a(c,d),d)},{assign:function(e,f,h){return kb(a(e,h),d,f,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return t(function(e,g){var f=a(e,g),h=d(e,g),m;if(!f)return r;(f=Xa(f[h],c.text))&&(f.then&&c.options.unwrapPromises)&&(m=f,"$$v"in f||(m.$$v=r,
162
-m.then(function(a){m.$$v=a})),f=f.$$v);return f},{assign:function(e,g,f){var h=d(e,f);return Xa(a(e,f),c.text)[h]=g}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(g,f){for(var h=[],m=c?c(g,f):g,k=0;k<d.length;k++)h.push(d[k](g,f));k=a(g,f,m)||w;Xa(m,e.text);Xa(k,e.text);h=k.apply?k.apply(m,h):k(h[0],h[1],h[2],h[3],h[4]);return Xa(h,e.text)}},arrayDeclaration:function(){var a=
163
-[],c=!0;if("]"!==this.peekToken().text){do{var d=this.expression();a.push(d);d.constant||(c=!1)}while(this.expect(","))}this.consume("]");return t(function(c,d){for(var f=[],h=0;h<a.length;h++)f.push(a[h](c,d));return f},{literal:!0,constant:c})},object:function(){var a=[],c=!0;if("}"!==this.peekToken().text){do{var d=this.expect(),d=d.string||d.text;this.consume(":");var e=this.expression();a.push({key:d,value:e});e.constant||(c=!1)}while(this.expect(","))}this.consume("}");return t(function(c,d){for(var e=
164
-{},m=0;m<a.length;m++){var k=a[m];e[k.key]=k.value(c,d)}return e},{literal:!0,constant:c})}};var Kb={},sa=F("$sce"),fa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Y=Q.createElement("a"),Ac=ya(Z.location.href,!0);Bc.$inject=["$provide"];Cc.$inject=["$locale"];Ec.$inject=["$locale"];var Hc=".",Qd={yyyy:W("FullYear",4),yy:W("FullYear",2,0,!0),y:W("FullYear",1),MMMM:lb("Month"),MMM:lb("Month",!0),MM:W("Month",2,1),M:W("Month",1,1),dd:W("Date",2),d:W("Date",1),HH:W("Hours",2),
165
-H:W("Hours",1),hh:W("Hours",2,-12),h:W("Hours",1,-12),mm:W("Minutes",2),m:W("Minutes",1),ss:W("Seconds",2),s:W("Seconds",1),sss:W("Milliseconds",3),EEEE:lb("Day"),EEE:lb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Mb(Math[0<a?"floor":"ceil"](a/60),2)+Mb(Math.abs(a%60),2))}},Pd=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,Od=/^\-?\d+$/;Dc.$inject=["$locale"];var Md=$(x),Nd=
166
-$(Ia);Fc.$inject=["$parse"];var Xd=$({restrict:"E",compile:function(a,c){8>=M&&(c.href||c.name||c.$set("href",""),a.append(Q.createComment("IE fix")));if(!c.href&&!c.name)return function(a,c){c.on("click",function(a){c.attr("href")||a.preventDefault()})}}}),Ob={};q(gb,function(a,c){if("multiple"!=a){var d=ma("ng-"+c);Ob[d]=function(){return{priority:100,link:function(a,g,f){a.$watch(f[d],function(a){f.$set(c,!!a)})}}}}});q(["src","srcset","href"],function(a){var c=ma("ng-"+a);Ob[c]=function(){return{priority:99,
167
-link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(a,c),M&&e.prop(a,g[a]))})}}}});var ob={$addControl:w,$removeControl:w,$setValidity:w,$setDirty:w,$setPristine:w};Ic.$inject=["$element","$attrs","$scope"];var Kc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Ic,compile:function(){return{pre:function(a,e,g,f){if(!g.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Jc(e[0],"submit",h);e.on("$destroy",function(){c(function(){Bb(e[0],
168
-"submit",h)},0,!1)})}var m=e.parent().controller("form"),k=g.name||g.ngForm;k&&kb(a,k,f,k);if(m)e.on("$destroy",function(){m.$removeControl(f);k&&kb(a,k,r,k);t(f,ob)})}}}}}]},Yd=Kc(),Zd=Kc(!0),$d=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,ae=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/,be=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Lc={text:qb,number:function(a,c,d,e,g,f){qb(a,c,d,e,g,f);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||be.test(a))return e.$setValidity("number",
169
-!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return r});e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return pa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return pa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return pa(e,"number",e.$isEmpty(a)||sb(a),a)})},url:function(a,c,d,e,g,f){qb(a,
170
-c,d,e,g,f);a=function(a){return pa(e,"url",e.$isEmpty(a)||$d.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,f){qb(a,c,d,e,g,f);a=function(a){return pa(e,"email",e.$isEmpty(a)||ae.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){z(d.name)&&c.attr("name",Za());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,
171
-c,d,e){var g=d.ngTrueValue,f=d.ngFalseValue;D(g)||(g=!0);D(f)||(f=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==g};e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:f})},hidden:w,button:w,submit:w,reset:w},Mc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,f){f&&(Lc[x(g.type)]||Lc.text)(d,e,g,f,c,a)}}}],
172
-nb="ng-valid",mb="ng-invalid",Ja="ng-pristine",pb="ng-dirty",ce=["$scope","$exceptionHandler","$attrs","$element","$parse",function(a,c,d,e,g){function f(a,c){c=c?"-"+db(c,"-"):"";e.removeClass((a?mb:nb)+c).addClass((a?nb:mb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var h=g(d.ngModel),m=h.assign;if(!m)throw F("ngModel")("nonassign",d.ngModel,ga(e));
173
-this.$render=w;this.$isEmpty=function(a){return z(a)||""===a||null===a||a!==a};var k=e.inheritedData("$formController")||ob,l=0,n=this.$error={};e.addClass(Ja);f(!0);this.$setValidity=function(a,c){n[a]!==!c&&(c?(n[a]&&l--,l||(f(!0),this.$valid=!0,this.$invalid=!1)):(f(!1),this.$invalid=!0,this.$valid=!1,l++),n[a]=!c,f(c,a),k.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;e.removeClass(pb).addClass(Ja)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&
174
-(this.$dirty=!0,this.$pristine=!1,e.removeClass(Ja).addClass(pb),k.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,m(a,d),q(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var p=this;a.$watch(function(){var c=h(a);if(p.$modelValue!==c){var d=p.$formatters,e=d.length;for(p.$modelValue=c;e--;)c=d[e](c);p.$viewValue!==c&&(p.$viewValue=c,p.$render())}return c})}],de=function(){return{require:["ngModel","^?form"],controller:ce,link:function(a,
175
-c,d,e){var g=e[0],f=e[1]||ob;f.$addControl(g);a.$on("$destroy",function(){f.$removeControl(g)})}}},ee=$({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Nc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required",function(){g(e.$viewValue)})}}}},
176
-fe=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!z(a)){var c=[];a&&q(a.split(g),function(a){a&&c.push(ba(a))});return c}});e.$formatters.push(function(a){return K(a)?a.join(", "):r});e.$isEmpty=function(a){return!a||!a.length}}}},ge=/^(true|false|\d+)$/,he=function(){return{priority:100,compile:function(a,c){return ge.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,
177
-c,g){a.$watch(g.ngValue,function(a){g.$set("value",a)})}}}},ie=ta(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==r?"":a)})}),je=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],ke=["$sce","$parse",function(a,c){return function(d,e,g){e.addClass("ng-binding").data("$binding",g.ngBindHtml);var f=c(g.ngBindHtml);
178
-d.$watch(function(){return(f(d)||"").toString()},function(c){e.html(a.getTrustedHtml(f(d))||"")})}}],le=Nb("",!0),me=Nb("Odd",0),ne=Nb("Even",1),oe=ta({compile:function(a,c){c.$set("ngCloak",r);a.removeClass("ng-cloak")}}),pe=[function(){return{scope:!0,controller:"@",priority:500}}],Oc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ma("ng-"+a);Oc[c]=["$parse",function(d){return{compile:function(e,
179
-g){var f=d(g[c]);return function(c,d,e){d.on(x(a),function(a){c.$apply(function(){f(c,{$event:a})})})}}}}]});var qe=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,g,f){var h,m;c.$watch(e.ngIf,function(g){Oa(g)?m||(m=c.$new(),f(m,function(c){c[c.length++]=Q.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)})):(m&&(m.$destroy(),m=null),h&&(a.leave(wb(h.clone)),h=null))})}}}],re=["$http","$templateCache",
180
-"$anchorScroll","$animate","$sce",function(a,c,d,e,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ca.noop,compile:function(f,h){var m=h.ngInclude||h.src,k=h.onload||"",l=h.autoscroll;return function(f,h,q,r,y){var A=0,u,t,H=function(){u&&(u.$destroy(),u=null);t&&(e.leave(t),t=null)};f.$watch(g.parseAsResourceUrl(m),function(g){var m=function(){!B(l)||l&&!f.$eval(l)||d()},q=++A;g?(a.get(g,{cache:c}).success(function(a){if(q===A){var c=f.$new();r.template=a;a=y(c,
181
-function(a){H();e.enter(a,null,h,m)});u=c;t=a;u.$emit("$includeContentLoaded");f.$eval(k)}}).error(function(){q===A&&H()}),f.$emit("$includeContentRequested")):(H(),r.template=null)})}}}}],se=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,g){d.html(g.template);a(d.contents())(c)}}}],te=ta({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),ue=ta({terminal:!0,priority:1E3}),ve=["$locale","$interpolate",function(a,c){var d=
182
-/{}/g;return{restrict:"EA",link:function(e,g,f){var h=f.count,m=f.$attr.when&&g.attr(f.$attr.when),k=f.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),s=c.endSymbol(),r=/^when(Minus)?(.+)$/;q(f,function(a,c){r.test(c)&&(l[x(c.replace("when","").replace("Minus","-"))]=g.attr(f.$attr[c]))});q(l,function(a,e){n[e]=c(a.replace(d,p+h+"-"+k+s))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-k));return n[c](e,g,!0)},function(a){g.text(a)})}}}],we=["$parse",
183
-"$animate",function(a,c){var d=F("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,g,f,h,m){var k=f.ngRepeat,l=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,s,r,y,t,u={$id:Fa};if(!l)throw d("iexp",k);f=l[1];h=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){t&&(u[t]=a);u[y]=c;u.$index=d;return n(e,u)}):(s=function(a,c){return Fa(c)},r=function(a){return a});l=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",
184
-f);y=l[3]||l[1];t=l[2];var B={};e.$watchCollection(h,function(a){var f,h,l=g[0],n,u={},z,P,D,x,T,w,F=[];if(rb(a))T=a,n=p||s;else{n=p||r;T=[];for(D in a)a.hasOwnProperty(D)&&"$"!=D.charAt(0)&&T.push(D);T.sort()}z=T.length;h=F.length=T.length;for(f=0;f<h;f++)if(D=a===T?f:T[f],x=a[D],x=n(D,x,f),xa(x,"`track by` id"),B.hasOwnProperty(x))w=B[x],delete B[x],u[x]=w,F[f]=w;else{if(u.hasOwnProperty(x))throw q(F,function(a){a&&a.scope&&(B[a.id]=a)}),d("dupes",k,x);F[f]={id:x};u[x]=!1}for(D in B)B.hasOwnProperty(D)&&
185
-(w=B[D],f=wb(w.clone),c.leave(f),q(f,function(a){a.$$NG_REMOVED=!0}),w.scope.$destroy());f=0;for(h=T.length;f<h;f++){D=a===T?f:T[f];x=a[D];w=F[f];F[f-1]&&(l=F[f-1].clone[F[f-1].clone.length-1]);if(w.scope){P=w.scope;n=l;do n=n.nextSibling;while(n&&n.$$NG_REMOVED);w.clone[0]!=n&&c.move(wb(w.clone),null,A(l));l=w.clone[w.clone.length-1]}else P=e.$new();P[y]=x;t&&(P[t]=D);P.$index=f;P.$first=0===f;P.$last=f===z-1;P.$middle=!(P.$first||P.$last);P.$odd=!(P.$even=0===(f&1));w.scope||m(P,function(a){a[a.length++]=
186
-Q.createComment(" end ngRepeat: "+k+" ");c.enter(a,null,A(l));l=a;w.scope=P;w.clone=a;u[w.id]=w})}B=u})}}}],xe=["$animate",function(a){return function(c,d,e){c.$watch(e.ngShow,function(c){a[Oa(c)?"removeClass":"addClass"](d,"ng-hide")})}}],ye=["$animate",function(a){return function(c,d,e){c.$watch(e.ngHide,function(c){a[Oa(c)?"addClass":"removeClass"](d,"ng-hide")})}}],ze=ta(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&q(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),Ae=["$animate",
187
-function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,g){var f,h,m=[];c.$watch(e.ngSwitch||e.on,function(d){for(var l=0,n=m.length;l<n;l++)m[l].$destroy(),a.leave(h[l]);h=[];m=[];if(f=g.cases["!"+d]||g.cases["?"])c.$eval(e.change),q(f,function(d){var e=c.$new();m.push(e);d.transclude(e,function(c){var e=d.element;h.push(c);a.enter(c,e.parent(),e)})})})}}}],Be=ta({transclude:"element",priority:800,require:"^ngSwitch",link:function(a,
188
-c,d,e,g){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:g,element:c})}}),Ce=ta({transclude:"element",priority:800,require:"^ngSwitch",link:function(a,c,d,e,g){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:g,element:c})}}),De=ta({controller:["$element","$transclude",function(a,c){if(!c)throw F("ngTransclude")("orphan",ga(a));this.$transclude=c}],link:function(a,c,d,e){e.$transclude(function(a){c.empty();c.append(a)})}}),Ee=["$templateCache",
189
-function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],Fe=F("ngOptions"),Ge=$({terminal:!0}),He=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\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]+?))?$/,e={$setViewValue:w};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope",
190
-"$attrs",function(a,c,d){var m=this,k={},l=e,n;m.databound=d.ngModel;m.init=function(a,c,d){l=a;n=d};m.addOption=function(c){xa(c,'"option value"');k[c]=!0;l.$viewValue==c&&(a.val(c),n.parent()&&n.remove())};m.removeOption=function(a){this.hasOption(a)&&(delete k[a],l.$viewValue==a&&this.renderUnknownOption(a))};m.renderUnknownOption=function(c){c="? "+Fa(c)+" ?";n.val(c);a.prepend(n);a.val(c);n.prop("selected",!0)};m.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){m.renderUnknownOption=
191
-w})}],link:function(e,f,h,m){function k(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(x.parent()&&x.remove(),c.val(a),""===a&&w.prop("selected",!0)):z(a)&&w?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){x.parent()&&x.remove();d.$setViewValue(c.val())})})}function l(a,c,d){var e;d.$render=function(){var a=new Sa(d.$viewValue);q(c.find("option"),function(c){c.selected=B(a.get(c.value))})};a.$watch(function(){ua(e,d.$viewValue)||(e=aa(d.$viewValue),
192
-d.$render())});c.on("change",function(){a.$apply(function(){var a=[];q(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function n(e,f,g){function h(){var a={"":[]},c=[""],d,k,r,t,v;t=g.$modelValue;v=A(e)||[];var C=n?Pb(v):v,F,I,z;I={};r=!1;var E,H;if(s)if(w&&K(t))for(r=new Sa([]),z=0;z<t.length;z++)I[m]=t[z],r.put(w(e,I),t[z]);else r=new Sa(t);for(z=0;F=C.length,z<F;z++){k=z;if(n){k=C[z];if("$"===k.charAt(0))continue;I[n]=k}I[m]=v[k];d=p(e,I)||"";(k=a[d])||(k=a[d]=
193
-[],c.push(d));s?d=B(r.remove(w?w(e,I):q(e,I))):(w?(d={},d[m]=t,d=w(e,d)===w(e,I)):d=t===q(e,I),r=r||d);E=l(e,I);E=B(E)?E:"";k.push({id:w?w(e,I):n?C[z]:z,label:E,selected:d})}s||(y||null===t?a[""].unshift({id:"",label:"",selected:!r}):r||a[""].unshift({id:"?",label:"",selected:!0}));I=0;for(C=c.length;I<C;I++){d=c[I];k=a[d];x.length<=I?(t={element:D.clone().attr("label",d),label:k.label},v=[t],x.push(v),f.append(t.element)):(v=x[I],t=v[0],t.label!=d&&t.element.attr("label",t.label=d));E=null;z=0;for(F=
194
-k.length;z<F;z++)r=k[z],(d=v[z+1])?(E=d.element,d.label!==r.label&&E.text(d.label=r.label),d.id!==r.id&&E.val(d.id=r.id),E[0].selected!==r.selected&&E.prop("selected",d.selected=r.selected)):(""===r.id&&y?H=y:(H=u.clone()).val(r.id).attr("selected",r.selected).text(r.label),v.push({element:H,label:r.label,id:r.id,selected:r.selected}),E?E.after(H):t.element.append(H),E=H);for(z++;v.length>z;)v.pop().element.remove()}for(;x.length>I;)x.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw Fe("iexp",
195
-t,ga(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q=c(k[2]?k[1]:m),A=c(k[7]),w=k[8]?c(k[8]):null,x=[[{element:f,label:""}]];y&&(a(y)(e),y.removeClass("ng-scope"),y.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=A(e)||[],d={},h,k,l,p,t,u,v;if(s)for(k=[],p=0,u=x.length;p<u;p++)for(a=x[p],l=1,t=a.length;l<t;l++){if((h=a[l].element)[0].selected){h=h.val();n&&(d[n]=h);if(w)for(v=0;v<c.length&&(d[m]=c[v],w(e,d)!=h);v++);else d[m]=c[h];k.push(q(e,d))}}else if(h=f.val(),
196
-"?"==h)k=r;else if(""===h)k=null;else if(w)for(v=0;v<c.length;v++){if(d[m]=c[v],w(e,d)==h){k=q(e,d);break}}else d[m]=c[h],n&&(d[n]=h),k=q(e,d);g.$setViewValue(k)})});g.$render=h;e.$watch(h)}if(m[1]){var p=m[0];m=m[1];var s=h.multiple,t=h.ngOptions,y=!1,w,u=A(Q.createElement("option")),D=A(Q.createElement("optgroup")),x=u.clone();h=0;for(var v=f.children(),F=v.length;h<F;h++)if(""===v[h].value){w=y=v.eq(h);break}p.init(m,y,x);s&&(m.$isEmpty=function(a){return!a||0===a.length});t?n(e,f,m):s?l(e,f,m):
197
-k(e,f,m,p)}}}}],Ie=["$interpolate",function(a){var c={addOption:w,removeOption:w};return{restrict:"E",priority:100,compile:function(d,e){if(z(e.value)){var g=a(d.text(),!0);g||e.$set("value",d.text())}return function(a,d,e){var k=d.parent(),l=k.data("$selectController")||k.parent().data("$selectController");l&&l.databound?d.prop("selected",!1):l=c;g?a.$watch(g,function(a,c){e.$set("value",a);a!==c&&l.removeOption(c);l.addOption(a)}):l.addOption(e.value);d.on("$destroy",function(){l.removeOption(e.value)})}}}}],
198
-Je=$({restrict:"E",terminal:!0});(Da=Z.jQuery)?(A=Da,t(Da.fn,{scope:Ga.scope,isolateScope:Ga.isolateScope,controller:Ga.controller,injector:Ga.injector,inheritedData:Ga.inheritedData}),xb("remove",!0,!0,!1),xb("empty",!1,!1,!1),xb("html",!1,!1,!0)):A=O;Ca.element=A;(function(a){t(a,{bootstrap:Zb,copy:aa,extend:t,equals:ua,element:A,forEach:q,injector:$b,noop:w,bind:cb,toJson:qa,fromJson:Vb,identity:Ba,isUndefined:z,isDefined:B,isString:D,isFunction:L,isObject:X,isNumber:sb,isElement:Qc,isArray:K,
199
-version:Sd,isDate:La,lowercase:x,uppercase:Ia,callbacks:{counter:0},$$minErr:F,$$csp:Ub});Ua=Vc(Z);try{Ua("ngLocale")}catch(c){Ua("ngLocale",[]).provider("$locale",sd)}Ua("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Cd});a.provider("$compile",jc).directive({a:Xd,input:Mc,textarea:Mc,form:Yd,script:Ee,select:He,style:Je,option:Ie,ngBind:ie,ngBindHtml:ke,ngBindTemplate:je,ngClass:le,ngClassEven:ne,ngClassOdd:me,ngCloak:oe,ngController:pe,ngForm:Zd,ngHide:ye,ngIf:qe,ngInclude:re,
200
-ngInit:te,ngNonBindable:ue,ngPluralize:ve,ngRepeat:we,ngShow:xe,ngStyle:ze,ngSwitch:Ae,ngSwitchWhen:Be,ngSwitchDefault:Ce,ngOptions:Ge,ngTransclude:De,ngModel:de,ngList:fe,ngChange:ee,required:Nc,ngRequired:Nc,ngValue:he}).directive({ngInclude:se}).directive(Ob).directive(Oc);a.provider({$anchorScroll:dd,$animate:Ud,$browser:fd,$cacheFactory:gd,$controller:jd,$document:kd,$exceptionHandler:ld,$filter:Bc,$interpolate:qd,$interval:rd,$http:md,$httpBackend:od,$location:ud,$log:vd,$parse:yd,$rootScope:Bd,
201
-$q:zd,$sce:Fd,$sceDelegate:Ed,$sniffer:Gd,$templateCache:hd,$timeout:Hd,$window:Id})}])})(Ca);A(Q).ready(function(){Tc(Q,Zb)})})(window,document);!angular.$$csp()&&angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}</style>');
6
+(function(R,X,t){'use strict';function E(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.0-rc.5/"+(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 Na(b){if(null==b||Oa(b))return!1;var a=b.length;return b.nodeType===
7
+ia&&a?!0:u(b)||B(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function q(b,a,c){var d,e;if(b)if(A(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(B(b)||Na(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!==q)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function hc(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push(c);
8
+return a.sort()}function zd(b,a,c){for(var d=hc(b),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function ic(b){return function(a,c){b(c,a)}}function Ad(){return++gb}function jc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function w(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var k=f[g];b[k]=e[k]}}jc(b,a);return b}function $(b){return parseInt(b,10)}function kc(b,a){return w(new (w(function(){},{prototype:b})),
9
+a)}function z(){}function Pa(b){return b}function ba(b){return function(){return b}}function G(b){return"undefined"===typeof b}function y(b){return"undefined"!==typeof b}function O(b){return null!==b&&"object"===typeof b}function u(b){return"string"===typeof b}function aa(b){return"number"===typeof b}function ca(b){return"[object Date]"===Fa.call(b)}function A(b){return"function"===typeof b}function hb(b){return"[object RegExp]"===Fa.call(b)}function Oa(b){return b&&b.window===b}function Qa(b){return b&&
10
+b.$evalAsync&&b.$watch}function Ra(b){return"boolean"===typeof b}function Bd(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Cd(b){var a={};b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ma(b){return H(b.nodeName||b[0].nodeName)}function Sa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Ga(b,a,c,d){if(Oa(b)||Qa(b))throw Ta("cpws");if(a){if(b===a)throw Ta("cpi");c=c||[];d=d||[];if(O(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(B(b))for(var f=
11
+a.length=0;f<b.length;f++)e=Ga(b[f],null,c,d),O(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var g=a.$$hashKey;B(a)?a.length=0:q(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Ga(b[f],null,c,d),O(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);jc(a,g)}}else if(a=b)B(b)?a=Ga(b,[],c,d):ca(b)?a=new Date(b.getTime()):hb(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):O(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Ga(b,e,c,d));return a}function na(b,
12
+a){if(B(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(O(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=b[c];return a||b}function oa(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(B(b)){if(!B(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!oa(b[d],a[d]))return!1;return!0}}else{if(ca(b))return ca(a)?oa(b.getTime(),a.getTime()):!1;if(hb(b)&&hb(a))return b.toString()==a.toString();
13
+if(Qa(b)||Qa(a)||Oa(b)||Oa(a)||B(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!A(b[d])){if(!oa(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==t&&!A(a[d]))return!1;return!0}return!1}function ib(b,a,c){return b.concat(Ua.call(a,c))}function lc(b,a){var c=2<arguments.length?Ua.call(arguments,2):[];return!A(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,c.concat(Ua.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?
14
+a.apply(b,arguments):a.call(b)}}function Dd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=t:Oa(a)?c="$WINDOW":a&&X===a?c="$DOCUMENT":Qa(a)&&(c="$SCOPE");return c}function pa(b,a){return"undefined"===typeof b?t:JSON.stringify(b,Dd,a?" ":null)}function mc(b){return u(b)?JSON.parse(b):b}function qa(b){b=C(b).clone();try{b.empty()}catch(a){}var c=C("<div>").append(b).html();try{return b[0].nodeType===jb?H(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+
15
+H(b)})}catch(d){return H(c)}}function nc(b){try{return decodeURIComponent(b)}catch(a){}}function oc(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=nc(c[0]),y(d)&&(b=y(c[1])?nc(c[1]):!0,Gb.call(a,d)?B(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Hb(b){var a=[];q(b,function(b,d){B(b)?q(b,function(b){a.push(xa(d,!0)+(!0===b?"":"="+xa(b,!0)))}):a.push(xa(d,!0)+(!0===b?"":"="+xa(b,!0)))});return a.length?a.join("&"):""}function kb(b){return xa(b,
16
+!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function xa(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 Ed(b,a){var c,d,e=lb.length;b=C(b);for(d=0;d<e;++d)if(c=lb[d]+a,u(c=b.attr(c)))return c;return null}function Fd(b,a){var c,d,e={};q(lb,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});q(lb,function(a){a+="app";
17
+var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Ed(c,"strict-di"),a(c,d?[d]:[],e))}function pc(b,a,c){O(c)||(c={});c=w({strictDi:!1},c);var d=function(){b=C(b);if(b.injector()){var d=b[0]===X?"document":qa(b);throw Ta("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");
18
+d=Ib(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!/;R&&e.test(R.name)&&(c.debugInfoEnabled=!0,R.name=R.name.replace(e,""));if(R&&!f.test(R.name))return d();R.name=R.name.replace(f,"");ya.resumeBootstrap=function(b){q(b,function(b){a.push(b)});d()}}function Gd(){R.name="NG_ENABLE_DEBUG_INFO!"+R.name;R.location.reload()}function Hd(b){return ya.element(b).injector().get("$$testability")}
19
+function Jb(b,a){a=a||"_";return b.replace(Id,function(b,d){return(d?a:"")+b.toLowerCase()})}function Jd(){var b;qc||((ja=R.jQuery)&&ja.fn.on?(C=ja,w(ja.fn,{scope:Ha.scope,isolateScope:Ha.isolateScope,controller:Ha.controller,injector:Ha.injector,inheritedData:Ha.inheritedData}),b=ja.cleanData,ja.cleanData=function(a){var c;if(Kb)Kb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=ja._data(e,"events"))&&c.$destroy&&ja(e).triggerHandler("$destroy");b(a)}):C=P,ya.element=C,qc=!0)}function Lb(b,a,c){if(!b)throw Ta("areq",
20
+a||"?",c||"required");return b}function mb(b,a,c){c&&B(b)&&(b=b[b.length-1]);Lb(A(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ia(b,a){if("hasOwnProperty"===b)throw Ta("badname",a);}function rc(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&&A(b)?lc(e,b):b}function nb(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 C(c)}function Kd(b){function a(a,
21
+b,c){return a[b]||(a[b]=c())}var c=E("$injector"),d=E("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||E;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(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return m}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],s=a("$injector","invoke","push",d),m={_invokeQueue:b,_configBlocks:d,_runBlocks:e,requires:g,
22
+name:f,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:s,run:function(a){e.push(a);return this}};h&&s(h);return m})}})}function Ld(b){w(b,{bootstrap:pc,copy:Ga,extend:w,equals:oa,element:C,forEach:q,
23
+injector:Ib,noop:z,bind:lc,toJson:pa,fromJson:mc,identity:Pa,isUndefined:G,isDefined:y,isString:u,isFunction:A,isObject:O,isNumber:aa,isElement:Bd,isArray:B,version:Md,isDate:ca,lowercase:H,uppercase:ob,callbacks:{counter:0},getTestability:Hd,$$minErr:E,$$csp:Va,reloadWithDebugInfo:Gd});Wa=Kd(R);try{Wa("ngLocale")}catch(a){Wa("ngLocale",[]).provider("$locale",Nd)}Wa("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Od});a.provider("$compile",sc).directive({a:Pd,input:tc,textarea:tc,
24
+form:Qd,script:Rd,select:Sd,style:Td,option:Ud,ngBind:Vd,ngBindHtml:Wd,ngBindTemplate:Xd,ngClass:Yd,ngClassEven:Zd,ngClassOdd:$d,ngCloak:ae,ngController:be,ngForm:ce,ngHide:de,ngIf:ee,ngInclude:fe,ngInit:ge,ngNonBindable:he,ngPluralize:ie,ngRepeat:je,ngShow:ke,ngStyle:le,ngSwitch:me,ngSwitchWhen:ne,ngSwitchDefault:oe,ngOptions:pe,ngTransclude:qe,ngModel:re,ngList:se,ngChange:te,pattern:uc,ngPattern:uc,required:vc,ngRequired:vc,minlength:wc,ngMinlength:wc,maxlength:xc,ngMaxlength:xc,ngValue:ue,ngModelOptions:ve}).directive({ngInclude:we}).directive(pb).directive(yc);
25
+a.provider({$anchorScroll:xe,$animate:ye,$browser:ze,$cacheFactory:Ae,$controller:Be,$document:Ce,$exceptionHandler:De,$filter:zc,$interpolate:Ee,$interval:Fe,$http:Ge,$httpBackend:He,$location:Ie,$log:Je,$parse:Ke,$rootScope:Le,$q:Me,$$q:Ne,$sce:Oe,$sceDelegate:Pe,$sniffer:Qe,$templateCache:Re,$templateRequest:Se,$$testability:Te,$timeout:Ue,$window:Ve,$$rAF:We,$$asyncCallback:Xe})}])}function Xa(b){return b.replace(Ye,function(a,b,d,e){return e?d.toUpperCase():d}).replace(Ze,"Moz$1")}function Ac(b){b=
26
+b.nodeType;return b===ia||!b||9===b}function Bc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Mb.test(b)){c=c||e.appendChild(a.createElement("div"));d=($e.exec(b)||["",""])[1].toLowerCase();d=da[d]||da._default;c.innerHTML=d[1]+b.replace(af,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=ib(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";q(f,function(a){e.appendChild(a)});return e}function P(b){if(b instanceof P)return b;var a;
27
+u(b)&&(b=V(b),a=!0);if(!(this instanceof P)){if(a&&"<"!=b.charAt(0))throw Nb("nosel");return new P(b)}if(a){a=X;var c;b=(c=bf.exec(b))?[a.createElement(c[1])]:(c=Bc(b,a))?c.childNodes:[]}Cc(this,b)}function Ob(b){return b.cloneNode(!0)}function qb(b,a){a||rb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)rb(c[d])}function Dc(b,a,c,d){if(y(d))throw Nb("offargs");var e=(d=sb(b))&&d.events;if(d&&d.handle)if(a)q(a.split(" "),function(a){G(c)?(b.removeEventListener(a,
28
+e[a],!1),delete e[a]):Sa(e[a]||[],c)});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,e[a],!1),delete e[a]}function rb(b,a){var c=b.ng339,d=c&&tb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Dc(b)),delete tb[c],b.ng339=t))}function sb(b,a){var c=b.ng339,c=c&&tb[c];a&&!c&&(b.ng339=c=++cf,c=tb[c]={events:{},data:{},handle:t});return c}function Pb(b,a,c){if(Ac(b)){var d=y(c),e=!d&&a&&!O(a),f=!a;b=(b=sb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;if(e)return b&&
29
+b[a];w(b,a)}}}function Qb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Rb(b,a){a&&b.setAttribute&&q(a.split(" "),function(a){b.setAttribute("class",V((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+V(a)+" "," ")))})}function Sb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(a.split(" "),function(a){a=V(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});
30
+b.setAttribute("class",V(c))}}function Cc(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 Ec(b,a){return ub(b,"$"+(a||"ngController")+"Controller")}function ub(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=B(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=C.data(b,a[d]))!==t)return c;b=b.parentNode||11===b.nodeType&&b.host}}function Fc(b){for(qb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}
31
+function Gc(b,a){a||qb(b);var c=b.parentNode;c&&c.removeChild(b)}function Hc(b,a){var c=vb[a.toLowerCase()];return c&&Ic[ma(b)]&&c}function df(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Jc[a]}function ef(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(G(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&
32
+c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=na(f));for(var k=0;k<g;k++)c.isImmediatePropagationStopped()||f[k].call(b,c)}};c.elem=b;return c}function Ja(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||Ad)():c+":"+b}function Ya(b,a){if(a){var c=0;this.nextUid=function(){return++c}}q(b,this.put,this)}function ff(b){return(b=
33
+b.toString().replace(Kc,"").match(Lc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Tb(b,a,c){var d;if("function"===typeof b){if(!(d=b.$inject)){d=[];if(b.length){if(a)throw u(c)&&c||(c=b.name||ff(b)),za("strictdi",c);a=b.toString().replace(Kc,"");a=a.match(Lc);q(a[1].split(gf),function(a){a.replace(hf,function(a,b,c){d.push(c)})})}b.$inject=d}}else B(b)?(a=b.length-1,mb(b[a],"fn"),d=b.slice(0,a)):mb(b,"fn",!0);return d}function Ib(b,a){function c(a){return function(b,c){if(O(b))q(b,
34
+ic(a));else return a(b,c)}}function d(a,b){Ia(a,"service");if(A(b)||B(b))b=s.instantiate(b);if(!b.$get)throw za("pget",a);return n[a+"Provider"]=b}function e(a,b){return function(){var c=r.invoke(b);if(G(c))throw za("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;q(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(!p.get(a)){p.put(a,!0);try{u(a)?(c=Wa(a),b=b.concat(g(c.requires)).concat(c._runBlocks),
35
+d(c._invokeQueue),d(c._configBlocks)):A(a)?b.push(s.invoke(a)):B(a)?b.push(s.invoke(a)):mb(a,"module")}catch(e){throw B(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),za("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a){if(b.hasOwnProperty(a)){if(b[a]===k)throw za("cdep",a+" <- "+l.join(" <- "));return b[a]}try{return l.unshift(a),b[a]=k,b[a]=c(a)}catch(e){throw b[a]===k&&delete b[a],e;}finally{l.shift()}}function e(b,
36
+c,f,g){"string"===typeof f&&(g=f,f=null);var h=[];g=Tb(b,a,g);var k,l,m;l=0;for(k=g.length;l<k;l++){m=g[l];if("string"!==typeof m)throw za("itkn",m);h.push(f&&f.hasOwnProperty(m)?f[m]:d(m))}B(b)&&(b=b[k]);return b.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=function(){};d.prototype=(B(a)?a[a.length-1]:a).prototype;d=new d;a=e(a,d,b,c);return O(a)||A(a)?a:d},get:d,annotate:Tb,has:function(a){return n.hasOwnProperty(a+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var k={},l=[],p=new Ya([],
37
+!0),n={$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,ba(b),!1)}),constant:c(function(a,b){Ia(a,"constant");n[a]=b;m[a]=b}),decorator:function(a,b){var c=s.get(a+"Provider"),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},s=n.$injector=h(n,function(){throw za("unpr",l.join(" <- "));}),m={},r=m.$injector=h(m,function(a){var b=s.get(a+"Provider");return r.invoke(b.$get,
38
+b,t,a)});q(g(b),function(a){r.invoke(a||z)});return r}function xe(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;q(a,function(a){b||"a"!==ma(a)||(b=a)});return b}function f(){var b=c.hash(),d;b?(d=g.getElementById(b))?d.scrollIntoView():(d=e(g.getElementsByName(b)))?d.scrollIntoView():"top"===b&&a.scrollTo(0,0):a.scrollTo(0,0)}var g=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&
39
+""===a||d.$evalAsync(f)});return f}]}function Xe(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function jf(b,a,c,d){function e(a){try{a.apply(null,Ua.call(arguments,1))}finally{if(r--,0===r)for(;L.length;)try{L.pop()()}catch(b){c.error(b)}}}function f(a,b){(function wb(){q(F,function(a){a()});x=b(wb,a)})()}function g(){if(v!==h.url()||Q!==p.state)v=h.url(),q(T,function(a){a(h.url(),p.state)})}var h=this,k=a[0],l=b.location,
40
+p=b.history,n=b.setTimeout,s=b.clearTimeout,m={};h.isMock=!1;var r=0,L=[];h.$$completeOutstandingRequest=e;h.$$incOutstandingRequestCount=function(){r++};h.notifyWhenNoOutstandingRequests=function(a){q(F,function(a){a()});0===r?a():L.push(a)};var F=[],x;h.addPollFn=function(a){G(x)&&f(100,n);F.push(a);return a};var v=l.href,Q=p.state,D=a.find("base"),M=null;h.url=function(a,c,e){G(e)&&(e=null);l!==b.location&&(l=b.location);p!==b.history&&(p=b.history);if(a){if(v!==a||d.history&&p.state!==e){var f=
41
+v&&Aa(v)===Aa(a);v=a;!d.history||f&&p.state===e?(f||(M=a),c?l.replace(a):l.href=a):(p[c?"replaceState":"pushState"](e,"",a),Q=p.state);return h}}else return M||l.href.replace(/%27/g,"'")};h.state=function(){return G(p.state)?null:p.state};var T=[],I=!1;h.onUrlChange=function(a){if(!I){if(d.history)C(b).on("popstate",g);C(b).on("hashchange",g);I=!0}T.push(a);return a};h.$$checkUrlChange=g;h.baseHref=function(){var a=D.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var S={},W="",N=
42
+h.baseHref();h.cookies=function(a,b){var d,e,f,g;if(a)b===t?k.cookie=encodeURIComponent(a)+"=;path="+N+";expires=Thu, 01 Jan 1970 00:00:00 GMT":u(b)&&(d=(k.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+";path="+N).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(k.cookie!==W)for(W=k.cookie,d=W.split("; "),S={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=decodeURIComponent(e.substring(0,g)),S[a]===t&&(S[a]=
43
+decodeURIComponent(e.substring(g+1))));return S}};h.defer=function(a,b){var c;r++;c=n(function(){delete m[c];e(a)},b||0);m[c]=!0;return c};h.defer.cancel=function(a){return m[a]?(delete m[a],s(a),e(z),!0):!1}}function ze(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new jf(b,d,a,c)}]}function Ae(){this.$get=function(){function b(b,d){function e(a){a!=n&&(s?s==a&&(s=a.n):s=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw E("$cacheFactory")("iid",
44
+b);var g=0,h=w({},d,{id:b}),k={},l=d&&d.capacity||Number.MAX_VALUE,p={},n=null,s=null;return a[b]={put:function(a,b){if(l<Number.MAX_VALUE){var c=p[a]||(p[a]={key:a});e(c)}if(!G(b))return a in k||g++,k[a]=b,g>l&&this.remove(s.key),b},get:function(a){if(l<Number.MAX_VALUE){var b=p[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=p[a];if(!b)return;b==n&&(n=b.p);b==s&&(s=b.n);f(b.n,b.p);delete p[a]}delete k[a];g--},removeAll:function(){k={};g=0;p={};n=s=null},destroy:function(){p=
45
+h=k=null;delete a[b]},info:function(){return w({},h,{size:g})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Re(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function sc(b,a){function c(a,b){var c=/^\s*([@=&])(\??)\s*(\w*)\s*$/,d={};q(a,function(a,e){var f=a.match(c);if(!f)throw fa("iscp",b,e,a);d[e]={attrName:f[3]||e,mode:f[1],optional:"?"===f[2]}});return d}var d={},e=/^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/,
46
+f=/(([\d\w_\-]+)(?:\:([^;]+))?;?)/,g=Cd("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,k=/^(on[a-z]+|formaction)$/;this.directive=function n(a,e){Ia(a,"directive");u(a)?(Lb(e,"directiveFactory"),d.hasOwnProperty(a)||(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];q(d[a],function(d,g){try{var h=b.invoke(d);A(h)?h={compile:ba(h)}:!h.compile&&h.link&&(h.compile=ba(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||a;h.require=h.require||
47
+h.controller&&h.name;h.restrict=h.restrict||"EA";O(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(k){e(k)}});return f}])),d[a].push(e)):q(a,ic(n));return this};this.aHrefSanitizationWhitelist=function(b){return y(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};var l=!0;this.debugInfoEnabled=function(a){return y(a)?(l=a,this):
48
+l};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,r,L,F,x,v,Q,D,M){function T(a,b){try{a.addClass(b)}catch(c){}}function I(a,b,c,d,e){a instanceof C||(a=C(a));q(a,function(b,c){b.nodeType==jb&&b.nodeValue.match(/\S+/)&&(a[c]=C(b).wrap("<span></span>").parent()[0])});var f=S(a,b,a,c,d,e);I.$$addScopeClass(a);var g=null;return function(b,c,d,e,h){Lb(b,"scope");g||(g=(h=h&&h[0])?
49
+"foreignobject"!==ma(h)&&h.toString().match(/SVG/)?"svg":"html":"html");h="html"!==g?C(R(g,C("<div>").append(a).html())):c?Ha.clone.call(a):a;if(d)for(var k in d)h.data("$"+k+"Controller",d[k].instance);I.$$addScopeInfo(h,b);c&&c(h,b);f&&f(b,h,h,e);return h}}function S(a,b,c,d,e,f){function h(a,c,d,e){var f,k,l,m,s,v,r;if(n)for(r=Array(c.length),m=0;m<g.length;m+=3)f=g[m],r[f]=c[f];else r=c;m=0;for(s=g.length;m<s;)k=r[g[m++]],c=g[m++],f=g[m++],c?(c.scope?(l=a.$new(),I.$$addScopeInfo(C(k),l)):l=a,
50
+v=c.transcludeOnThisElement?W(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?W(a,b):null,c(f,l,k,d,v)):f&&f(a,k.childNodes,t,e)}for(var g=[],k,l,m,s,n,v=0;v<a.length;v++){k=new Wb;l=N(a[v],[],k,0===v?d:t,e);(f=l.length?ea(l,a[v],k,b,c,null,[],[],f):null)&&f.scope&&I.$$addScopeClass(k.$$element);k=f&&f.terminal||!(m=a[v].childNodes)||!m.length?null:S(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)g.push(v,f,k),s=!0,n=n||f;
51
+f=null}return s?h:null}function W(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,f,c,g)}}function N(b,c,g,h,k){var l=g.$attr,m;switch(b.nodeType){case ia:y(c,ra(ma(b)),"E",h,k);for(var s,v,r,F=b.attributes,L=0,Q=F&&F.length;L<Q;L++){var D=!1,I=!1;s=F[L];m=s.name;s=V(s.value);v=ra(m);if(r=$a.test(v))m=Jb(v.substr(6),"-");var M=v.replace(/(Start|End)$/,""),T;a:{var N=M;if(d.hasOwnProperty(N)){T=void 0;for(var N=a.get(N+"Directive"),q=0,W=N.length;q<W;q++)if(T=
52
+N[q],T.multiElement){T=!0;break a}}T=!1}T&&v===M+"Start"&&(D=m,I=m.substr(0,m.length-5)+"end",m=m.substr(0,m.length-6));v=ra(m.toLowerCase());l[v]=m;if(r||!g.hasOwnProperty(v))g[v]=s,Hc(b,v)&&(g[v]=!0);P(b,c,s,v,r);y(c,v,"A",h,k,D,I)}b=b.className;if(u(b)&&""!==b)for(;m=f.exec(b);)v=ra(m[2]),y(c,v,"C",h,k)&&(g[v]=V(m[3])),b=b.substr(m.index+m[0].length);break;case jb:ga(c,b.nodeValue);break;case 8:try{if(m=e.exec(b.nodeValue))v=ra(m[1]),y(c,v,"M",h,k)&&(g[v]=V(m[2]))}catch(K){}}c.sort(E);return c}
53
+function K(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw fa("uterdir",b,c);a.nodeType==ia&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return C(d)}function U(a,b,c){return function(d,e,f,g,h){e=K(e[0],b,c);return a(d,e,f,g,h)}}function ea(a,d,e,f,g,k,l,v,n){function r(a,b,c,d){if(a){c&&(a=U(a,c,d));a.require=J.require;a.directiveName=ga;if(x===J||J.$$isolateScope)a=Y(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=U(b,
54
+c,d));b.require=J.require;b.directiveName=ga;if(x===J||J.$$isolateScope)b=Y(b,{isolateScope:!0});v.push(b)}}function Q(a,b,c,d){var e,f="data",g=!1,k=c,l;if(u(b)){if(l=b.match(h),b=b.substring(l[0].length),l[3]&&(l[1]?l[3]=null:l[1]=l[3]),"^"===l[1]?f="inheritedData":"^^"===l[1]&&(f="inheritedData",k=c.parent()),"?"===l[2]&&(g=!0),e=null,d&&"data"===f&&(e=d[b])&&(e=e.instance),e=e||k[f]("$"+b+"Controller"),!e&&!g)throw fa("ctreq",b,a);}else B(b)&&(e=[],q(b,function(b){e.push(Q(a,b,c,d))}));return e}
55
+function D(a,c,f,g,h){function k(a,b,c){var d;Qa(a)||(c=b,b=a,a=t);z&&(d=Za);c||(c=z?N.parent():N);return h(a,b,d,c,Vb)}var m,n,r,M,Za,T,N,K;d===f?(K=e,N=e.$$element):(N=C(f),K=new Wb(N,e));x&&(M=c.$new(!0));T=h&&k;W&&(S={},Za={},q(W,function(a){var b={$scope:a===x||a.$$isolateScope?M:c,$element:N,$attrs:K,$transclude:T};r=a.controller;"@"==r&&(r=K[a.name]);b=F(r,b,!0,a.controllerAs);Za[a.name]=b;z||N.data("$"+a.name+"Controller",b.instance);S[a.name]=b}));if(x){I.$$addScopeInfo(N,M,!0,!(ea&&(ea===
56
+x||ea===x.$$originalDirective)));I.$$addScopeClass(N,!0);g=S&&S[x.name];var U=M;g&&g.identifier&&!0===x.bindToController&&(U=g.instance);q(M.$$isolateBindings=x.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,k,l;switch(a.mode){case "@":K.$observe(e,function(a){U[d]=a});K.$$observers[e].$$scope=c;K[e]&&(U[d]=b(K[e])(c));break;case "=":if(f&&!K[e])break;h=L(K[e]);l=h.literal?oa:function(a,b){return a===b||a!==a&&b!==b};k=h.assign||function(){g=U[d]=h(c);throw fa("nonassign",K[e],
57
+x.name);};g=U[d]=h(c);f=function(a){l(a,U[d])||(l(a,g)?k(c,a=U[d]):U[d]=a);return g=a};f.$stateful=!0;f=c.$watch(L(K[e],f),null,h.literal);M.$on("$destroy",f);break;case "&":h=L(K[e]),U[d]=function(a){return h(c,a)}}})}S&&(q(S,function(a){a()}),S=null);g=0;for(m=l.length;g<m;g++)n=l[g],Z(n,n.isolateScope?M:c,N,K,n.require&&Q(n.directiveName,n.require,N,Za),T);var Vb=c;x&&(x.template||null===x.templateUrl)&&(Vb=M);a&&a(Vb,f.childNodes,t,h);for(g=v.length-1;0<=g;g--)n=v[g],Z(n,n.isolateScope?M:c,N,
58
+K,n.require&&Q(n.directiveName,n.require,N,Za),T)}n=n||{};for(var M=-Number.MAX_VALUE,T,W=n.controllerDirectives,S,x=n.newIsolateScopeDirective,ea=n.templateDirective,Ca=n.nonTlbTranscludeDirective,y=!1,Ub=!1,z=n.hasElementTranscludeDirective,w=e.$$element=C(d),J,ga,E,Ba=f,sa,H=0,P=a.length;H<P;H++){J=a[H];var xb=J.$$start,$a=J.$$end;xb&&(w=K(d,xb,$a));E=t;if(M>J.priority)break;if(E=J.scope)J.templateUrl||(O(E)?(Ka("new/isolated scope",x||T,J,w),x=J):Ka("new/isolated scope",x,J,w)),T=T||J;ga=J.name;
59
+!J.templateUrl&&J.controller&&(E=J.controller,W=W||{},Ka("'"+ga+"' controller",W[ga],J,w),W[ga]=J);if(E=J.transclude)y=!0,J.$$tlb||(Ka("transclusion",Ca,J,w),Ca=J),"element"==E?(z=!0,M=J.priority,E=w,w=e.$$element=C(X.createComment(" "+ga+": "+e[ga]+" ")),d=w[0],yb(g,Ua.call(E,0),d),Ba=I(E,f,M,k&&k.name,{nonTlbTranscludeDirective:Ca})):(E=C(Ob(d)).contents(),w.empty(),Ba=I(E,f));if(J.template)if(Ub=!0,Ka("template",ea,J,w),ea=J,E=A(J.template)?J.template(w,e):J.template,E=Nc(E),J.replace){k=J;E=Mb.test(E)?
60
+Oc(R(J.templateNamespace,V(E))):[];d=E[0];if(1!=E.length||d.nodeType!==ia)throw fa("tplrt",ga,"");yb(g,w,d);P={$attr:{}};E=N(d,[],P);var $=a.splice(H+1,a.length-(H+1));x&&wb(E);a=a.concat(E).concat($);Mc(e,P);P=a.length}else w.html(E);if(J.templateUrl)Ub=!0,Ka("template",ea,J,w),ea=J,J.replace&&(k=J),D=G(a.splice(H,a.length-H),w,e,g,y&&Ba,l,v,{controllerDirectives:W,newIsolateScopeDirective:x,templateDirective:ea,nonTlbTranscludeDirective:Ca}),P=a.length;else if(J.compile)try{sa=J.compile(w,e,Ba),
61
+A(sa)?r(null,sa,xb,$a):sa&&r(sa.pre,sa.post,xb,$a)}catch(aa){c(aa,qa(w))}J.terminal&&(D.terminal=!0,M=Math.max(M,J.priority))}D.scope=T&&!0===T.scope;D.transcludeOnThisElement=y;D.elementTranscludeOnThisElement=z;D.templateOnThisElement=Ub;D.transclude=Ba;n.hasElementTranscludeDirective=z;return D}function wb(a){for(var b=0,c=a.length;b<c;b++)a[b]=kc(a[b],{$$isolateScope:!0})}function y(b,e,f,g,h,k,l){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var s;e=a.get(e+"Directive");for(var v=0,r=e.length;v<
62
+r;v++)try{s=e[v],(g===t||g>s.priority)&&-1!=s.restrict.indexOf(f)&&(k&&(s=kc(s,{$$start:k,$$end:l})),b.push(s),h=s)}catch(F){c(F)}}return h}function Mc(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,f){"class"==f?(T(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||
63
+(a[f]=b,d[f]=c[f])})}function G(a,b,c,d,e,f,g,h){var k=[],l,m,s=b[0],n=a.shift(),v=w({},n,{templateUrl:null,transclude:null,replace:null,$$originalDirective:n}),F=A(n.templateUrl)?n.templateUrl(b,c):n.templateUrl,L=n.templateNamespace;b.empty();r(Q.getTrustedResourceUrl(F)).then(function(r){var Q,D;r=Nc(r);if(n.replace){r=Mb.test(r)?Oc(R(L,V(r))):[];Q=r[0];if(1!=r.length||Q.nodeType!==ia)throw fa("tplrt",n.name,F);r={$attr:{}};yb(d,b,Q);var M=N(Q,[],r);O(n.scope)&&wb(M);a=M.concat(a);Mc(c,r)}else Q=
64
+s,b.html(r);a.unshift(v);l=ea(a,Q,c,e,b,n,f,g,h);q(d,function(a,c){a==Q&&(d[c]=b[0])});for(m=S(b[0].childNodes,e);k.length;){r=k.shift();D=k.shift();var I=k.shift(),K=k.shift(),M=b[0];if(!r.$$destroyed){if(D!==s){var x=D.className;h.hasElementTranscludeDirective&&n.replace||(M=Ob(Q));yb(I,C(D),M);T(C(M),x)}D=l.transcludeOnThisElement?W(r,l.transclude,K):K;l(m,r,M,d,D)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?(k.push(b),k.push(c),k.push(d),k.push(a)):(l.transcludeOnThisElement&&(a=
65
+W(b,l.transclude,e)),l(m,b,c,d,a)))}}function E(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 Ka(a,b,c,d){if(b)throw fa("multidir",b.name,c.name,a,qa(d));}function ga(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&I.$$addBindingClass(a);return function(a,c){var e=c.parent();b||I.$$addBindingClass(e);I.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function R(a,
66
+b){a=H(a||"html");switch(a){case "svg":case "math":var c=X.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function Ba(a,b){if("srcdoc"==b)return Q.HTML;var c=ma(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return Q.RESOURCE_URL}function P(a,c,d,e,f){var h=b(d,!0);if(h){if("multiple"===e&&"select"===ma(a))throw fa("selmulti",qa(a));c.push({priority:100,compile:function(){return{pre:function(c,d,l){d=l.$$observers||
67
+(l.$$observers={});if(k.test(e))throw fa("nodomevents");l[e]&&(h=b(l[e],!0,Ba(a,e),g[e]||f))&&(l[e]=h(c),(d[e]||(d[e]=[])).$$inter=!0,(l.$$observers&&l.$$observers[e].$$scope||c).$watch(h,function(a,b){"class"===e&&a!=b?l.$updateClass(a,b):l.$set(e,a)}))}}}})}}function yb(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,
68
+d);a=X.createDocumentFragment();a.appendChild(d);C(c).data(C(d).data());ja?(Kb=!0,ja.cleanData([d])):delete C.cache[d[C.expando]];d=1;for(e=b.length;d<e;d++)f=b[d],C(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Y(a,b){return w(function(){return a.apply(null,arguments)},a,b)}function Z(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,qa(d))}}var Wb=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};Wb.prototype=
69
+{$normalize:ra,$addClass:function(a){a&&0<a.length&&D.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&D.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Pc(a,b);c&&c.length&&D.addClass(this.$$element,c);(c=Pc(b,a))&&c.length&&D.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Hc(f,a),h=df(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=Jb(a,"-"));g=ma(this.$$element);
70
+if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=M(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=V(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+M(V(h[s]),!0),g=g+(" "+V(h[s+1]));h=V(h[2*l]).split(/\s/);g+=M(V(h[0]),!0);2===h.length&&(g+=" "+V(h[1]));this[a]=b=g}!1!==d&&(null===b||b===t?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&q(a[f],function(a){try{a(b)}catch(d){c(d)}})},
71
+$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=Object.create(null)),e=d[a]||(d[a]=[]);e.push(b);x.$evalAsync(function(){e.$$inter||b(c[a])});return function(){Sa(e,b)}}};var sa=b.startSymbol(),Ca=b.endSymbol(),Nc="{{"==sa||"}}"==Ca?Pa:function(a){return a.replace(/\{\{/g,sa).replace(/}}/g,Ca)},$a=/^ngAttr[A-Z]/;I.$$addBindingInfo=l?function(a,b){var c=a.data("$binding")||[];B(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:z;I.$$addBindingClass=l?function(a){T(a,"ng-binding")}:
72
+z;I.$$addScopeInfo=l?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:z;I.$$addScopeClass=l?function(a,b){T(a,b?"ng-isolate-scope":"ng-scope")}:z;return I}]}function ra(b){return Xa(b.replace(kf,""))}function Pc(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 Oc(b){b=C(b);var a=b.length;if(1>=a)return b;for(;a--;)8===b[a].nodeType&&lf.call(b,
73
+a,1);return b}function Be(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){Ia(a,"controller");O(a)?w(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!O(a.$scope))throw E("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,k,l){var p,n,s;k=!0===k;l&&u(l)&&(s=l);u(g)&&(l=g.match(c),n=l[1],s=s||l[3],g=b.hasOwnProperty(n)?b[n]:rc(h.$scope,n,!0)||(a?rc(e,n,!0):t),mb(g,n,!0));if(k)return k=function(){},
74
+k.prototype=(B(g)?g[g.length-1]:g).prototype,p=new k,s&&f(h,s,p,n||g.name),w(function(){d.invoke(g,p,h,n);return p},{instance:p,identifier:s});p=d.instantiate(g,h,n);s&&f(h,s,p,n||g.name);return p}}]}function Ce(){this.$get=["$window",function(b){return C(b.document)}]}function De(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Qc(b){var a={},c,d,e;if(!b)return a;q(b.split("\n"),function(b){e=b.indexOf(":");c=H(V(b.substr(0,e)));d=V(b.substr(e+1));c&&(a[c]=
75
+a[c]?a[c]+", "+d:d)});return a}function Rc(b){var a=O(b)?b:t;return function(c){a||(a=Qc(b));return c?a[H(c)]||null:a}}function Sc(b,a,c){if(A(c))return c(b,a);q(c,function(c){b=c(b,a)});return b}function Ge(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d={"Content-Type":"application/json;charset=utf-8"},e=this.defaults={transformResponse:[function(d,e){if(u(d)){d=d.replace(c,"");var f=e("Content-Type");if(f&&0===f.indexOf("application/json")||b.test(d)&&a.test(d))d=mc(d)}return d}],
76
+transformRequest:[function(a){return O(a)&&"[object File]"!==Fa.call(a)&&"[object Blob]"!==Fa.call(a)?pa(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:na(d),put:na(d),patch:na(d)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},f=!1;this.useApplyAsync=function(a){return y(a)?(f=!!a,this):f};var g=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a,b,c,d,n,s){function m(a){function b(a){var d=w({},
77
+a,{data:Sc(a.data,a.headers,c.transformResponse)});a=a.status;return 200<=a&&300>a?d:n.reject(d)}var c={method:"get",transformRequest:e.transformRequest,transformResponse:e.transformResponse},d=function(a){var b=e.headers,c=w({},a.headers),d,f,b=w({},b.common,b[H(a.method)]);a:for(d in b){a=H(d);for(f in c)if(H(f)===a)continue a;c[d]=b[d]}(function(a){var b;q(a,function(c,d){A(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(c);return c}(a);w(c,a);c.headers=d;c.method=ob(c.method);var f=[function(a){d=
78
+a.headers;var c=Sc(a.data,Rc(d),a.transformRequest);G(c)&&q(d,function(a,b){"content-type"===H(b)&&delete d[b]});G(a.withCredentials)&&!G(e.withCredentials)&&(a.withCredentials=e.withCredentials);return r(a,c,d).then(b,b)},t],g=n.when(c);for(q(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 h=f.shift(),g=g.then(a,h)}g.success=function(a){g.then(function(b){a(b.data,b.status,
79
+b.headers,c)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,c)});return g};return g}function r(c,g,l){function s(a,b,c,e){function g(){r(b,a,c,e)}N&&(200<=a&&300>a?N.put(U,[a,b,Qc(c),e]):N.remove(U));f?d.$applyAsync(g):(g(),d.$$phase||d.$apply())}function r(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?x.resolve:x.reject)({data:a,status:b,headers:Rc(d),config:c,statusText:e})}function I(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var x=
80
+n.defer(),q=x.promise,N,K,U=L(c.url,c.params);m.pendingRequests.push(c);q.then(I,I);!c.cache&&!e.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(N=O(c.cache)?c.cache:O(e.cache)?e.cache:F);if(N)if(K=N.get(U),y(K)){if(K&&A(K.then))return K.then(I,I),K;B(K)?r(K[1],K[0],na(K[2]),K[3]):r(K,200,{},"OK")}else N.put(U,q);G(K)&&((K=Tc(c.url)?b.cookies()[c.xsrfCookieName||e.xsrfCookieName]:t)&&(l[c.xsrfHeaderName||e.xsrfHeaderName]=K),a(c.method,U,g,s,l,c.timeout,c.withCredentials,c.responseType));
81
+return q}function L(a,b){if(!b)return a;var c=[];zd(b,function(a,b){null===a||G(a)||(B(a)||(a=[a]),q(a,function(a){O(a)&&(a=ca(a)?a.toISOString():pa(a));c.push(xa(b)+"="+xa(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var F=c("$http"),x=[];q(g,function(a){x.unshift(u(a)?s.get(a):s.invoke(a))});m.pendingRequests=[];(function(a){q(arguments,function(a){m[a]=function(b,c){return m(w(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){m[a]=
82
+function(b,c,d){return m(w(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");m.defaults=e;return m}]}function mf(){return new R.XMLHttpRequest}function He(){this.$get=["$browser","$window","$document",function(b,a,c){return nf(b,mf,b.defer,a.angular.callbacks,c[0])}]}function nf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),p=null;f.type="text/javascript";f.src=a;f.async=!0;p=function(a){f.removeEventListener("load",p,!1);f.removeEventListener("error",p,!1);e.body.removeChild(f);
83
+f=null;var g=-1,m="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),m=a.type,g="error"===a.type?404:200);c&&c(g,m)};f.addEventListener("load",p,!1);f.addEventListener("error",p,!1);e.body.appendChild(f);return p}return function(e,h,k,l,p,n,s,m){function r(){x&&x();v&&v.abort()}function L(a,d,e,f,g){D&&c.cancel(D);x=v=null;a(d,e,f,g);b.$$completeOutstandingRequest(z)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==H(e)){var F="_"+(d.counter++).toString(36);d[F]=function(a){d[F].data=
84
+a;d[F].called=!0};var x=f(h.replace("JSON_CALLBACK","angular.callbacks."+F),F,function(a,b){L(l,a,d[F].data,"",b);d[F]=z})}else{var v=a();v.open(e,h,!0);q(p,function(a,b){y(a)&&v.setRequestHeader(b,a)});v.onload=function(){var a=v.statusText||"",b="response"in v?v.response:v.responseText,c=1223===v.status?204:v.status;0===c&&(c=b?200:"file"==ua(h).protocol?404:0);L(l,c,b,v.getAllResponseHeaders(),a)};e=function(){L(l,-1,null,null,"")};v.onerror=e;v.onabort=e;s&&(v.withCredentials=!0);if(m)try{v.responseType=
85
+m}catch(Q){if("json"!==m)throw Q;}v.send(k||null)}if(0<n)var D=c(r,n);else n&&A(n.then)&&n.then(r)}}function Ee(){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(f,g,m,r){function L(c){return c.replace(l,b).replace(p,a)}function F(a){try{var b;var c=m?e.getTrusted(m,a):e.valueOf(a);if(null==c)b="";else{switch(typeof c){case "string":break;
86
+case "number":c=""+c;break;default:c=pa(c)}b=c}return b}catch(g){a=Xb("interr",f,g.toString()),d(a)}}r=!!r;for(var x,v,Q=0,D=[],M=[],q=f.length,I=[],S=[];Q<q;)if(-1!=(x=f.indexOf(b,Q))&&-1!=(v=f.indexOf(a,x+h)))Q!==x&&I.push(L(f.substring(Q,x))),Q=f.substring(x+h,v),D.push(Q),M.push(c(Q,F)),Q=v+k,S.push(I.length),I.push("");else{Q!==q&&I.push(L(f.substring(Q)));break}if(m&&1<I.length)throw Xb("noconcat",f);if(!g||D.length){var W=function(a){for(var b=0,c=D.length;b<c;b++){if(r&&G(a[b]))return;I[S[b]]=
87
+a[b]}return I.join("")};return w(function(a){var b=0,c=D.length,e=Array(c);try{for(;b<c;b++)e[b]=M[b](a);return W(e)}catch(g){a=Xb("interr",f,g.toString()),d(a)}},{exp:f,expressions:D,$$watchDelegate:function(a,b,c){var d;return a.$watchGroup(M,function(c,e){var f=W(c);A(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,k=a.length,l=new RegExp(b.replace(/./g,f),"g"),p=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=function(){return a};return g}]}function Fe(){this.$get=
88
+["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,k,l){var p=a.setInterval,n=a.clearInterval,s=0,m=y(l)&&!l,r=(m?d:c).defer(),L=r.promise;k=y(k)?k:0;L.then(null,null,e);L.$$intervalId=p(function(){r.notify(s++);0<k&&s>=k&&(r.resolve(s),n(L.$$intervalId),delete f[L.$$intervalId]);m||b.$apply()},h);f[L.$$intervalId]=r;return L}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):
89
+!1};return e}]}function Nd(){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(" "),
90
+DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a",short:"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function Yb(b){b=b.split("/");for(var a=b.length;a--;)b[a]=kb(b[a]);return b.join("/")}function Uc(b,a,c){b=ua(b,c);a.$$protocol=
91
+b.protocol;a.$$host=b.hostname;a.$$port=$(b.port)||of[b.protocol]||null}function Vc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ua(b,c);a.$$path=decodeURIComponent(d&&"/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=oc(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ta(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Aa(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Zb(b){return b.substr(0,
92
+Aa(b).lastIndexOf("/")+1)}function $b(b,a){this.$$html5=!0;a=a||"";var c=Zb(b);Uc(b,this,b);this.$$parse=function(a){var e=ta(c,a);if(!u(e))throw ab("ipthprfx",a,c);Vc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Hb(this.$$search),b=this.$$hash?"#"+kb(this.$$hash):"";this.$$url=Yb(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=ta(b,d))!==t?
93
+(g=f,g=(f=ta(a,f))!==t?c+(ta("/",f)||f):b+g):(f=ta(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ac(b,a){var c=Zb(b);Uc(b,this,b);this.$$parse=function(d){var e=ta(b,d)||ta(c,d),e="#"==e.charAt(0)?ta(a,e):this.$$html5?e:"";if(!u(e))throw ab("ihshprfx",d,a);Vc(e,this,b);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Hb(this.$$search),e=this.$$hash?
94
+"#"+kb(this.$$hash):"";this.$$url=Yb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Aa(b)==Aa(a)?(this.$$parse(a),!0):!1}}function Wc(b,a){this.$$html5=!0;ac.apply(this,arguments);var c=Zb(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Aa(d)?f=d:(g=ta(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=Hb(this.$$search),e=this.$$hash?"#"+kb(this.$$hash):
95
+"";this.$$url=Yb(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function zb(b){return function(){return this[b]}}function Xc(b,a){return function(c){if(G(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Ie(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Ra(b)?(a.enabled=b,this):O(b)?(Ra(b.enabled)&&(a.enabled=b.enabled),Ra(b.requireBase)&&(a.requireBase=b.requireBase),Ra(b.rewriteLinks)&&
96
+(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(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 h(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,l;l=d.baseHref();var p=d.url(),n;if(a.enabled){if(!l&&a.requireBase)throw ab("nobase");n=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(l||"/");l=e.history?$b:Wc}else n=Aa(p),
97
+l=ac;k=new l(n,"#"+b);k.$$parseLinkUrl(p,p);k.$$state=d.state();var s=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&2!=b.which){for(var e=C(b.target);"a"!==ma(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href"),h=e.attr("href")||e.attr("xlink:href");O(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=ua(g.animVal).href);s.test(g)||!g||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(g,h)||(b.preventDefault(),k.absUrl()!=
98
+d.url()&&(c.$apply(),R.angular["ff-684208-preventDefault"]=!0))}});k.absUrl()!=p&&d.url(k.absUrl(),!0);var m=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state;k.$$parse(a);k.$$state=b;c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented?(k.$$parse(d),k.$$state=e,g(d,!1,e)):(m=!1,h(d,e))});c.$$phase||c.$digest()});c.$watch(function(){var a=d.url(),b=d.state(),f=k.$$replace;if(m||a!==k.absUrl()||k.$$html5&&e.history&&b!==k.$$state)m=!1,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",
99
+k.absUrl(),a,k.$$state,b).defaultPrevented?(k.$$parse(a),k.$$state=b):(g(k.absUrl(),f,b===k.$$state?null:k.$$state),h(a,b))});k.$$replace=!1});return k}]}function Je(){var b=!0,a=this;this.debugEnabled=function(a){return y(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||{},
100
+e=b[a]||b.log||z;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ka(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw la("isecfld",a);return b}function va(b,a){if(b){if(b.constructor===
101
+b)throw la("isecfn",a);if(b.window===b)throw la("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw la("isecdom",a);if(b===Object)throw la("isecobj",a);}return b}function bc(b){return b.constant}function La(b,a,c,d){va(b,d);a=a.split(".");for(var e,f=0;1<a.length;f++){e=ka(a.shift(),d);var g=va(b[e],d);g||(g={},b[e]=g);b=g}e=ka(a.shift(),d);va(b[e],d);return b[e]=c}function Yc(b,a,c,d,e,f){ka(b,f);ka(a,f);ka(c,f);ka(d,f);ka(e,f);return function(f,h){var k=h&&h.hasOwnProperty(b)?
102
+h:f;if(null==k)return k;k=k[b];if(!a)return k;if(null==k)return t;k=k[a];if(!c)return k;if(null==k)return t;k=k[c];if(!d)return k;if(null==k)return t;k=k[d];return e?null==k?t:k=k[e]:k}}function Zc(b,a,c){var d=$c[b];if(d)return d;var e=b.split("."),f=e.length;if(a.csp)d=6>f?Yc(e[0],e[1],e[2],e[3],e[4],c):function(a,b){var d=0,g;do g=Yc(e[d++],e[d++],e[d++],e[d++],e[d++],c)(a,b),b=t,a=g;while(d<f);return g};else{var g="";q(e,function(a,b){ka(a,c);g+="if(s == null) return undefined;\ns="+(b?"s":'((l&&l.hasOwnProperty("'+
103
+a+'"))?l:s)')+"."+a+";\n"});g+="return s;";a=new Function("s","l",g);a.toString=ba(g);d=a}d.sharedGetter=!0;d.assign=function(a,c){return La(a,b,c,b)};return $c[b]=d}function Ke(){var b=Object.create(null),a={csp:!1};this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===
104
+b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=a.valueOf(),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var k=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,k)||(h=d(a),k=b&&b.valueOf());return h},b,c)}for(var l=[],p=0,n=e.length;p<n;p++)l[p]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var k=e[c](a);if(b||(b=!g(k,l[c])))l[c]=k&&k.valueOf()}b&&
105
+(h=d(a));return h},b,c)}function k(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;A(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function l(a,b,c,d){function e(a){var b=!0;q(a,function(a){y(a)||(b=!1)});return b}var f;return f=a.$watch(function(a){return d(a)},function(a,c,d){A(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(a)&&f()})},c)}function p(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){A(b)&&
106
+b.apply(this,arguments);e()},c)}function n(a,b){if(!b)return a;var c=function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=[a]);return c}a.csp=d.csp;return function(d,f){var g,L,F;switch(typeof d){case "string":return F=d=d.trim(),g=b[F],g||(":"===d.charAt(0)&&":"===d.charAt(1)&&(L=!0,d=d.substring(2)),g=new cc(a),g=(new bb(g,c,a)).parse(d),g.constant?g.$$watchDelegate=p:L?(g=e(g),
107
+g.$$watchDelegate=g.literal?l:k):g.inputs&&(g.$$watchDelegate=h),b[F]=g),n(g,f);case "function":return n(d,f);default:return n(z,f)}}}]}function Me(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return ad(function(a){b.$evalAsync(a)},a)}]}function Ne(){this.$get=["$browser","$exceptionHandler",function(b,a){return ad(function(a){b.defer(a)},a)}]}function ad(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=
108
+{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{A(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=
109
+E("$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 l(b,!0,a)},function(b){return l(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,
110
+e;e=c(this,this.$$resolve,this.$$reject);try{if(O(b)||A(b))d=b&&b.then;A(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&&
111
+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(A(b)?b(c):c)}catch(h){a(h)}}})}};var k=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},l=function(a,b,c){var d=null;try{A(c)&&(d=c())}catch(e){return k(e,!1)}return d&&A(d.then)?d.then(function(){return k(a,b)},function(a){return k(a,!1)}):k(a,b)},p=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},n=function m(a){if(!A(a))throw h("norslvr",a);if(!(this instanceof
112
+m))return new m(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};n.defer=function(){return new g};n.reject=function(a){var b=new g;b.reject(a);return b.promise};n.when=p;n.all=function(a){var b=new g,c=0,d=B(a)?[]:{};q(a,function(a,e){c++;p(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return n}function We(){this.$get=["$window","$timeout",function(b,
113
+a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.mozCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Le(){var b=10,a=E("$rootScope"),c=null,d=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler",
114
+"$parse","$browser",function(e,f,g,h){function k(){this.$id=++gb;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.$$isolateBindings=null}function l(b){if(r.$$phase)throw a("inprog",r.$$phase);r.$$phase=b}function p(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function n(){}function s(){for(;x.length;)try{x.shift()()}catch(a){f(a)}d=
115
+null}function m(){null===d&&(d=h.defer(function(){r.$apply(s)}))}k.prototype={constructor:k,$new:function(a,b){function c(){d.$$destroyed=!0}var d;b=b||this;a?(d=new k,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$id=++gb;this.$$ChildScope=null},this.$$ChildScope.prototype=this),d=new this.$$ChildScope);d.$parent=b;d.$$prevSibling=b.$$childTail;b.$$childHead?
116
+(b.$$childTail.$$nextSibling=d,b.$$childTail=d):b.$$childHead=b.$$childTail=d;(a||b!=this)&&d.$on("$destroy",c);return d},$watch:function(a,b,d){var e=g(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,d,e);var f=this.$$watchers,h={fn:b,last:n,get:e,exp:a,eq:!!d};c=null;A(b)||(h.fn=z);f||(f=this.$$watchers=[]);f.unshift(h);return function(){Sa(f,h);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=
117
+!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});q(a,function(a,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(O(e))if(Na(e))for(f!==n&&(f=n,r=f.length=0,l++),a=e.length,r!==a&&(l++,f.length=r=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===
118
+g||(l++,f[b]=g);else{f!==m&&(f=m={},r=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)):(r++,f[b]=g,l++));if(r>a)for(b in l++,f)e.hasOwnProperty(b)||(r--,delete f[b])}else f!==e&&(f=e,l++);return l}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,p=g(a,c),n=[],m={},s=!0,r=0;return this.$watch(p,function(){s?(s=!1,b(e,e,d)):b(e,h,d);if(k)if(O(e))if(Na(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)Gb.call(e,
119
+a)&&(h[a]=e[a]);else h=e})},$digest:function(){var e,g,k,p,m,q,x=b,t,N=[],K,U,y;l("$digest");h.$$checkUrlChange();this===r&&null!==d&&(h.defer.cancel(d),s());c=null;do{q=!1;for(t=this;L.length;){try{y=L.shift(),y.scope.$eval(y.expression)}catch(w){f(w)}c=null}a:do{if(p=t.$$watchers)for(m=p.length;m--;)try{if(e=p[m])if((g=e.get(t))!==(k=e.last)&&!(e.eq?oa(g,k):"number"===typeof g&&"number"===typeof k&&isNaN(g)&&isNaN(k)))q=!0,c=e,e.last=e.eq?Ga(g,null):g,e.fn(g,k===n?g:k,t),5>x&&(K=4-x,N[K]||(N[K]=
120
+[]),U=A(e.exp)?"fn: "+(e.exp.name||e.exp.toString()):e.exp,U+="; newVal: "+pa(g)+"; oldVal: "+pa(k),N[K].push(U));else if(e===c){q=!1;break a}}catch(E){f(E)}if(!(p=t.$$childHead||t!==this&&t.$$nextSibling))for(;t!==this&&!(p=t.$$nextSibling);)t=t.$parent}while(t=p);if((q||L.length)&&!x--)throw r.$$phase=null,a("infdig",b,pa(N));}while(q||L.length);for(r.$$phase=null;F.length;)try{F.shift()()}catch(C){f(C)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=
121
+!0;if(this!==r){for(var b in this.$$listenerCount)p(this,this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=z;this.$on=this.$watch=this.$watchGroup=function(){return z};this.$$listeners={};this.$parent=
122
+this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){r.$$phase||L.length||h.defer(function(){L.length&&r.$digest()});L.push({scope:this,expression:a})},$$postDigest:function(a){F.push(a)},$apply:function(a){try{return l("$apply"),this.$eval(a)}catch(b){f(b)}finally{r.$$phase=null;try{r.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&
123
+x.push(b);m()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[c.indexOf(b)]=null;p(e,1,a)}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=ib([h],arguments,1),l,p;do{d=e.$$listeners[a]||c;h.currentScope=e;
124
+l=0;for(p=d.length;l<p;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,p--;if(g)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 g=ib([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,
125
+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 r=new k,L=r.$$asyncQueue=[],F=r.$$postDigestQueue=[],x=r.$$applyAsyncQueue=[];return r}]}function Od(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=
126
+function(){return function(c,d){var e=d?a:b,f;f=ua(c).href;return""===f||f.match(e)?c:"unsafe:"+f}}}function pf(b){if("self"===b)return b;if(u(b)){if(-1<b.indexOf("***"))throw wa("iwcard",b);b=b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08").replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(hb(b))return new RegExp("^"+b.source+"$");throw wa("imatcher");}function bd(b){var a=[];y(b)&&q(b,function(b){a.push(pf(b))});return a}function Pe(){this.SCE_CONTEXTS=
127
+ha;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=bd(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=bd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?Tc(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()};
128
+return b}var f=function(a){throw wa("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[ha.HTML]=e(g);h[ha.CSS]=e(g);h[ha.URL]=e(g);h[ha.JS]=e(g);h[ha.RESOURCE_URL]=e(h[ha.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw wa("icontext",a,b);if(null===b||b===t||""===b)return b;if("string"!==typeof b)throw wa("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
129
+g)return e.$$unwrapTrustedValue();if(c===ha.RESOURCE_URL){var g=ua(e.toString()),n,s,m=!1;n=0;for(s=b.length;n<s;n++)if(d(b[n],g)){m=!0;break}if(m)for(n=0,s=a.length;n<s;n++)if(d(a[n],g)){m=!1;break}if(m)return e;throw wa("insecurl",e.toString());}if(c===ha.HTML)return f(e);throw wa("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Oe(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sniffer","$sceDelegate",function(a,
130
+c,d){if(b&&c.msie&&8>c.msieDocumentMode)throw wa("iequirks");var e=na(ha);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Pa);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:a(c,function(a){return e.getTrusted(b,a)})};var f=e.parseAs,g=e.getTrusted,h=e.trustAs;q(ha,function(a,b){var c=H(b);e[Xa("parse_as_"+c)]=function(b){return f(a,b)};e[Xa("get_trusted_"+c)]=function(b){return g(a,
131
+b)};e[Xa("trust_as_"+c)]=function(b){return h(a,b)}});return e}]}function Qe(){this.$get=["$window","$document",function(b,a){var c={},d=$((/android (\d+)/.exec(H((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g=f.documentMode,h,k=/^(Moz|webkit|O|ms)(?=[A-Z])/,l=f.body&&f.body.style,p=!1,n=!1;if(l){for(var s in l)if(p=k.exec(s)){h=p[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in l&&"webkit");p=!!("transition"in l||h+"Transition"in
132
+l);n=!!("animation"in l||h+"Animation"in l);!d||p&&n||(p=u(f.body.style.webkitTransition),n=u(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"==a&&9==Da)return!1;if(G(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:Va(),vendorPrefix:h,transitions:p,animations:n,android:d,msie:Da,msieDocumentMode:g}}]}function Se(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){function g(){h.totalPendingRequests--;
133
+if(!f)throw fa("tpload",e);return c.reject()}var h=d;h.totalPendingRequests++;return a.get(e,{cache:b}).then(function(a){a=a.data;if(!a||0===a.length)return g();h.totalPendingRequests--;b.put(e,a);return a},g)}d.totalPendingRequests=0;return d}]}function Te(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];q(a,function(a){var d=ya.element(a).data("$binding");d&&q(d,function(d){c?(new RegExp("(^|\\s)"+
134
+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 k=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function Ue(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,
135
+a,c,d,e){function f(f,k,l){var p=y(l)&&!l,n=(p?d:c).defer(),s=n.promise;k=a.defer(function(){try{n.resolve(f())}catch(a){n.reject(a),e(a)}finally{delete g[s.$$timeoutId]}p||b.$apply()},k);s.$$timeoutId=k;g[k]=n;return s}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 ua(b,a){var c=b;Da&&(Y.setAttribute("href",c),c=Y.href);Y.setAttribute("href",c);return{href:Y.href,protocol:Y.protocol?
136
+Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function Tc(b){b=u(b)?ua(b):b;return b.protocol===cd.protocol&&b.host===cd.host}function Ve(){this.$get=ba(R)}function zc(b){function a(c,d){if(O(c)){var e={};q(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+
137
+"Filter")}}];a("currency",dd);a("date",ed);a("filter",qf);a("json",rf);a("limitTo",sf);a("lowercase",tf);a("number",fd);a("orderBy",gd);a("uppercase",uf)}function qf(){return function(b,a,c){if(!B(b))return b;var d=typeof c,e=[];e.check=function(a,b){for(var c=0;c<e.length;c++)if(!e[c](a,b))return!1;return!0};"function"!==d&&(c="boolean"===d&&c?function(a,b){return ya.equals(a,b)}:function(a,b){if(a&&b&&"object"===typeof a&&"object"===typeof b){for(var d in a)if("$"!==d.charAt(0)&&Gb.call(a,d)&&c(a[d],
138
+b[d]))return!0;return!1}b=(""+b).toLowerCase();return-1<(""+a).toLowerCase().indexOf(b)});var f=function(a,b){if("string"==typeof b&&"!"===b.charAt(0))return!f(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return c(a,b);case "object":switch(typeof b){case "object":return c(a,b);default:for(var d in a)if("$"!==d.charAt(0)&&f(a[d],b))return!0}return!1;case "array":for(d=0;d<a.length;d++)if(f(a[d],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a=
139
+{$:a};case "object":for(var g in a)(function(b){"undefined"!==typeof a[b]&&e.push(function(c){return f("$"==b?c:c&&c[b],a[b])})})(g);break;case "function":e.push(a);break;default:return b}d=[];for(g=0;g<b.length;g++){var h=b[g];e.check(h,g)&&d.push(h)}return d}}function dd(b){var a=b.NUMBER_FORMATS;return function(b,d){G(d)&&(d=a.CURRENCY_SYM);return null==b?b:hd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,2).replace(/\u00A4/g,d)}}function fd(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==
140
+b?b:hd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function hd(b,a,c,d,e){if(!isFinite(b)||O(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",k=[],l=!1;if(-1!==g.indexOf("e")){var p=g.match(/([\d\.]+)e(-?)(\d+)/);p&&"-"==p[2]&&p[3]>e+1?(g="0",b=0):(h=g,l=!0)}if(l)0<e&&-1<b&&1>b&&(h=b.toFixed(e));else{g=(g.split(id)[1]||"").length;G(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);0===b&&(f=!1);b=(""+b).split(id);g=b[0];b=b[1]||"";var p=
141
+0,n=a.lgSize,s=a.gSize;if(g.length>=n+s)for(p=g.length-n,l=0;l<p;l++)0===(p-l)%s&&0!==l&&(h+=c),h+=g.charAt(l);for(l=p;l<g.length;l++)0===(g.length-l)%n&&0!==l&&(h+=c),h+=g.charAt(l);for(;b.length<e;)b+="0";e&&"0"!==e&&(h+=d+b.substr(0,e))}k.push(f?a.negPre:a.posPre);k.push(h);k.push(f?a.negSuf:a.posSuf);return k.join("")}function Ab(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 Z(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();
142
+if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Ab(e,a,d)}}function Bb(b,a){return function(c,d){var e=c["get"+b](),f=ob(a?"SHORT"+b:b);return d[f][e]}}function jd(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function kd(b){return function(a){var c=jd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Ab(a,b)}}function ed(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:
143
+a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=$(b[9]+b[10]),g=$(b[9]+b[11]));h.call(a,$(b[1]),$(b[2])-1,$(b[3]));f=$(b[4]||0)-f;g=$(b[5]||0)-g;h=$(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.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=[],k,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;u(c)&&(c=vf.test(c)?$(c):a(c));aa(c)&&(c=new Date(c));if(!ca(c))return c;
144
+for(;e;)(l=wf.exec(e))?(h=ib(h,l,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));q(h,function(a){k=xf[a];g+=k?k(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function rf(){return function(b){return pa(b,!0)}}function sf(){return function(b,a){aa(b)&&(b=b.toString());if(!B(b)&&!u(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):$(a);if(u(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):
145
+"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function gd(b){return function(a,c,d){function e(a,b){return b?function(b,c){return a(c,b)}:a}function f(a,b){var c=typeof a,d=typeof b;return c==d?(ca(a)&&ca(b)&&(a=a.valueOf(),b=b.valueOf()),"string"==c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Na(a))return a;c=B(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||
146
+Pa;if(u(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(function(a,b){return f(a,b)},c);d=b(a);if(d.constant){var g=d();return e(function(a,b){return f(a[g],b[g])},c)}}return e(function(a,b){return f(d(a),d(b))},c)});for(var g=[],h=0;h<a.length;h++)g.push(a[h]);return g.sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ea(b){A(b)&&(b={link:b});b.restrict=b.restrict||"AC";return ba(b)}function ld(b,
147
+a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||cb;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(){q(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){q(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Ia(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;
148
+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];q(f.$pending,function(b,c){f.$setValidity(c,null,a)});q(f.$error,function(b,c){f.$setValidity(c,null,a)});Sa(g,a)};md({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&&(Sa(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Ma);d.addClass(b,Cb);f.$dirty=!0;f.$pristine=
149
+!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Ma,Cb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;q(g,function(a){a.$setPristine()})};f.$setUntouched=function(){q(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-submitted");f.$submitted=!0;h.$setSubmitted()}}function dc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function db(b,a,c,d,e,f){a.prop("validity");var g=a[0].placeholder,h={},k=H(a[0].type);if(!e.android){var l=
150
+!1;a.on("compositionstart",function(a){l=!0});a.on("compositionend",function(){l=!1;p()})}var p=function(b){if(!l){var e=a.val(),f=b&&b.type;Da&&"input"===(b||h).type&&a[0].placeholder!==g?g=a[0].placeholder:("password"===k||c.ngTrim&&"false"===c.ngTrim||(e=V(e)),(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,f))}};if(e.hasEvent("input"))a.on("input",p);else{var n,s=function(a){n||(n=f.defer(function(){p(a);n=null}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&
151
+19>b||37<=b&&40>=b||s(a)});if(e.hasEvent("paste"))a.on("paste cut",s)}a.on("change",p);d.$render=function(){a.val(d.$isEmpty(d.$modelValue)?"":d.$viewValue)}}function Db(b,a){return function(c,d){var e,f;if(ca(c))return c;if(u(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(yf.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()/
152
+1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},q(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 eb(b,a,c,d){return function(e,f,g,h,k,l,p){function n(a){return y(a)?ca(a)?a:c(a):t}nd(e,f,g,h);db(e,f,g,h,k,l);var s=h&&h.$options&&h.$options.timezone,m;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,m),"UTC"===s&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):t});h.$formatters.push(function(a){if(h.$isEmpty(a))m=
153
+null;else{if(!ca(a))throw Eb("datefmt",a);if((m=a)&&"UTC"===s){var b=6E4*m.getTimezoneOffset();m=new Date(m.getTime()+b)}return p("date")(a,d,s)}return""});if(y(g.min)||g.ngMin){var r;h.$validators.min=function(a){return h.$isEmpty(a)||G(r)||c(a)>=r};g.$observe("min",function(a){r=n(a);h.$validate()})}if(y(g.max)||g.ngMax){var q;h.$validators.max=function(a){return h.$isEmpty(a)||G(q)||c(a)<=q};g.$observe("max",function(a){q=n(a);h.$validate()})}h.$isEmpty=function(a){return!a||a.getTime&&a.getTime()!==
154
+a.getTime()}}}function nd(b,a,c,d){(d.$$hasNativeValidators=O(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function od(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw E("ngModel")("constexpr",c,d);return b(a)}return e}function md(b){function a(a,b){b&&!f[a]?(l.addClass(e,a),f[a]=!0):!b&&f[a]&&(l.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+Jb(b,"-"):"";a(fb+b,!0===c);a(pd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=
155
+b.unset,k=b.parentForm,l=b.$animate;f[pd]=!(f[fb]=e.hasClass(fb));d.$setValidity=function(b,e,f){e===t?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&h(d.$pending,b,f),qd(d.$pending)&&(d.$pending=t));Ra(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(rd,!0),d.$valid=d.$invalid=t,c("",null)):(a(rd,!1),d.$valid=qd(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?t:d.$error[b]?!1:
156
+d.$$success[b]?!0:null;c(b,e);k.$setValidity(b,e,d)}}function qd(b){if(b)for(var a in b)return!1;return!0}function ec(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],p=0;p<b.length;p++)if(e==b[p])continue a;c.push(e)}return c}function e(a){if(!B(a)){if(u(a))return a.split(" ");if(O(a)){var b=[];q(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||
157
+{},d=[];q(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function l(b){if(!0===a||f.$index%2===a){var l=e(b||[]);if(!p){var m=k(l,1);h.$addClass(m)}else if(!oa(b,p)){var r=e(p),m=d(l,r),l=d(r,l),m=k(m,1),l=k(l,-1);m&&m.length&&c.addClass(g,m);l&&l.length&&c.removeClass(g,l)}}p=na(b)}var p;f.$watch(h[b],l,!0);h.$observe("class",function(a){l(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=
158
+e(f.$eval(h[b]));g===a?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}var zf=/^\/(.+)\/([a-z]*)$/,H=function(b){return u(b)?b.toLowerCase():b},Gb=Object.prototype.hasOwnProperty,ob=function(b){return u(b)?b.toUpperCase():b},Da,C,ja,Ua=[].slice,lf=[].splice,Af=[].push,Fa=Object.prototype.toString,Ta=E("ng"),ya=R.angular||(R.angular={}),Wa,gb=0;Da=X.documentMode;z.$inject=[];Pa.$inject=[];var B=Array.isArray,V=function(b){return u(b)?b.trim():b},Va=function(){if(y(Va.isActive_))return Va.isActive_;
159
+var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return Va.isActive_=b},lb=["ng-","data-ng-","ng:","x-ng-"],Id=/[A-Z]/g,qc=!1,Kb,ia=1,jb=3,Md={full:"1.3.0-rc.5",major:1,minor:3,dot:0,codeName:"impossible-choreography"};P.expando="ng339";var tb=P.cache={},cf=1;P._data=function(b){return this.cache[b[this.expando]]||{}};var Ye=/([\:\-\_]+(.))/g,Ze=/^moz([A-Z])/,Bf={mouseleave:"mouseout",mouseenter:"mouseover"},Nb=E("jqLite"),bf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,
160
+Mb=/<|&#?\w+;/,$e=/<([\w:]+)/,af=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,da={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};da.optgroup=da.option;da.tbody=da.tfoot=da.colgroup=da.caption=da.thead;da.th=da.td;var Ha=P.prototype={ready:function(b){function a(){c||(c=
161
+!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),P(R).on("load",a),this.on("DOMContentLoaded",a))},toString:function(){var b=[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?C(this[b]):C(this[this.length+b])},length:0,push:Af,sort:[].sort,splice:[].splice},vb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){vb[H(b)]=b});var Ic={};q("input select option textarea button form details".split(" "),
162
+function(b){Ic[b]=!0});var Jc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};q({data:Pb,removeData:rb},function(b,a){P[a]=b});q({data:Pb,inheritedData:ub,scope:function(b){return C.data(b,"$scope")||ub(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return C.data(b,"$isolateScope")||C.data(b,"$isolateScopeNoTemplate")},controller:Ec,injector:function(b){return ub(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Qb,
163
+css:function(b,a,c){a=Xa(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=H(a);if(vb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||z).specified?d:t;else if(y(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(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(G(b)){var d=a.nodeType;return d===ia||d===jb?a.textContent:""}a.textContent=
164
+b}b.$dv="";return b}(),val:function(b,a){if(G(a)){if(b.multiple&&"select"===ma(b)){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(G(a))return b.innerHTML;qb(b,!0);b.innerHTML=a},empty:Fc},function(b,a){P.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Fc&&(2==b.length&&b!==Qb&&b!==Ec?a:d)===t){if(O(a)){for(e=0;e<g;e++)if(b===Pb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;
165
+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}});q({removeData:rb,on:function a(c,d,e,f){if(y(f))throw Nb("onargs");if(Ac(c)){var g=sb(c,!0);f=g.events;var h=g.handle;h||(h=g.handle=ef(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],k=g.length;k--;){d=g[k];var l=f[d];l||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Bf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,
166
+h,!1),l=f[d]);l.push(e)}}},off:Dc,one:function(a,c,d){a=C(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;qb(a);q(new P(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];q(a.childNodes,function(a){a.nodeType===ia&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===ia||11===d){c=new P(c);for(var d=0,e=c.length;d<
167
+e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===ia){var d=a.firstChild;q(new P(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=C(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:Gc,detach:function(a){Gc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new P(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:Sb,removeClass:Rb,toggleClass:function(a,c,d){c&&q(c.split(" "),function(c){var f=
168
+d;G(f)&&(f=!Qb(a,c));(f?Sb:Rb)(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:Ob,triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=sb(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=
169
+!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:z,type:g,target:a},c.type&&(e=w(e,c)),c=na(h),f=d?[e].concat(d):[e],q(c,function(c){e.isImmediatePropagationStopped()||c.apply(a,f)})}},function(a,c){P.prototype[c]=function(c,e,f){for(var g,h=0,k=this.length;h<k;h++)G(g)?(g=a(this[h],c,e,f),y(g)&&(g=C(g))):Cc(g,a(this[h],c,e,f));return y(g)?g:this};P.prototype.bind=P.prototype.on;P.prototype.unbind=P.prototype.off});Ya.prototype={put:function(a,
170
+c){this[Ja(a,this.nextUid)]=c},get:function(a){return this[Ja(a,this.nextUid)]},remove:function(a){var c=this[a=Ja(a,this.nextUid)];delete this[a];return c}};var Lc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,gf=/,/,hf=/^\s*(_?)(\S+?)\1\s*$/,Kc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,za=E("$injector");Ib.$$annotate=Tb;var Cf=E("$animate"),ye=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Cf("notcsel",c);this.$$selectors[c.substr(1)]=e;
171
+a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=Object.create(null);q((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});q(c.classes,function(a,c){var g=
172
+f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length&&d,e.length&&e]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function k(){l||(l=a.defer(),d(function(){l.resolve();l=null}));return l.promise}var l;return{enter:function(a,c,d){d?d.after(a):c.prepend(a);return k()},leave:function(a){a.remove();return k()},move:function(a,c,d){return this.enter(a,c,d)},addClass:function(a,c){return this.setClass(a,c,[])},$$addClassImmediately:function(a,c){a=C(a);c=
173
+u(c)?c:B(c)?c.join(" "):"";q(a,function(a){Sb(a,c)})},removeClass:function(a,c){return this.setClass(a,[],c)},$$removeClassImmediately:function(a,c){a=C(a);c=u(c)?c:B(c)?c.join(" "):"";q(a,function(a){Rb(a,c)});return k()},setClass:function(a,c,d,e){var l=this,q=!1;a=C(a);if(e)return l.$$addClassImmediately(a,c),l.$$removeClassImmediately(a,d),k();e=a.data("$$animateClasses");e||(e={classes:{}},q=!0);var t=e.classes;c=B(c)?c:c.split(" ");d=B(d)?d:d.split(" ");h(t,c,!0);h(t,d,!1);q&&(e.promise=f(function(c){var d=
174
+a.data("$$animateClasses");a.removeData("$$animateClasses");if(d=d&&g(a,d))d[0]&&l.$$addClassImmediately(a,d[0]),d[1]&&l.$$removeClassImmediately(a,d[1]);c()}),a.data("$$animateClasses",e));return e.promise},enabled:z,cancel:z}}]}],fa=E("$compile");sc.$inject=["$provide","$$sanitizeUriProvider"];var kf=/^(x[\:\-_]|data[\:\-_])/i,Xb=E("$interpolate"),Df=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,of={http:80,https:443,ftp:21},ab=E("$location"),Ef={$$html5:!1,$$replace:!1,absUrl:zb("$$absUrl"),url:function(a){if(G(a))return this.$$url;
175
+a=Df.exec(a);a[1]&&this.path(decodeURIComponent(a[1]));(a[2]||a[1])&&this.search(a[3]||"");this.hash(a[5]||"");return this},protocol:zb("$$protocol"),host:zb("$$host"),port:zb("$$port"),path:Xc("$$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(u(a)||aa(a))a=a.toString(),this.$$search=oc(a);else if(O(a))q(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw ab("isrcharg");
176
+break;default:G(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:Xc("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};q([Wc,ac,$b],function(a){a.prototype=Object.create(Ef);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==$b||!this.$$html5)throw ab("nostate");this.$$state=G(c)?null:c;return this}});var la=E("$parse"),Ff=Function.prototype.call,Gf=Function.prototype.apply,
177
+Hf=Function.prototype.bind,Fb=Object.create(null);q({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;Fb[c]=a});Fb["this"]=function(a){return a};Fb["this"].sharedGetter=!0;var fc=w(Object.create(null),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)?d+e:d:y(e)?e:t},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},
178
+"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"^":function(a,c,d,e){return d(a,c)^e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,
179
+c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),If={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},cc=function(a){this.options=a};cc.prototype={constructor:cc,lex:function(a){this.text=a;this.index=0;this.ch=t;for(this.tokens=[];this.index<this.text.length;)if(this.ch=this.text.charAt(this.index),this.is("\"'"))this.readString(this.ch);else if(this.isNumber(this.ch)||this.is(".")&&
180
+this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(this.ch))this.readIdent();else if(this.is("(){}[].,;:?"))this.tokens.push({index:this.index,text:this.ch}),this.index++;else if(this.isWhitespace(this.ch))this.index++;else{a=this.ch+this.peek();var c=a+this.peek(2),d=fc[this.ch],e=fc[a],f=fc[c];f?(this.tokens.push({index:this.index,text:c,fn:f}),this.index+=3):e?(this.tokens.push({index:this.index,text:a,fn:e}),this.index+=2):d?(this.tokens.push({index:this.index,text:this.ch,fn:d}),
181
+this.index+=1):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a){return-1!==a.indexOf(this.ch)},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},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||
182
+"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=H(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&&
183
+this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}a*=1;this.tokens.push({index:c,text:a,constant:!0,fn:function(){return a}})},readIdent:function(){for(var a=this.text,c="",d=this.index,e,f,g,h;this.index<this.text.length;){h=this.text.charAt(this.index);if("."===h||this.isIdent(h)||this.isNumber(h))"."===h&&(e=this.index),c+=h;else break;this.index++}e&&"."===c[c.length-1]&&(this.index--,c=c.slice(0,-1),e=c.lastIndexOf("."),-1===e&&(e=t));if(e)for(f=
184
+this.index;f<this.text.length;){h=this.text.charAt(f);if("("===h){g=c.substr(e-d+1);c=c.substr(0,e-d);this.index=f;break}if(this.isWhitespace(h))f++;else break}this.tokens.push({index:d,text:c,fn:Fb[c]||Zc(c,this.options,a)});g&&(this.tokens.push({index:e,text:"."}),this.tokens.push({index:e+1,text:g}))},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,
185
+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+=If[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,string:d,constant:!0,fn:function(){return d}});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var bb=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};bb.ZERO=w(function(){return 0},{sharedGetter:!0,constant:!0});bb.prototype=
186
+{constructor:bb,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;if(this.expect("("))a=this.filterChain(),this.consume(")");else if(this.expect("["))a=this.arrayDeclaration();else if(this.expect("{"))a=this.object();else{var c=this.expect();(a=c.fn)||this.throwError("not a primary expression",c);c.constant&&
187
+(a.constant=!0,a.literal=!0)}for(var d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw la("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw la("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){if(0<this.tokens.length){var f=this.tokens[0],
188
+g=f.text;if(g===a||g===c||g===d||g===e||!(a||c||d||e))return f}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){this.expect(a)||this.throwError("is unexpected, expecting ["+a+"]",this.peek())},unaryFn:function(a,c){return w(function(d,e){return a(d,e,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,c,d,e){return w(function(e,g){return c(e,g,a,d)},{constant:a.constant&&d.constant,inputs:!e&&[a,d]})},statements:function(){for(var a=
189
+[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.expect(),d=this.$filter(c.text),e,f;if(this.peek(":"))for(e=[],f=[];this.expect(":");)e.push(this.expression());c=[a].concat(e||[]);return w(function(c,h){var k=a(c,h);if(f){f[0]=
190
+k;for(k=e.length;k--;)f[k+1]=e[k](c,h);return d.apply(t,f)}return d(k)},{constant:!d.$stateful&&c.every(bc),inputs:!d.$stateful&&c})},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),w(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c,d;if(d=
191
+this.expect("?")){c=this.assignment();if(d=this.expect(":")){var e=this.assignment();return w(function(d,g){return a(d,g)?c(d,g):e(d,g)},{constant:a.constant&&c.constant&&e.constant})}this.throwError("expected :",d)}return a},logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.fn,this.logicalAND(),!0);return a},logicalAND:function(){var a=this.equality(),c;if(c=this.expect("&&"))a=this.binaryFn(a,c.fn,this.logicalAND(),!0);return a},equality:function(){var a=
192
+this.relational(),c;if(c=this.expect("==","!=","===","!=="))a=this.binaryFn(a,c.fn,this.equality());return a},relational:function(){var a=this.additive(),c;if(c=this.expect("<",">","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},
193
+unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(bb.ZERO,a.fn,this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this.text,d=this.expect().text,e=Zc(d,this.options,c);return w(function(c,d,h){return e(h||a(c,d))},{assign:function(e,g,h){(h=a(e,h))||a.assign(e,h={});return La(h,d,g,c)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return w(function(e,f){var g=
194
+a(e,f),h=d(e,f);ka(h,c);return g?va(g[h],c):t},{assign:function(e,f,g){var h=ka(d(e,g),c);(g=va(a(e,g),c))||a.assign(e,g={});return g[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var k=c?c(g,h):g,l=a(g,h,k)||z;if(f)for(var p=d.length;p--;)f[p]=va(d[p](g,h),e);va(k,e);if(l){if(l.constructor===l)throw la("isecfn",e);if(l===Ff||l===Gf||l===Hf)throw la("isecff",
195
+e);}k=l.apply?l.apply(k,f):l(f[0],f[1],f[2],f[3],f[4]);return va(k,e)}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;var c=this.expression();a.push(c)}while(this.expect(","))}this.consume("]");return w(function(c,e){for(var f=[],g=0,h=a.length;g<h;g++)f.push(a[g](c,e));return f},{literal:!0,constant:a.every(bc),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.expect();a.push(d.string||
196
+d.text);this.consume(":");d=this.expression();c.push(d)}while(this.expect(","))}this.consume("}");return w(function(d,f){for(var g={},h=0,k=c.length;h<k;h++)g[a[h]]=c[h](d,f);return g},{literal:!0,constant:c.every(bc),inputs:c})}};var $c=Object.create(null),wa=E("$sce"),ha={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},fa=E("$compile"),Y=X.createElement("a"),cd=ua(R.location.href,!0);zc.$inject=["$provide"];dd.$inject=["$locale"];fd.$inject=["$locale"];var id=".",xf={yyyy:Z("FullYear",
197
+4),yy:Z("FullYear",2,0,!0),y:Z("FullYear",1),MMMM:Bb("Month"),MMM:Bb("Month",!0),MM:Z("Month",2,1),M:Z("Month",1,1),dd:Z("Date",2),d:Z("Date",1),HH:Z("Hours",2),H:Z("Hours",1),hh:Z("Hours",2,-12),h:Z("Hours",1,-12),mm:Z("Minutes",2),m:Z("Minutes",1),ss:Z("Seconds",2),s:Z("Seconds",1),sss:Z("Milliseconds",3),EEEE:Bb("Day"),EEE:Bb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ab(Math[0<a?"floor":"ceil"](a/60),
198
+2)+Ab(Math.abs(a%60),2))},ww:kd(2),w:kd(1)},wf=/((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,vf=/^\-?\d+$/;ed.$inject=["$locale"];var tf=ba(H),uf=ba(ob);gd.$inject=["$parse"];var Pd=ba({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===Fa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}),pb={};q(vb,function(a,c){if("multiple"!=a){var d=
199
+ra("ng-"+c);pb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});q(Jc,function(a,c){pb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(zf))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});q(["src","srcset","href"],function(a){var c=ra("ng-"+a);pb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;
200
+"href"===a&&"[object SVGAnimatedString]"===Fa.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(h,c),Da&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var cb={$addControl:z,$$renameControl:function(a,c){a.$name=c},$removeControl:z,$setValidity:z,$setDirty:z,$setPristine:z,$setSubmitted:z};ld.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var sd=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":
201
+"E",controller:ld,compile:function(a){a.addClass(Ma).addClass(fb);return{pre:function(a,d,g,h){if(!("action"in g)){var k=function(c){a.$apply(function(){h.$commitViewValue();h.$setSubmitted()});c.preventDefault?c.preventDefault():c.returnValue=!1};d[0].addEventListener("submit",k,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",k,!1)},0,!1)})}var l=h.$$parentForm,p=h.$name;p&&(La(a,p,h,p),g.$observe(g.name?"name":"ngForm",function(c){p!==c&&(La(a,p,t,p),p=c,La(a,p,h,p),
202
+l.$$renameControl(h,p))}));if(l!==cb)d.on("$destroy",function(){l.$removeControl(h);p&&La(a,p,t,p);w(h,cb)})}}}}}]},Qd=sd(),ce=sd(!0),yf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Jf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Kf=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Lf=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,td=/^(\d{4})-(\d{2})-(\d{2})$/,ud=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
203
+gc=/^(\d{4})-W(\d\d)$/,vd=/^(\d{4})-(\d\d)$/,wd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Mf=/(\s+|^)default(\s+|$)/,Eb=new E("ngModel"),xd={text:function(a,c,d,e,f,g){db(a,c,d,e,f,g);dc(e)},date:eb("date",td,Db(td,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":eb("datetimelocal",ud,Db(ud,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:eb("time",wd,Db(wd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:eb("week",gc,function(a,c){if(ca(a))return a;if(u(a)){gc.lastIndex=0;var d=
204
+gc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,k=0,l=jd(e),f=7*(f-1);c&&(d=c.getHours(),g=c.getMinutes(),h=c.getSeconds(),k=c.getMilliseconds());return new Date(e,0,l.getDate()+f,d,g,h,k)}}return NaN},"yyyy-Www"),month:eb("month",vd,Db(vd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){nd(a,c,d,e);db(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:Lf.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!aa(a))throw Eb("numfmt",
205
+a);a=a.toString()}return a});if(d.min||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||G(h)||a>=h};d.$observe("min",function(a){y(a)&&!aa(a)&&(a=parseFloat(a,10));h=aa(a)&&!isNaN(a)?a:t;e.$validate()})}if(d.max||d.ngMax){var k;e.$validators.max=function(a){return e.$isEmpty(a)||G(k)||a<=k};d.$observe("max",function(a){y(a)&&!aa(a)&&(a=parseFloat(a,10));k=aa(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){db(a,c,d,e,f,g);dc(e);e.$$parserName="url";e.$validators.url=
206
+function(a){return e.$isEmpty(a)||Jf.test(a)}},email:function(a,c,d,e,f,g){db(a,c,d,e,f,g);dc(e);e.$$parserName="email";e.$validators.email=function(a){return e.$isEmpty(a)||Kf.test(a)}},radio:function(a,c,d,e){G(d.name)&&c.attr("name",++gb);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,k){var l=od(k,a,"ngTrueValue",d.ngTrueValue,!0),p=od(k,a,"ngFalseValue",
207
+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 a!==l};e.$formatters.push(function(a){return oa(a,l)});e.$parsers.push(function(a){return a?l:p})},hidden:z,button:z,submit:z,reset:z,file:z},tc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,k){k[0]&&(xd[H(h.type)]||xd.text)(f,g,h,k[0],c,a,d,e)}}}}],fb="ng-valid",
208
+pd="ng-invalid",Ma="ng-pristine",Cb="ng-dirty",rd="ng-pending",Nf=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,k,l,p){this.$modelValue=this.$viewValue=Number.NaN;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=
209
+t;this.$name=p(d.name||"",!1)(a);var n=f(d.ngModel),s=null,m=this,r=function(){var c=n(a);m.$options&&m.$options.getterSetter&&A(c)&&(c=c());return c},L=function(c){var d;m.$options&&m.$options.getterSetter&&A(d=n(a))?d(m.$modelValue):n.assign(a,m.$modelValue)};this.$$setOptions=function(a){m.$options=a;if(!(n.assign||a&&a.getterSetter))throw Eb("nonassign",d.ngModel,qa(e));};this.$render=z;this.$isEmpty=function(a){return G(a)||""===a||null===a||a!==a};var F=e.inheritedData("$formController")||cb,
210
+x=0;md({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:F,$animate:g});this.$setPristine=function(){m.$dirty=!1;m.$pristine=!0;g.removeClass(e,Cb);g.addClass(e,Ma)};this.$setUntouched=function(){m.$touched=!1;m.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){m.$touched=!0;m.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(s);m.$viewValue=m.$$lastCommittedViewValue;m.$render()};
211
+this.$validate=function(){aa(m.$modelValue)&&isNaN(m.$modelValue)||this.$$parseAndValidate()};this.$$runValidators=function(a,c,d,e){function f(){var a=!0;q(m.$validators,function(e,f){var g=e(c,d);a=a&&g;h(f,g)});return a?!0:(q(m.$asyncValidators,function(a,c){h(c,null)}),!1)}function g(){var a=[],e=!0;q(m.$asyncValidators,function(f,g){var k=f(c,d);if(!k||!A(k.then))throw Eb("$asyncValidators",k);h(g,t);a.push(k.then(function(){h(g,!0)},function(a){e=!1;h(g,!1)}))});a.length?l.all(a).then(function(){k(e)},
212
+z):k(!0)}function h(a,c){p===x&&m.$setValidity(a,c)}function k(a){p===x&&e(a)}x++;var p=x;(function(a){var c=m.$$parserName||"parse";if(a===t)h(c,null);else if(h(c,a),!a)return q(m.$validators,function(a,c){h(c,null)}),q(m.$asyncValidators,function(a,c){h(c,null)}),!1;return!0})(a)?f()?g():k(!1):k(!1)};this.$commitViewValue=function(){var a=m.$viewValue;h.cancel(s);if(m.$$lastCommittedViewValue!==a||""===a&&m.$$hasNativeValidators)m.$$lastCommittedViewValue=a,m.$pristine&&(m.$dirty=!0,m.$pristine=
213
+!1,g.removeClass(e,Ma),g.addClass(e,Cb),F.$setDirty()),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var a=m.$$lastCommittedViewValue,c=a,d=G(c)?t:!0;if(d)for(var e=0;e<m.$parsers.length;e++)if(c=m.$parsers[e](c),G(c)){d=!1;break}aa(m.$modelValue)&&isNaN(m.$modelValue)&&(m.$modelValue=r());var f=m.$modelValue,g=m.$options&&m.$options.allowInvalid;g&&(m.$modelValue=c,m.$modelValue!==f&&m.$$writeModelToScope());m.$$runValidators(d,c,a,function(a){g||(m.$modelValue=a?c:t,m.$modelValue!==
214
+f&&m.$$writeModelToScope())})};this.$$writeModelToScope=function(){L(m.$modelValue);q(m.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};this.$setViewValue=function(a,c){m.$viewValue=a;m.$options&&!m.$options.updateOnDefault||m.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=m.$options;e&&y(e.debounce)&&(e=e.debounce,aa(e)?d=e:aa(e[c])?d=e[c]:aa(e["default"])&&(d=e["default"]));h.cancel(s);d?s=h(function(){m.$commitViewValue()},d):k.$$phase?m.$commitViewValue():
215
+a.$apply(function(){m.$commitViewValue()})};a.$watch(function(){var a=r();if(a!==m.$modelValue){m.$modelValue=a;for(var c=m.$formatters,d=c.length,e=a;d--;)e=c[d](e);m.$viewValue!==e&&(m.$viewValue=m.$$lastCommittedViewValue=e,m.$render(),m.$$runValidators(t,a,e,z))}return a})}],re=function(){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Nf,priority:1,compile:function(a){a.addClass(Ma).addClass("ng-untouched").addClass(fb);return{pre:function(a,d,e,f){var g=f[0],h=
216
+f[1]||cb;g.$$setOptions(f[2]&&f[2].$options);h.$addControl(g);e.$observe("name",function(a){g.$name!==a&&h.$$renameControl(g,a)});a.$on("$destroy",function(){h.$removeControl(g)})},post:function(a,d,e,f){var g=f[0];if(g.$options&&g.$options.updateOn)d.on(g.$options.updateOn,function(a){g.$$debounceViewValueCommit(a&&a.type)});d.on("blur",function(d){g.$touched||a.$apply(function(){g.$setTouched()})})}}}}},te=ba({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),
217
+vc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a){return!d.required||!e.$isEmpty(a)},d.$observe("required",function(){e.$validate()}))}}},uc=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){u(a)&&0<a.length&&(a=new RegExp(a));if(a&&!a.test)throw E("ngPattern")("noregexp",g,a,qa(c));f=a||t;e.$validate()});e.$validators.pattern=
218
+function(a){return e.$isEmpty(a)||G(f)||f.test(a)}}}}},xc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("maxlength",function(a){f=$(a)||0;e.$validate()});e.$validators.maxlength=function(a,c){return e.$isEmpty(a)||c.length<=f}}}}},wc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=$(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(a)||c.length>=
219
+f}}}}},se=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?V(f):f;e.$parsers.push(function(a){if(!G(a)){var c=[];a&&q(a.split(h),function(a){a&&c.push(g?V(a):a)});return c}});e.$formatters.push(function(a){return B(a)?a.join(f):t});e.$isEmpty=function(a){return!a||!a.length}}}},Of=/^(true|false|\d+)$/,ue=function(){return{restrict:"A",priority:100,compile:function(a,c){return Of.test(c.ngValue)?function(a,
220
+c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},ve=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==t?(this.$options.updateOnDefault=!1,this.$options.updateOn=V(this.$options.updateOn.replace(Mf,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Vd=["$compile",function(a){return{restrict:"AC",
221
+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})}}}}],Xd=["$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})}}}}],Wd=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",
222
+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))||"")})}}}}],Yd=ec("",!0),$d=ec("Odd",0),Zd=ec("Even",1),ae=Ea({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),be=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],yc={},Pf={blur:!0,focus:!0};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
223
+function(a){var c=ra("ng-"+a);yc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=d(g[c]);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};Pf[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ee=["$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,k,l;c.$watch(e.ngIf,function(c){c?k||g(function(c,f){k=f;c[c.length++]=X.createComment(" end ngIf: "+
224
+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=nb(h.clone),a.leave(l).then(function(){l=null}),h=null))})}}}],fe=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ya.noop,compile:function(f,g){var h=g.ngInclude||g.src,k=g.onload||"",l=g.autoscroll;return function(f,g,s,m,q){var t=0,F,x,v,w=function(){x&&(x.remove(),x=null);F&&(F.$destroy(),
225
+F=null);v&&(d.leave(v).then(function(){x=null}),x=v,v=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h=function(){!y(l)||l&&!f.$eval(l)||c()},s=++t;e?(a(e,!0).then(function(a){if(s===t){var c=f.$new();m.template=a;a=q(c,function(a){w();d.enter(a,null,g).then(h)});F=c;v=a;F.$emit("$includeContentLoaded",e);f.$eval(k)}},function(){s===t&&(w(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(w(),m.template=null)})}}}}],we=["$compile",function(a){return{restrict:"ECA",
226
+priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Bc(f.template,X).childNodes)(c,function(a){d.append(a)},t,t,d)):(d.html(f.template),a(d.contents())(c))}}}],ge=Ea({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),he=Ea({terminal:!0,priority:1E3}),ie=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var h=g.count,k=g.$attr.when&&f.attr(g.$attr.when),l=g.offset||0,p=e.$eval(k)||
227
+{},n={},s=c.startSymbol(),m=c.endSymbol(),r=/^when(Minus)?(.+)$/;q(g,function(a,c){r.test(c)&&(p[H(c.replace("when","").replace("Minus","-"))]=f.attr(g.$attr[c]))});q(p,function(a,e){n[e]=c(a.replace(d,s+h+"-"+l+m))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in p||(c=a.pluralCat(c-l));return n[c](e)},function(a){f.text(a)})}}}],je=["$parse","$animate",function(a,c){var d=E("ngRepeat"),e=function(a,c,d,e,l,p,n){a[d]=e;l&&(a[l]=p);a.$index=c;a.$first=0===c;a.$last=c===
228
+n-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,k=X.createComment(" end ngRepeat: "+h+" "),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw d("iexp",h);var p=l[1],n=l[2],s=l[3],m=l[4],l=p.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp",p);var r=l[3]||l[1],y=
229
+l[2];if(s&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(s)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(s)))throw d("badident",s);var w,x,v,E,z={$id:Ja};m?w=a(m):(v=function(a,c){return Ja(c)},E=function(a){return a});return function(a,f,g,l,m){w&&(x=function(c,d,e){y&&(z[y]=c);z[r]=d;z.$index=e;return w(a,z)});var p=Object.create(null);a.$watchCollection(n,function(g){var l,n,w=f[0],I,F=Object.create(null),z,G,D,B,S,u,A;s&&(a[s]=g);if(Na(g))S=g,n=x||v;else{n=x||E;
230
+S=[];for(A in g)g.hasOwnProperty(A)&&"$"!=A.charAt(0)&&S.push(A);S.sort()}z=S.length;A=Array(z);for(l=0;l<z;l++)if(G=g===S?l:S[l],D=g[G],B=n(G,D,l),p[B])u=p[B],delete p[B],F[B]=u,A[l]=u;else{if(F[B])throw q(A,function(a){a&&a.scope&&(p[a.id]=a)}),d("dupes",h,B,pa(D));A[l]={id:B,scope:t,clone:t};F[B]=!0}for(I in p){u=p[I];B=nb(u.clone);c.leave(B);if(B[0].parentNode)for(l=0,n=B.length;l<n;l++)B[l].$$NG_REMOVED=!0;u.scope.$destroy()}for(l=0;l<z;l++)if(G=g===S?l:S[l],D=g[G],u=A[l],u.scope){I=w;do I=I.nextSibling;
231
+while(I&&I.$$NG_REMOVED);u.clone[0]!=I&&c.move(nb(u.clone),null,C(w));w=u.clone[u.clone.length-1];e(u.scope,l,r,D,y,G,z)}else m(function(a,d){u.scope=d;var f=k.cloneNode(!1);a[a.length++]=f;c.enter(a,null,C(w));w=f;u.clone=a;F[u.id]=u;e(u.scope,l,r,D,y,G,z)});p=F})}}}}],ke=["$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","ng-hide-animate")})}}}],de=["$animate",function(a){return{restrict:"A",multiElement:!0,
232
+link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide","ng-hide-animate")})}}}],le=Ea(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&q(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),me=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],k=[],l=[],p=function(a,c){return function(){a.splice(c,1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=
233
+k.length;d<e;++d)a.cancel(k[d]);d=k.length=0;for(e=l.length;d<e;++d){var r=nb(h[d].clone);l[d].$destroy();(k[d]=a.leave(r)).then(p(k,d))}h.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&q(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=X.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],ne=Ea({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+
234
+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),oe=Ea({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})}}),qe=Ea({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw E("ngTransclude")("orphan",qa(c));f(function(a){c.empty();c.append(a)})}}),Rd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==
235
+d.type&&a.put(d.id,c[0].text)}}}],yd=E("ngOptions"),pe=ba({restrict:"A",terminal:!0}),Sd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\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]+?))?$/,e={$setViewValue:z};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var k=this,l={},p=e,n;k.databound=d.ngModel;
236
+k.init=function(a,c,d){p=a;n=d};k.addOption=function(c,d){Ia(c,'"option value"');l[c]=!0;p.$viewValue==c&&(a.val(c),n.parent()&&n.remove());d[0].hasAttribute("selected")&&(d[0].selected=!0)};k.removeOption=function(a){this.hasOption(a)&&(delete l[a],p.$viewValue==a&&this.renderUnknownOption(a))};k.renderUnknownOption=function(c){c="? "+Ja(c)+" ?";n.val(c);a.prepend(n);a.val(c);n.prop("selected",!0)};k.hasOption=function(a){return l.hasOwnProperty(a)};c.$on("$destroy",function(){k.renderUnknownOption=
237
+z})}],link:function(e,g,h,k){function l(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(u.parent()&&u.remove(),c.val(a),""===a&&z.prop("selected",!0)):G(a)&&z?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){u.parent()&&u.remove();d.$setViewValue(c.val())})})}function p(a,c,d){var e;d.$render=function(){var a=new Ya(d.$viewValue);q(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){oa(e,d.$viewValue)||(e=na(d.$viewValue),
238
+d.$render())});c.on("change",function(){a.$apply(function(){var a=[];q(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function n(e,f,g){function h(a,c,d){R[u]=d;F&&(R[F]=c);return a(e,R)}function k(a){var c;if(m)if(!C&&H&&B(a)){c=new Ya([]);for(var d=0;d<a.length;d++)c.put(h(H,null,a[d]),!0)}else c=new Ya(a);else!A&&H&&(a=h(H,null,a));return function(d,e){var f;f=A?A:H?H:D;return m?y(c.remove(h(f,d,e))):a==h(f,d,e)}}function l(){x||(e.$$postDigest(p),x=!0)}function p(){x=
239
+!1;var a={"":[]},c=[""],d,l,n,q,r;n=g.$viewValue;q=M(e)||[];var t=F?hc(q):q,u,A,C,B,D;B=k(n);r=!1;var H;for(D=0;C=t.length,D<C;D++){u=D;if(F&&(u=t[D],"$"===u.charAt(0)))continue;A=q[u];d=h(G,u,A)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=B(u,A);r=r||d;u=h(z,u,A);u=y(u)?u:"";l.push({id:F?t[D]:D,label:u,selected:d})}m||(w||null===n?a[""].unshift({id:"",label:"",selected:!r}):r||a[""].unshift({id:"?",label:"",selected:!0}));B=0;for(t=c.length;B<t;B++){d=c[B];l=a[d];P.length<=B?(n={element:E.clone().attr("label",
240
+d),label:l.label},q=[n],P.push(q),f.append(n.element)):(q=P[B],n=q[0],n.label!=d&&n.element.attr("label",n.label=d));u=null;D=0;for(C=l.length;D<C;D++)d=l[D],(r=q[D+1])?(u=r.element,r.label!==d.label&&u.text(r.label=d.label),r.id!==d.id&&u.val(r.id=d.id),u[0].selected!==d.selected&&(u.prop("selected",r.selected=d.selected),Da&&u.prop("selected",r.selected))):(""===d.id&&w?H=w:(H=v.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).text(d.label),q.push({element:H,label:d.label,
241
+id:d.id,selected:d.selected}),s.addOption(d.label,H),u?u.after(H):n.element.append(H),u=H);for(D++;q.length>D;)d=q.pop(),s.removeOption(d.label),d.element.remove()}for(;P.length>B;)P.pop()[0].element.remove()}var n;if(!(n=r.match(d)))throw yd("iexp",r,qa(f));var z=c(n[2]||n[1]),u=n[4]||n[6],C=/ as /.test(n[0])&&n[1],A=C?c(C):null,F=n[5],G=c(n[3]||""),D=c(n[2]?n[1]:u),M=c(n[7]),O=n[8],H=O?c(n[8]):null,P=[[{element:f,label:""}]],R={};if(H&&A)throw yd("trkslct",C,O);w&&(a(w)(e),w.removeClass("ng-scope"),
242
+w.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=M(e)||[],c;if(m)c=[],q(f.val(),function(d){c.push("?"===d?t:""===d?null:h(A?A:D,d,a[d]))});else{var d=f.val();c="?"===d?t:""===d?null:h(A?A:D,d,a[d])}g.$setViewValue(c);p()})});g.$render=p;e.$watchCollection(M,l);e.$watchCollection(function(){var a=M(e),c;if(a&&B(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(z,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(z,d,a[d]));return c},l);m&&e.$watchCollection(function(){return g.$modelValue},
243
+l)}if(k[1]){var s=k[0];k=k[1];var m=h.multiple,r=h.ngOptions,w=!1,z,x=!1,v=C(X.createElement("option")),E=C(X.createElement("optgroup")),u=v.clone();h=0;for(var A=g.children(),O=A.length;h<O;h++)if(""===A[h].value){z=w=A.eq(h);break}s.init(k,w,u);m&&(k.$isEmpty=function(a){return!a||0===a.length});r?n(e,g,k):m?p(e,g,k):l(e,g,k,s)}}}}],Ud=["$interpolate",function(a){var c={addOption:z,removeOption:z};return{restrict:"E",priority:100,compile:function(d,e){if(G(e.value)){var f=a(d.text(),!0);f||e.$set("value",
244
+d.text())}return function(a,d,e){var l=d.parent(),p=l.data("$selectController")||l.parent().data("$selectController");p&&p.databound||(p=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&p.removeOption(c);p.addOption(a,d)}):p.addOption(e.value,d);d.on("$destroy",function(){p.removeOption(e.value)})}}}}],Td=ba({restrict:"E",terminal:!1});R.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Jd(),Ld(ya),C(X).ready(function(){Fd(X,pc)}))})(window,document);
245
+!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
202246 //# sourceMappingURL=angular.min.js.map
securis/src/main/resources/static/js/angular/angular.min.js.map
....@@ -1,8 +1,8 @@
11 {
22 "version":3,
33 "file":"angular.min.js",
4
-"lineCount":202,
5
-"mappings":"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",
6
-"sources":["angular.js","MINERR_ASSET"],
7
-"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","location","alert","setInterval","isElement","node","nodeName","on","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","csp","securityPolicy","isActive","querySelector","bind","self","fn","curryArgs","slice","startIndex","apply","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","empty","e","elemHtml","append","html","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","attr","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","nodes","startNode","endNode","nextSibling","setupModuleLoader","$injectorMinErr","$$minErr","factory","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","jqLiteMinErr","div","createElement","innerHTML","removeChild","firstChild","jqLiteAddNodes","childNodes","fragment","createDocumentFragment","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","trim","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","ii","jqLiteEmpty","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","eventHandlersCopy","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","angularModule","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","$AnchorScrollProvider","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$BrowserProvider","$document","$CacheFactoryProvider","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$TemplateCacheProvider","$cacheFactory","$CompileProvider","$$sanitizeUriProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","EVENT_HANDLER_ATTR_REGEXP","directive","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$$sanitizeUri","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","wrap","compositeLinkFn","compileNodes","safeAddClass","publicLinkFn","cloneConnectFn","transcludeControllers","$linkNode","JQLitePrototype","eq","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","$node","childScope","nodeListLength","stableNodeList","Array","linkFns","nodeLinkFn","$new","childTranscludeFn","transclude","createBoundTranscludeFn","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","terminal","transcludedScope","cloneFn","controllers","scopeCreated","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","j","jj","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","optional","directiveName","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","isolateScope","$$element","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","compare","$$isolateBindings","$observe","$$observers","$$scope","literal","a","b","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","$compileNode","$template","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","childBoundTranscludeFn","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","diff","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","parentNode","j2","replaceChild","appendChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","newClasses","oldClasses","tokenDifference","writeAttr","booleanKey","prop","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","$ControllerProvider","CNTRL_REG","register","this.register","expression","identifier","$DocumentProvider","$ExceptionHandlerProvider","exception","cause","parseHeaders","parsed","line","headersGetter","headersObj","transformData","fns","$HttpProvider","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","uppercase","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","createXhr","ActiveXObject","XMLHttpRequest","$HttpBackendProvider","createHttpBackend","callbacks","$browserDefer","jsonpReq","script","doneWrapper","onreadystatechange","onload","onerror","body","script.onreadystatechange","readyState","script.onerror","ABORTED","timeoutRequest","jsonpDone","xhr","abort","completeRequest","protocol","urlResolve","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","$InterpolateProvider","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","newErr","$interpolate.startSymbol","$interpolate.endSymbol","$IntervalProvider","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","$LocaleProvider","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","$LocationProvider","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","animVal","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","$LogProvider","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","simpleGetterFn1","simpleGetterFn2","getterFn","getterFnCache","pathKeys","pathKeysLength","evaledFnGetter","Function","$ParseProvider","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","$QProvider","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","$RootScopeProvider","TTL","$rootScopeMinErr","lastDirtyWatch","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","$$listenerCount","beginPhase","phase","compileToFn","decrementListenerCount","current","initWatchVal","isolate","child","ChildScope","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","changeDetected","objGetter","internalArray","internalObject","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","isNaN","next","expr","$$postDigest","$on","namedListeners","$emit","listenerArgs","array1","currentScope","$$SanitizeUriProvider","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","$SceDelegateProvider","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","$SceProvider","enabled","this.enabled","$sceDelegate","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","sceParseAsTrusted","enumValue","lName","$SnifferProvider","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","$TimeoutProvider","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","host","requestUrl","originUrl","$WindowProvider","$FilterProvider","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","predicate","v1","v2","arrayCopy","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","textInputType","ctrl","composing","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","validate","patternValidator","patternObj","$formatters","$parsers","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","ngClassWatchAction","$index","flattenClasses","classes","old$index","mod","Object","version","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","option","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","one","off","replaceNode","insertBefore","prepend","wrapNode","after","newElement","toggleClass","condition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","$animateMinErr","$AnimateProvider","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","$timeout","enter","leave","move","PATH_MATCH","paramValue","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","Parser.ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","htmlAnchorDirective","ngAttributeAliasDirectives","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formDirective","formElement","action","preventDefaultListener","parentFormCtrl","alias","ngFormDirective","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","inputDirective","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ngModelDirective","ctrls","modelCtrl","formCtrl","ngChangeDirective","ngChange","requiredDirective","required","validator","ngListDirective","ngList","viewValue","CONSTANT_VALUE_REGEXP","ngValueDirective","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBindDirective","ngBind","ngBindWatchAction","ngBindTemplateDirective","ngBindTemplate","ngBindHtmlDirective","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","ngClassDirective","ngClassOddDirective","ngClassEvenDirective","ngCloakDirective","ngControllerDirective","ngEventDirectives","ngIfDirective","$transclude","ngIf","ngIfWatchAction","ngIncludeDirective","$anchorScroll","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","ngIncludeFillContentDirective","$compile","ngInitDirective","ngInit","ngNonBindableDirective","ngPluralizeDirective","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatDirective","ngRepeatMinErr","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","valueIdentifier","keyIdentifier","hashFnLocals","lhs","rhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","id","$first","$last","$middle","$odd","$even","ngShowDirective","ngShow","ngShowWatchAction","ngHideDirective","ngHide","ngHideWatchAction","ngStyleDirective","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchDirective","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhenDirective","ngSwitchWhen","ngSwitchDefaultDirective","ngTranscludeDirective","$attrs","scriptDirective","ngOptionsMinErr","ngOptionsDirective","selectDirective","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngModelCtrl.$isEmpty","optionDirective","nullSelectCtrl","selectCtrlName","interpolateWatchAction","styleDirective","publishExternalAPI","ngModule","$$csp"]
4
+"lineCount":245,
5
+"mappings":"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",
6
+"sources":["angular.js"],
7
+"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","extend","dst","ii","arguments","Object","j","jj","int","str","parseInt","inherit","parent","extra","prototype","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","ngMinErr","result","Date","getTime","RegExp","match","lastIndex","emptyObject","create","getPrototypeOf","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","concat","array1","array2","slice","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","getAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","$LocaleProvider","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpBackend","$HttpBackendProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$asyncCallback","$$AsyncCallbackProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","annotate","$inject","argDecl","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","err","shift","locals","Type","Constructor","instance","returnedValue","has","$injector","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","servicename","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","scroll","hash","elm","getElementById","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","supported","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","lastBrowserUrl","url","lastHistoryState","history","state","urlChangeListeners","listener","rawDocument","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","reloadLocation","self.url","sameBase","stripHash","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$checkUrlChange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","warn","cookieArray","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","attrName","mode","optional","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","addClass","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","transcludeControllers","parentBoundTranscludeFn","futureParentElement","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","Array","linkFns","idx","nodeLinkFn","$new","transcludeOnThisElement","createBoundTranscludeFn","transclude","elementTranscludeOnThisElement","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","elementTransclusion","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","nName","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","substr","directiveNName","multiElement","addAttrInterpolateDirective","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","$searchElement","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","scopeToChild","controllerDirectives","$scope","$attrs","$transclude","controllerInstance","controllerAs","templateDirective","$$originalDirective","isolateScopeController","isolateBindingContext","identifier","bindToController","lastValue","parentGet","parentSet","compare","$observe","$$observers","$$scope","literal","b","assign","parentValueWatch","parentValue","$stateful","unwatch","$on","invokeLinkFn","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","attrInterpolatePreLinkFn","$$inter","newValue","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","attributesToCopy","$normalize","$addClass","classVal","$removeClass","removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","dataName","PREFIX_REGEXP","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","CNTRL_REG","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","exception","cause","parseHeaders","headers","line","headersGetter","headersObj","transformData","fns","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","transformResponse","defaultHttpResponseTransform","contentType","APPLICATION_JSON","transformRequest","d","common","patch","xsrfCookieName","xsrfHeaderName","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","requestConfig","response","resp","status","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","reqHeaderName","lowercaseDefHeaderName","execHeaders","headerContent","headerFn","header","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","removePendingReq","pendingRequests","cachedResp","buildUrl","params","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","v","toISOString","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","mustHaveExpression","trustedContext","unescapeText","escapedStartRegexp","escapedEndRegexp","parseStringifyInterceptor","getTrusted","valueOf","newErr","$interpolateMinErr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","compute","interpolationFn","$$watchDelegate","objectEquality","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","NUMBER_FORMATS","DECIMAL_SEP","GROUP_SEP","PATTERNS","minInt","minFrac","maxFrac","posPre","posSuf","negPre","negSuf","gSize","lgSize","CURRENCY_SYM","DATETIME_FORMATS","MONTH","SHORTMONTH","DAY","SHORTDAY","AMPMS","medium","short","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","appBase","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripFile","lastIndexOf","LocationHtml5Url","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","which","target","absHref","animVal","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","children","isConstant","setter","setValue","fullExp","propertyObj","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafeGetter","pathVal","getterFn","getterFnCache","pathKeys","pathKeysLength","code","evaledFnGetter","Function","sharedGetter","fn.assign","$parseOptions","wrapSharedExpression","wrapped","collectExpressionInputs","inputs","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","parsedExpression","inputExpressions","$$inputs","lastResult","oldInputValue","expressionInputWatch","newInputValue","oldInputValueOfValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","oneTime","cacheKey","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$listeners","$$listenerCount","beginPhase","phase","decrementListenerCount","current","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","destroyChild","child","$$ChildScope","this.$$ChildScope","watchExp","watcher","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","expr","unwatchFn","watchGroupSubAction","$watchCollection","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","asyncQueue","$eval","isNaN","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","$emit","targetScope","listenerArgs","currentScope","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","maybeTrusted","allowed","this.enabled","msie","msieDocumentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","documentMode","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","handleError","totalPendingRequests","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","base","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","amount","currencySymbol","formatNumber","number","fractionSize","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","round","fraction","lgroup","group","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","timezone","NUMBER_STRING","DATE_FORMATS_SPLIT","setMinutes","getMinutes","getTimezoneOffset","DATE_FORMATS","object","limit","Infinity","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","v1","v2","map","predicate","arrayCopy","ngDirective","FormController","controls","parentForm","$$parentForm","nullFormCtrl","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$addControl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","VALIDITY_STATE_PROPERTY","placeholder","noevent","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$modelValue","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","$ngModelMinErr","timezoneOffset","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","ctrl.$isEmpty","validity","badInput","typeMismatch","parseConstantExpr","fallback","parseFn","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","hasClass","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","classDirective","arrayDifference","arrayClasses","classes","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","REGEX_STRING_REGEXP","isActive_","active","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","readyState","removeData","removeAttribute","css","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","off","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","$$annotate","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","runAnimationPostDigest","cancelFn","$$cancelFn","defer.promise.$$cancelFn","ngAnimatePostDigest","ngAnimateNotifyComplete","resolveElementClasses","hasClasses","cachedClassManipulation","op","asyncPromise","currentDefer","enter","leave","move","$$addClassImmediately","addClassImmediately","$$removeClassImmediately","removeClassImmediately","add","runSynchronously","createdCache","STORAGE_KEY","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","CALL","APPLY","BIND","CONSTANTS","null","true","false","constantGetter","OPERATORS","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","!","ESCAPE","lex","tokens","is","readString","peek","readNumber","isIdent","readIdent","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","lastDot","peekIndex","methodName","quote","rawString","hex","String","fromCharCode","rep","ZERO","statements","primary","expect","filterChain","consume","arrayDeclaration","functionCall","objectIndex","fieldAccess","msg","peekToken","e1","e2","e3","e4","t","unaryFn","right","$parseUnaryFn","binaryFn","left","isBranching","$parseBinaryFn","$parseStatements","inputFn","argsFn","$parseFilter","every","assignment","ternary","$parseAssignment","logicalOR","middle","$parseTernary","logicalAND","equality","relational","additive","multiplicative","unary","field","$parseFieldAccess","o","indexFn","$parseObjectIndex","fnGetter","contextGetter","expressionText","$parseFunctionCall","elementFns","elementFn","$parseArrayLiteral","valueFns","$parseObjectLiteral","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","Z","timeZoneGetter","zone","paddedZone","ww","w","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","ngFormCompile","formElement","ngFormPreLink","handleFormSubmission","returnValue","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","DEFAULT_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","minutes","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrls","NgModelController","$asyncValidators","$viewChangeListeners","$untouched","$touched","parsedNgModel","pendingDebounce","ngModelGet","modelValue","getterSetter","ngModelSet","$$setOptions","this.$$setOptions","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","$$parseAndValidate","$$runValidators","this.$$runValidators","parseValid","viewValue","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","allValid","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","this.$$parseAndValidate","parserValid","prevModelValue","allowInvalid","$$writeModelToScope","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","ctrl.$validators.maxlength","ctrl.$validators.minlength","trimValues","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","that","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","getStringValue","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","ngEventHandler","$event","previousElements","ngIfWatchAction","newScope","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","lhs","rhs","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","itemKey","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","selectMultipleWatch","setupAsOptions","callExpression","exprFn","valueName","keyName","createIsSelectedFn","selectedSet","selectAs","trackFn","trackIndex","selectAsFn","isSelected","compareValueFn","scheduleRendering","renderScheduled","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","existingOption","valuesFn","groupIndex","anySelected","groupByFn","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","lastElement","optionTemplate","optionsExp","track","selectionChanged","selectedKey","viewValueFn","getLabels","toDisplay","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","$$csp"]
88 }
securis/src/main/resources/static/js/catalogs.js
....@@ -137,17 +137,14 @@
137137 this.getField = function(key, catalog) {
138138 catalog = catalog || _current;
139139 if (!catalog)
140
- throw new Error(
141
- 'There is no current catalog selected');
140
+ throw new Error('There is no current catalog selected');
142141 var index = -1;
143142 if (typeof key === 'string') {
144143 for (var i = catalog.fields.length - 1; i >= 0
145
- && catalog.fields[i].name !== key; i--)
146
- ;
144
+ && catalog.fields[i].name !== key; i--);
147145 index = i;
148146 } else {
149
- index = key; // In this case key ===
150
- // field position
147
+ index = key; // In this case key === field position
151148 }
152149
153150 return index === -1 ? {}
....@@ -160,17 +157,17 @@
160157
161158 function _success(response) {
162159 console.debug('$resource action success')
160
+ console.log(_current);
161
+
163162 }
164163 function _fail(response) {
165
- console
166
- .error('Error trying to get data, HTTP error code: '
164
+ console.error('Error trying to get data, HTTP error code: '
167165 + response.status)
168166 }
169167
170168 this.save = function(data) {
171169 if (!_current)
172
- throw new Error(
173
- 'There is no current catalog selected');
170
+ throw new Error('There is no current catalog selected');
174171
175172 var resource = this.getResource();
176173 return resource.save(data, _success, _fail);
....@@ -200,9 +197,7 @@
200197 if (!field)
201198 return;
202199 var resource = this.getResource(res);
203
- var data = preloadedData
204
- || resource.query({}, _success,
205
- _fail);
200
+ var data = preloadedData || resource.query({}, _success, _fail);
206201 var that = this;
207202 data.$promise.then(function(responseData) {
208203 var pk = that.getPk(that
....@@ -223,8 +218,7 @@
223218 this.loadRefs = function(refs, refsFields) {
224219 if (!refsFields || refsFields.length === 0) {
225220 if (!_current)
226
- throw new Error(
227
- 'There is no current catalog selected');
221
+ throw new Error('There is no current catalog selected');
228222 refsFields = [];
229223 _current.fields.forEach(function(f) {
230224 if (f.resource)
securis/src/main/resources/static/js/catalogs.json
....@@ -27,6 +27,11 @@
2727 "autogenerate" : true,
2828 "type" : "date",
2929 "readOnly" : true
30
+ }, {
31
+ "name" : "metadata",
32
+ "display" : "Metadata",
33
+ "type" : "metadata",
34
+ "allow_creation": true
3035 } ]
3136 }, {
3237 "name" : "License types",
....@@ -73,6 +78,17 @@
7378 "name" : "application_name",
7479 "display" : "Application",
7580 "listingOnly" : true
81
+ }, {
82
+ "name" : "metadata",
83
+ "display" : "Metadata",
84
+ "type" : "metadata",
85
+ "allow_creation": false,
86
+ "limited_to": {
87
+ "resource": "application",
88
+ "list": "metadata",
89
+ "filter_field": "application_id"
90
+ }
91
+
7692 } ]
7793 }, {
7894 "name" : "Organizations",
securis/src/main/resources/static/js/vendor/bootstrap.js
....@@ -1,13 +1,13 @@
11 /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
33 * Copyright 2011-2014 Twitter, Inc.
44 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
55 */
66
7
-if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery') }
7
+if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') }
88
99 /* ========================================================================
10
- * Bootstrap: transition.js v3.1.0
10
+ * Bootstrap: transition.js v3.2.0
1111 * http://getbootstrap.com/javascript/#transitions
1212 * ========================================================================
1313 * Copyright 2011-2014 Twitter, Inc.
....@@ -25,10 +25,10 @@
2525 var el = document.createElement('bootstrap')
2626
2727 var transEndEventNames = {
28
- 'WebkitTransition' : 'webkitTransitionEnd',
29
- 'MozTransition' : 'transitionend',
30
- 'OTransition' : 'oTransitionEnd otransitionend',
31
- 'transition' : 'transitionend'
28
+ WebkitTransition : 'webkitTransitionEnd',
29
+ MozTransition : 'transitionend',
30
+ OTransition : 'oTransitionEnd otransitionend',
31
+ transition : 'transitionend'
3232 }
3333
3434 for (var name in transEndEventNames) {
....@@ -42,8 +42,9 @@
4242
4343 // http://blog.alexmaccaw.com/css-transitions
4444 $.fn.emulateTransitionEnd = function (duration) {
45
- var called = false, $el = this
46
- $(this).one($.support.transition.end, function () { called = true })
45
+ var called = false
46
+ var $el = this
47
+ $(this).one('bsTransitionEnd', function () { called = true })
4748 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
4849 setTimeout(callback, duration)
4950 return this
....@@ -51,12 +52,22 @@
5152
5253 $(function () {
5354 $.support.transition = transitionEnd()
55
+
56
+ if (!$.support.transition) return
57
+
58
+ $.event.special.bsTransitionEnd = {
59
+ bindType: $.support.transition.end,
60
+ delegateType: $.support.transition.end,
61
+ handle: function (e) {
62
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
63
+ }
64
+ }
5465 })
5566
5667 }(jQuery);
5768
5869 /* ========================================================================
59
- * Bootstrap: alert.js v3.1.0
70
+ * Bootstrap: alert.js v3.2.0
6071 * http://getbootstrap.com/javascript/#alerts
6172 * ========================================================================
6273 * Copyright 2011-2014 Twitter, Inc.
....@@ -74,6 +85,8 @@
7485 var Alert = function (el) {
7586 $(el).on('click', dismiss, this.close)
7687 }
88
+
89
+ Alert.VERSION = '3.2.0'
7790
7891 Alert.prototype.close = function (e) {
7992 var $this = $(this)
....@@ -99,12 +112,13 @@
99112 $parent.removeClass('in')
100113
101114 function removeElement() {
102
- $parent.trigger('closed.bs.alert').remove()
115
+ // detach from parent, fire event then clean up data
116
+ $parent.detach().trigger('closed.bs.alert').remove()
103117 }
104118
105119 $.support.transition && $parent.hasClass('fade') ?
106120 $parent
107
- .one($.support.transition.end, removeElement)
121
+ .one('bsTransitionEnd', removeElement)
108122 .emulateTransitionEnd(150) :
109123 removeElement()
110124 }
....@@ -113,9 +127,7 @@
113127 // ALERT PLUGIN DEFINITION
114128 // =======================
115129
116
- var old = $.fn.alert
117
-
118
- $.fn.alert = function (option) {
130
+ function Plugin(option) {
119131 return this.each(function () {
120132 var $this = $(this)
121133 var data = $this.data('bs.alert')
....@@ -125,6 +137,9 @@
125137 })
126138 }
127139
140
+ var old = $.fn.alert
141
+
142
+ $.fn.alert = Plugin
128143 $.fn.alert.Constructor = Alert
129144
130145
....@@ -145,7 +160,7 @@
145160 }(jQuery);
146161
147162 /* ========================================================================
148
- * Bootstrap: button.js v3.1.0
163
+ * Bootstrap: button.js v3.2.0
149164 * http://getbootstrap.com/javascript/#buttons
150165 * ========================================================================
151166 * Copyright 2011-2014 Twitter, Inc.
....@@ -165,6 +180,8 @@
165180 this.isLoading = false
166181 }
167182
183
+ Button.VERSION = '3.2.0'
184
+
168185 Button.DEFAULTS = {
169186 loadingText: 'loading...'
170187 }
....@@ -177,9 +194,9 @@
177194
178195 state = state + 'Text'
179196
180
- if (!data.resetText) $el.data('resetText', $el[val]())
197
+ if (data.resetText == null) $el.data('resetText', $el[val]())
181198
182
- $el[val](data[state] || this.options[state])
199
+ $el[val](data[state] == null ? this.options[state] : data[state])
183200
184201 // push to event loop to allow forms to submit
185202 setTimeout($.proxy(function () {
....@@ -213,9 +230,7 @@
213230 // BUTTON PLUGIN DEFINITION
214231 // ========================
215232
216
- var old = $.fn.button
217
-
218
- $.fn.button = function (option) {
233
+ function Plugin(option) {
219234 return this.each(function () {
220235 var $this = $(this)
221236 var data = $this.data('bs.button')
....@@ -228,6 +243,9 @@
228243 })
229244 }
230245
246
+ var old = $.fn.button
247
+
248
+ $.fn.button = Plugin
231249 $.fn.button.Constructor = Button
232250
233251
....@@ -243,17 +261,17 @@
243261 // BUTTON DATA-API
244262 // ===============
245263
246
- $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
264
+ $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
247265 var $btn = $(e.target)
248266 if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
249
- $btn.button('toggle')
267
+ Plugin.call($btn, 'toggle')
250268 e.preventDefault()
251269 })
252270
253271 }(jQuery);
254272
255273 /* ========================================================================
256
- * Bootstrap: carousel.js v3.1.0
274
+ * Bootstrap: carousel.js v3.2.0
257275 * http://getbootstrap.com/javascript/#carousel
258276 * ========================================================================
259277 * Copyright 2011-2014 Twitter, Inc.
....@@ -268,7 +286,7 @@
268286 // =========================
269287
270288 var Carousel = function (element, options) {
271
- this.$element = $(element)
289
+ this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this))
272290 this.$indicators = this.$element.find('.carousel-indicators')
273291 this.options = options
274292 this.paused =
....@@ -278,9 +296,11 @@
278296 this.$items = null
279297
280298 this.options.pause == 'hover' && this.$element
281
- .on('mouseenter', $.proxy(this.pause, this))
282
- .on('mouseleave', $.proxy(this.cycle, this))
299
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
300
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
283301 }
302
+
303
+ Carousel.VERSION = '3.2.0'
284304
285305 Carousel.DEFAULTS = {
286306 interval: 5000,
....@@ -288,7 +308,17 @@
288308 wrap: true
289309 }
290310
291
- Carousel.prototype.cycle = function (e) {
311
+ Carousel.prototype.keydown = function (e) {
312
+ switch (e.which) {
313
+ case 37: this.prev(); break
314
+ case 39: this.next(); break
315
+ default: return
316
+ }
317
+
318
+ e.preventDefault()
319
+ }
320
+
321
+ Carousel.prototype.cycle = function (e) {
292322 e || (this.paused = false)
293323
294324 this.interval && clearInterval(this.interval)
....@@ -300,20 +330,18 @@
300330 return this
301331 }
302332
303
- Carousel.prototype.getActiveIndex = function () {
304
- this.$active = this.$element.find('.item.active')
305
- this.$items = this.$active.parent().children()
306
-
307
- return this.$items.index(this.$active)
333
+ Carousel.prototype.getItemIndex = function (item) {
334
+ this.$items = item.parent().children('.item')
335
+ return this.$items.index(item || this.$active)
308336 }
309337
310338 Carousel.prototype.to = function (pos) {
311339 var that = this
312
- var activeIndex = this.getActiveIndex()
340
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
313341
314342 if (pos > (this.$items.length - 1) || pos < 0) return
315343
316
- if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
344
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
317345 if (activeIndex == pos) return this.pause().cycle()
318346
319347 return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
....@@ -355,11 +383,15 @@
355383 $next = this.$element.find('.item')[fallback]()
356384 }
357385
358
- if ($next.hasClass('active')) return this.sliding = false
386
+ if ($next.hasClass('active')) return (this.sliding = false)
359387
360
- var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
361
- this.$element.trigger(e)
362
- if (e.isDefaultPrevented()) return
388
+ var relatedTarget = $next[0]
389
+ var slideEvent = $.Event('slide.bs.carousel', {
390
+ relatedTarget: relatedTarget,
391
+ direction: direction
392
+ })
393
+ this.$element.trigger(slideEvent)
394
+ if (slideEvent.isDefaultPrevented()) return
363395
364396 this.sliding = true
365397
....@@ -367,30 +399,31 @@
367399
368400 if (this.$indicators.length) {
369401 this.$indicators.find('.active').removeClass('active')
370
- this.$element.one('slid.bs.carousel', function () {
371
- var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
372
- $nextIndicator && $nextIndicator.addClass('active')
373
- })
402
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
403
+ $nextIndicator && $nextIndicator.addClass('active')
374404 }
375405
406
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
376407 if ($.support.transition && this.$element.hasClass('slide')) {
377408 $next.addClass(type)
378409 $next[0].offsetWidth // force reflow
379410 $active.addClass(direction)
380411 $next.addClass(direction)
381412 $active
382
- .one($.support.transition.end, function () {
413
+ .one('bsTransitionEnd', function () {
383414 $next.removeClass([type, direction].join(' ')).addClass('active')
384415 $active.removeClass(['active', direction].join(' '))
385416 that.sliding = false
386
- setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
417
+ setTimeout(function () {
418
+ that.$element.trigger(slidEvent)
419
+ }, 0)
387420 })
388421 .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
389422 } else {
390423 $active.removeClass('active')
391424 $next.addClass('active')
392425 this.sliding = false
393
- this.$element.trigger('slid.bs.carousel')
426
+ this.$element.trigger(slidEvent)
394427 }
395428
396429 isCycling && this.cycle()
....@@ -402,9 +435,7 @@
402435 // CAROUSEL PLUGIN DEFINITION
403436 // ==========================
404437
405
- var old = $.fn.carousel
406
-
407
- $.fn.carousel = function (option) {
438
+ function Plugin(option) {
408439 return this.each(function () {
409440 var $this = $(this)
410441 var data = $this.data('bs.carousel')
....@@ -418,6 +449,9 @@
418449 })
419450 }
420451
452
+ var old = $.fn.carousel
453
+
454
+ $.fn.carousel = Plugin
421455 $.fn.carousel.Constructor = Carousel
422456
423457
....@@ -434,15 +468,17 @@
434468 // =================
435469
436470 $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
437
- var $this = $(this), href
438
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
471
+ var href
472
+ var $this = $(this)
473
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
474
+ if (!$target.hasClass('carousel')) return
439475 var options = $.extend({}, $target.data(), $this.data())
440476 var slideIndex = $this.attr('data-slide-to')
441477 if (slideIndex) options.interval = false
442478
443
- $target.carousel(options)
479
+ Plugin.call($target, options)
444480
445
- if (slideIndex = $this.attr('data-slide-to')) {
481
+ if (slideIndex) {
446482 $target.data('bs.carousel').to(slideIndex)
447483 }
448484
....@@ -452,14 +488,14 @@
452488 $(window).on('load', function () {
453489 $('[data-ride="carousel"]').each(function () {
454490 var $carousel = $(this)
455
- $carousel.carousel($carousel.data())
491
+ Plugin.call($carousel, $carousel.data())
456492 })
457493 })
458494
459495 }(jQuery);
460496
461497 /* ========================================================================
462
- * Bootstrap: collapse.js v3.1.0
498
+ * Bootstrap: collapse.js v3.2.0
463499 * http://getbootstrap.com/javascript/#collapse
464500 * ========================================================================
465501 * Copyright 2011-2014 Twitter, Inc.
....@@ -482,6 +518,8 @@
482518 if (this.options.toggle) this.toggle()
483519 }
484520
521
+ Collapse.VERSION = '3.2.0'
522
+
485523 Collapse.DEFAULTS = {
486524 toggle: true
487525 }
....@@ -503,7 +541,7 @@
503541 if (actives && actives.length) {
504542 var hasData = actives.data('bs.collapse')
505543 if (hasData && hasData.transitioning) return
506
- actives.collapse('hide')
544
+ Plugin.call(actives, 'hide')
507545 hasData || actives.data('bs.collapse', null)
508546 }
509547
....@@ -511,18 +549,17 @@
511549
512550 this.$element
513551 .removeClass('collapse')
514
- .addClass('collapsing')
515
- [dimension](0)
552
+ .addClass('collapsing')[dimension](0)
516553
517554 this.transitioning = 1
518555
519556 var complete = function () {
520557 this.$element
521558 .removeClass('collapsing')
522
- .addClass('collapse in')
523
- [dimension]('auto')
559
+ .addClass('collapse in')[dimension]('')
524560 this.transitioning = 0
525
- this.$element.trigger('shown.bs.collapse')
561
+ this.$element
562
+ .trigger('shown.bs.collapse')
526563 }
527564
528565 if (!$.support.transition) return complete.call(this)
....@@ -530,9 +567,8 @@
530567 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
531568
532569 this.$element
533
- .one($.support.transition.end, $.proxy(complete, this))
534
- .emulateTransitionEnd(350)
535
- [dimension](this.$element[0][scrollSize])
570
+ .one('bsTransitionEnd', $.proxy(complete, this))
571
+ .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize])
536572 }
537573
538574 Collapse.prototype.hide = function () {
....@@ -544,9 +580,7 @@
544580
545581 var dimension = this.dimension()
546582
547
- this.$element
548
- [dimension](this.$element[dimension]())
549
- [0].offsetHeight
583
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
550584
551585 this.$element
552586 .addClass('collapsing')
....@@ -567,7 +601,7 @@
567601
568602 this.$element
569603 [dimension](0)
570
- .one($.support.transition.end, $.proxy(complete, this))
604
+ .one('bsTransitionEnd', $.proxy(complete, this))
571605 .emulateTransitionEnd(350)
572606 }
573607
....@@ -579,9 +613,7 @@
579613 // COLLAPSE PLUGIN DEFINITION
580614 // ==========================
581615
582
- var old = $.fn.collapse
583
-
584
- $.fn.collapse = function (option) {
616
+ function Plugin(option) {
585617 return this.each(function () {
586618 var $this = $(this)
587619 var data = $this.data('bs.collapse')
....@@ -593,6 +625,9 @@
593625 })
594626 }
595627
628
+ var old = $.fn.collapse
629
+
630
+ $.fn.collapse = Plugin
596631 $.fn.collapse.Constructor = Collapse
597632
598633
....@@ -608,11 +643,12 @@
608643 // COLLAPSE DATA-API
609644 // =================
610645
611
- $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
612
- var $this = $(this), href
646
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
647
+ var href
648
+ var $this = $(this)
613649 var target = $this.attr('data-target')
614650 || e.preventDefault()
615
- || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
651
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
616652 var $target = $(target)
617653 var data = $target.data('bs.collapse')
618654 var option = data ? 'toggle' : $this.data()
....@@ -620,17 +656,17 @@
620656 var $parent = parent && $(parent)
621657
622658 if (!data || !data.transitioning) {
623
- if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
659
+ if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
624660 $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
625661 }
626662
627
- $target.collapse(option)
663
+ Plugin.call($target, option)
628664 })
629665
630666 }(jQuery);
631667
632668 /* ========================================================================
633
- * Bootstrap: dropdown.js v3.1.0
669
+ * Bootstrap: dropdown.js v3.2.0
634670 * http://getbootstrap.com/javascript/#dropdowns
635671 * ========================================================================
636672 * Copyright 2011-2014 Twitter, Inc.
....@@ -645,10 +681,12 @@
645681 // =========================
646682
647683 var backdrop = '.dropdown-backdrop'
648
- var toggle = '[data-toggle=dropdown]'
684
+ var toggle = '[data-toggle="dropdown"]'
649685 var Dropdown = function (element) {
650686 $(element).on('click.bs.dropdown', this.toggle)
651687 }
688
+
689
+ Dropdown.VERSION = '3.2.0'
652690
653691 Dropdown.prototype.toggle = function (e) {
654692 var $this = $(this)
....@@ -671,11 +709,11 @@
671709
672710 if (e.isDefaultPrevented()) return
673711
712
+ $this.trigger('focus')
713
+
674714 $parent
675715 .toggleClass('open')
676716 .trigger('shown.bs.dropdown', relatedTarget)
677
-
678
- $this.focus()
679717 }
680718
681719 return false
....@@ -695,12 +733,12 @@
695733 var isActive = $parent.hasClass('open')
696734
697735 if (!isActive || (isActive && e.keyCode == 27)) {
698
- if (e.which == 27) $parent.find(toggle).focus()
699
- return $this.click()
736
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
737
+ return $this.trigger('click')
700738 }
701739
702740 var desc = ' li:not(.divider):visible a'
703
- var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
741
+ var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
704742
705743 if (!$items.length) return
706744
....@@ -710,10 +748,11 @@
710748 if (e.keyCode == 40 && index < $items.length - 1) index++ // down
711749 if (!~index) index = 0
712750
713
- $items.eq(index).focus()
751
+ $items.eq(index).trigger('focus')
714752 }
715753
716754 function clearMenus(e) {
755
+ if (e && e.which === 3) return
717756 $(backdrop).remove()
718757 $(toggle).each(function () {
719758 var $parent = getParent($(this))
....@@ -730,7 +769,7 @@
730769
731770 if (!selector) {
732771 selector = $this.attr('href')
733
- selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
772
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
734773 }
735774
736775 var $parent = selector && $(selector)
....@@ -742,9 +781,7 @@
742781 // DROPDOWN PLUGIN DEFINITION
743782 // ==========================
744783
745
- var old = $.fn.dropdown
746
-
747
- $.fn.dropdown = function (option) {
784
+ function Plugin(option) {
748785 return this.each(function () {
749786 var $this = $(this)
750787 var data = $this.data('bs.dropdown')
....@@ -754,6 +791,9 @@
754791 })
755792 }
756793
794
+ var old = $.fn.dropdown
795
+
796
+ $.fn.dropdown = Plugin
757797 $.fn.dropdown.Constructor = Dropdown
758798
759799
....@@ -773,12 +813,12 @@
773813 .on('click.bs.dropdown.data-api', clearMenus)
774814 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
775815 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
776
- .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
816
+ .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
777817
778818 }(jQuery);
779819
780820 /* ========================================================================
781
- * Bootstrap: modal.js v3.1.0
821
+ * Bootstrap: modal.js v3.2.0
782822 * http://getbootstrap.com/javascript/#modals
783823 * ========================================================================
784824 * Copyright 2011-2014 Twitter, Inc.
....@@ -793,10 +833,12 @@
793833 // ======================
794834
795835 var Modal = function (element, options) {
796
- this.options = options
797
- this.$element = $(element)
798
- this.$backdrop =
799
- this.isShown = null
836
+ this.options = options
837
+ this.$body = $(document.body)
838
+ this.$element = $(element)
839
+ this.$backdrop =
840
+ this.isShown = null
841
+ this.scrollbarWidth = 0
800842
801843 if (this.options.remote) {
802844 this.$element
....@@ -807,6 +849,8 @@
807849 }
808850 }
809851
852
+ Modal.VERSION = '3.2.0'
853
+
810854 Modal.DEFAULTS = {
811855 backdrop: true,
812856 keyboard: true,
....@@ -814,7 +858,7 @@
814858 }
815859
816860 Modal.prototype.toggle = function (_relatedTarget) {
817
- return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
861
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
818862 }
819863
820864 Modal.prototype.show = function (_relatedTarget) {
....@@ -827,6 +871,10 @@
827871
828872 this.isShown = true
829873
874
+ this.checkScrollbar()
875
+ this.$body.addClass('modal-open')
876
+
877
+ this.setScrollbar()
830878 this.escape()
831879
832880 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
....@@ -835,7 +883,7 @@
835883 var transition = $.support.transition && that.$element.hasClass('fade')
836884
837885 if (!that.$element.parent().length) {
838
- that.$element.appendTo(document.body) // don't move modals dom position
886
+ that.$element.appendTo(that.$body) // don't move modals dom position
839887 }
840888
841889 that.$element
....@@ -856,11 +904,11 @@
856904
857905 transition ?
858906 that.$element.find('.modal-dialog') // wait for modal to slide in
859
- .one($.support.transition.end, function () {
860
- that.$element.focus().trigger(e)
907
+ .one('bsTransitionEnd', function () {
908
+ that.$element.trigger('focus').trigger(e)
861909 })
862910 .emulateTransitionEnd(300) :
863
- that.$element.focus().trigger(e)
911
+ that.$element.trigger('focus').trigger(e)
864912 })
865913 }
866914
....@@ -875,6 +923,9 @@
875923
876924 this.isShown = false
877925
926
+ this.$body.removeClass('modal-open')
927
+
928
+ this.resetScrollbar()
878929 this.escape()
879930
880931 $(document).off('focusin.bs.modal')
....@@ -886,7 +937,7 @@
886937
887938 $.support.transition && this.$element.hasClass('fade') ?
888939 this.$element
889
- .one($.support.transition.end, $.proxy(this.hideModal, this))
940
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
890941 .emulateTransitionEnd(300) :
891942 this.hideModal()
892943 }
....@@ -896,7 +947,7 @@
896947 .off('focusin.bs.modal') // guard against infinite focus loop
897948 .on('focusin.bs.modal', $.proxy(function (e) {
898949 if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
899
- this.$element.focus()
950
+ this.$element.trigger('focus')
900951 }
901952 }, this))
902953 }
....@@ -915,7 +966,6 @@
915966 var that = this
916967 this.$element.hide()
917968 this.backdrop(function () {
918
- that.removeBackdrop()
919969 that.$element.trigger('hidden.bs.modal')
920970 })
921971 }
....@@ -926,13 +976,14 @@
926976 }
927977
928978 Modal.prototype.backdrop = function (callback) {
979
+ var that = this
929980 var animate = this.$element.hasClass('fade') ? 'fade' : ''
930981
931982 if (this.isShown && this.options.backdrop) {
932983 var doAnimate = $.support.transition && animate
933984
934985 this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
935
- .appendTo(document.body)
986
+ .appendTo(this.$body)
936987
937988 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
938989 if (e.target !== e.currentTarget) return
....@@ -949,31 +1000,56 @@
9491000
9501001 doAnimate ?
9511002 this.$backdrop
952
- .one($.support.transition.end, callback)
1003
+ .one('bsTransitionEnd', callback)
9531004 .emulateTransitionEnd(150) :
9541005 callback()
9551006
9561007 } else if (!this.isShown && this.$backdrop) {
9571008 this.$backdrop.removeClass('in')
9581009
1010
+ var callbackRemove = function () {
1011
+ that.removeBackdrop()
1012
+ callback && callback()
1013
+ }
9591014 $.support.transition && this.$element.hasClass('fade') ?
9601015 this.$backdrop
961
- .one($.support.transition.end, callback)
1016
+ .one('bsTransitionEnd', callbackRemove)
9621017 .emulateTransitionEnd(150) :
963
- callback()
1018
+ callbackRemove()
9641019
9651020 } else if (callback) {
9661021 callback()
9671022 }
9681023 }
9691024
1025
+ Modal.prototype.checkScrollbar = function () {
1026
+ if (document.body.clientWidth >= window.innerWidth) return
1027
+ this.scrollbarWidth = this.scrollbarWidth || this.measureScrollbar()
1028
+ }
1029
+
1030
+ Modal.prototype.setScrollbar = function () {
1031
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
1032
+ if (this.scrollbarWidth) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
1033
+ }
1034
+
1035
+ Modal.prototype.resetScrollbar = function () {
1036
+ this.$body.css('padding-right', '')
1037
+ }
1038
+
1039
+ Modal.prototype.measureScrollbar = function () { // thx walsh
1040
+ var scrollDiv = document.createElement('div')
1041
+ scrollDiv.className = 'modal-scrollbar-measure'
1042
+ this.$body.append(scrollDiv)
1043
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
1044
+ this.$body[0].removeChild(scrollDiv)
1045
+ return scrollbarWidth
1046
+ }
1047
+
9701048
9711049 // MODAL PLUGIN DEFINITION
9721050 // =======================
9731051
974
- var old = $.fn.modal
975
-
976
- $.fn.modal = function (option, _relatedTarget) {
1052
+ function Plugin(option, _relatedTarget) {
9771053 return this.each(function () {
9781054 var $this = $(this)
9791055 var data = $this.data('bs.modal')
....@@ -985,6 +1061,9 @@
9851061 })
9861062 }
9871063
1064
+ var old = $.fn.modal
1065
+
1066
+ $.fn.modal = Plugin
9881067 $.fn.modal.Constructor = Modal
9891068
9901069
....@@ -1003,26 +1082,24 @@
10031082 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
10041083 var $this = $(this)
10051084 var href = $this.attr('href')
1006
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
1085
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
10071086 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
10081087
10091088 if ($this.is('a')) e.preventDefault()
10101089
1011
- $target
1012
- .modal(option, this)
1013
- .one('hide', function () {
1014
- $this.is(':visible') && $this.focus()
1090
+ $target.one('show.bs.modal', function (showEvent) {
1091
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
1092
+ $target.one('hidden.bs.modal', function () {
1093
+ $this.is(':visible') && $this.trigger('focus')
10151094 })
1095
+ })
1096
+ Plugin.call($target, option, this)
10161097 })
1017
-
1018
- $(document)
1019
- .on('show.bs.modal', '.modal', function () { $(document.body).addClass('modal-open') })
1020
- .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })
10211098
10221099 }(jQuery);
10231100
10241101 /* ========================================================================
1025
- * Bootstrap: tooltip.js v3.1.0
1102
+ * Bootstrap: tooltip.js v3.2.0
10261103 * http://getbootstrap.com/javascript/#tooltip
10271104 * Inspired by the original jQuery.tipsy by Jason Frame
10281105 * ========================================================================
....@@ -1048,23 +1125,30 @@
10481125 this.init('tooltip', element, options)
10491126 }
10501127
1128
+ Tooltip.VERSION = '3.2.0'
1129
+
10511130 Tooltip.DEFAULTS = {
10521131 animation: true,
10531132 placement: 'top',
10541133 selector: false,
1055
- template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
1134
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
10561135 trigger: 'hover focus',
10571136 title: '',
10581137 delay: 0,
10591138 html: false,
1060
- container: false
1139
+ container: false,
1140
+ viewport: {
1141
+ selector: 'body',
1142
+ padding: 0
1143
+ }
10611144 }
10621145
10631146 Tooltip.prototype.init = function (type, element, options) {
1064
- this.enabled = true
1065
- this.type = type
1066
- this.$element = $(element)
1067
- this.options = this.getOptions(options)
1147
+ this.enabled = true
1148
+ this.type = type
1149
+ this.$element = $(element)
1150
+ this.options = this.getOptions(options)
1151
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
10681152
10691153 var triggers = this.options.trigger.split(' ')
10701154
....@@ -1117,7 +1201,12 @@
11171201
11181202 Tooltip.prototype.enter = function (obj) {
11191203 var self = obj instanceof this.constructor ?
1120
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
1204
+ obj : $(obj.currentTarget).data('bs.' + this.type)
1205
+
1206
+ if (!self) {
1207
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1208
+ $(obj.currentTarget).data('bs.' + this.type, self)
1209
+ }
11211210
11221211 clearTimeout(self.timeout)
11231212
....@@ -1132,7 +1221,12 @@
11321221
11331222 Tooltip.prototype.leave = function (obj) {
11341223 var self = obj instanceof this.constructor ?
1135
- obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
1224
+ obj : $(obj.currentTarget).data('bs.' + this.type)
1225
+
1226
+ if (!self) {
1227
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
1228
+ $(obj.currentTarget).data('bs.' + this.type, self)
1229
+ }
11361230
11371231 clearTimeout(self.timeout)
11381232
....@@ -1151,12 +1245,17 @@
11511245 if (this.hasContent() && this.enabled) {
11521246 this.$element.trigger(e)
11531247
1154
- if (e.isDefaultPrevented()) return
1155
- var that = this;
1248
+ var inDom = $.contains(document.documentElement, this.$element[0])
1249
+ if (e.isDefaultPrevented() || !inDom) return
1250
+ var that = this
11561251
11571252 var $tip = this.tip()
11581253
1254
+ var tipId = this.getUID(this.type)
1255
+
11591256 this.setContent()
1257
+ $tip.attr('id', tipId)
1258
+ this.$element.attr('aria-describedby', tipId)
11601259
11611260 if (this.options.animation) $tip.addClass('fade')
11621261
....@@ -1172,6 +1271,7 @@
11721271 .detach()
11731272 .css({ top: 0, left: 0, display: 'block' })
11741273 .addClass(placement)
1274
+ .data('bs.' + this.type, this)
11751275
11761276 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
11771277
....@@ -1180,18 +1280,14 @@
11801280 var actualHeight = $tip[0].offsetHeight
11811281
11821282 if (autoPlace) {
1183
- var $parent = this.$element.parent()
1184
-
11851283 var orgPlacement = placement
1186
- var docScroll = document.documentElement.scrollTop || document.body.scrollTop
1187
- var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
1188
- var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
1189
- var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
1284
+ var $parent = this.$element.parent()
1285
+ var parentDim = this.getPosition($parent)
11901286
1191
- placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
1192
- placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
1193
- placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
1194
- placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
1287
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - parentDim.scroll > parentDim.height ? 'top' :
1288
+ placement == 'top' && pos.top - parentDim.scroll - actualHeight < 0 ? 'bottom' :
1289
+ placement == 'right' && pos.right + actualWidth > parentDim.width ? 'left' :
1290
+ placement == 'left' && pos.left - actualWidth < parentDim.left ? 'right' :
11951291 placement
11961292
11971293 $tip
....@@ -1202,22 +1298,21 @@
12021298 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
12031299
12041300 this.applyPlacement(calculatedOffset, placement)
1205
- this.hoverState = null
12061301
1207
- var complete = function() {
1302
+ var complete = function () {
12081303 that.$element.trigger('shown.bs.' + that.type)
1304
+ that.hoverState = null
12091305 }
12101306
12111307 $.support.transition && this.$tip.hasClass('fade') ?
12121308 $tip
1213
- .one($.support.transition.end, complete)
1309
+ .one('bsTransitionEnd', complete)
12141310 .emulateTransitionEnd(150) :
12151311 complete()
12161312 }
12171313 }
12181314
12191315 Tooltip.prototype.applyPlacement = function (offset, placement) {
1220
- var replace
12211316 var $tip = this.tip()
12221317 var width = $tip[0].offsetWidth
12231318 var height = $tip[0].offsetHeight
....@@ -1251,29 +1346,20 @@
12511346 var actualHeight = $tip[0].offsetHeight
12521347
12531348 if (placement == 'top' && actualHeight != height) {
1254
- replace = true
12551349 offset.top = offset.top + height - actualHeight
12561350 }
12571351
1258
- if (/bottom|top/.test(placement)) {
1259
- var delta = 0
1352
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
12601353
1261
- if (offset.left < 0) {
1262
- delta = offset.left * -2
1263
- offset.left = 0
1354
+ if (delta.left) offset.left += delta.left
1355
+ else offset.top += delta.top
12641356
1265
- $tip.offset(offset)
1357
+ var arrowDelta = delta.left ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
1358
+ var arrowPosition = delta.left ? 'left' : 'top'
1359
+ var arrowOffsetPosition = delta.left ? 'offsetWidth' : 'offsetHeight'
12661360
1267
- actualWidth = $tip[0].offsetWidth
1268
- actualHeight = $tip[0].offsetHeight
1269
- }
1270
-
1271
- this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
1272
- } else {
1273
- this.replaceArrow(actualHeight - height, actualHeight, 'top')
1274
- }
1275
-
1276
- if (replace) $tip.offset(offset)
1361
+ $tip.offset(offset)
1362
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], arrowPosition)
12771363 }
12781364
12791365 Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
....@@ -1293,6 +1379,8 @@
12931379 var $tip = this.tip()
12941380 var e = $.Event('hide.bs.' + this.type)
12951381
1382
+ this.$element.removeAttr('aria-describedby')
1383
+
12961384 function complete() {
12971385 if (that.hoverState != 'in') $tip.detach()
12981386 that.$element.trigger('hidden.bs.' + that.type)
....@@ -1306,7 +1394,7 @@
13061394
13071395 $.support.transition && this.$tip.hasClass('fade') ?
13081396 $tip
1309
- .one($.support.transition.end, complete)
1397
+ .one('bsTransitionEnd', complete)
13101398 .emulateTransitionEnd(150) :
13111399 complete()
13121400
....@@ -1317,7 +1405,7 @@
13171405
13181406 Tooltip.prototype.fixTitle = function () {
13191407 var $e = this.$element
1320
- if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1408
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
13211409 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
13221410 }
13231411 }
....@@ -1326,12 +1414,15 @@
13261414 return this.getTitle()
13271415 }
13281416
1329
- Tooltip.prototype.getPosition = function () {
1330
- var el = this.$element[0]
1331
- return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
1332
- width: el.offsetWidth,
1333
- height: el.offsetHeight
1334
- }, this.$element.offset())
1417
+ Tooltip.prototype.getPosition = function ($element) {
1418
+ $element = $element || this.$element
1419
+ var el = $element[0]
1420
+ var isBody = el.tagName == 'BODY'
1421
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : null, {
1422
+ scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop(),
1423
+ width: isBody ? $(window).width() : $element.outerWidth(),
1424
+ height: isBody ? $(window).height() : $element.outerHeight()
1425
+ }, isBody ? { top: 0, left: 0 } : $element.offset())
13351426 }
13361427
13371428 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
....@@ -1339,6 +1430,35 @@
13391430 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
13401431 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
13411432 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
1433
+
1434
+ }
1435
+
1436
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
1437
+ var delta = { top: 0, left: 0 }
1438
+ if (!this.$viewport) return delta
1439
+
1440
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
1441
+ var viewportDimensions = this.getPosition(this.$viewport)
1442
+
1443
+ if (/right|left/.test(placement)) {
1444
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
1445
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
1446
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
1447
+ delta.top = viewportDimensions.top - topEdgeOffset
1448
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
1449
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
1450
+ }
1451
+ } else {
1452
+ var leftEdgeOffset = pos.left - viewportPadding
1453
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
1454
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
1455
+ delta.left = viewportDimensions.left - leftEdgeOffset
1456
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
1457
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
1458
+ }
1459
+ }
1460
+
1461
+ return delta
13421462 }
13431463
13441464 Tooltip.prototype.getTitle = function () {
....@@ -1352,12 +1472,18 @@
13521472 return title
13531473 }
13541474
1475
+ Tooltip.prototype.getUID = function (prefix) {
1476
+ do prefix += ~~(Math.random() * 1000000)
1477
+ while (document.getElementById(prefix))
1478
+ return prefix
1479
+ }
1480
+
13551481 Tooltip.prototype.tip = function () {
1356
- return this.$tip = this.$tip || $(this.options.template)
1482
+ return (this.$tip = this.$tip || $(this.options.template))
13571483 }
13581484
13591485 Tooltip.prototype.arrow = function () {
1360
- return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
1486
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
13611487 }
13621488
13631489 Tooltip.prototype.validate = function () {
....@@ -1381,7 +1507,15 @@
13811507 }
13821508
13831509 Tooltip.prototype.toggle = function (e) {
1384
- var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
1510
+ var self = this
1511
+ if (e) {
1512
+ self = $(e.currentTarget).data('bs.' + this.type)
1513
+ if (!self) {
1514
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
1515
+ $(e.currentTarget).data('bs.' + this.type, self)
1516
+ }
1517
+ }
1518
+
13851519 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
13861520 }
13871521
....@@ -1394,9 +1528,7 @@
13941528 // TOOLTIP PLUGIN DEFINITION
13951529 // =========================
13961530
1397
- var old = $.fn.tooltip
1398
-
1399
- $.fn.tooltip = function (option) {
1531
+ function Plugin(option) {
14001532 return this.each(function () {
14011533 var $this = $(this)
14021534 var data = $this.data('bs.tooltip')
....@@ -1408,6 +1540,9 @@
14081540 })
14091541 }
14101542
1543
+ var old = $.fn.tooltip
1544
+
1545
+ $.fn.tooltip = Plugin
14111546 $.fn.tooltip.Constructor = Tooltip
14121547
14131548
....@@ -1422,7 +1557,7 @@
14221557 }(jQuery);
14231558
14241559 /* ========================================================================
1425
- * Bootstrap: popover.js v3.1.0
1560
+ * Bootstrap: popover.js v3.2.0
14261561 * http://getbootstrap.com/javascript/#popovers
14271562 * ========================================================================
14281563 * Copyright 2011-2014 Twitter, Inc.
....@@ -1442,11 +1577,13 @@
14421577
14431578 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
14441579
1580
+ Popover.VERSION = '3.2.0'
1581
+
14451582 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
14461583 placement: 'right',
14471584 trigger: 'click',
14481585 content: '',
1449
- template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
1586
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
14501587 })
14511588
14521589
....@@ -1467,7 +1604,7 @@
14671604 var content = this.getContent()
14681605
14691606 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
1470
- $tip.find('.popover-content')[ // we use append for html objects to maintain js events
1607
+ $tip.find('.popover-content').empty()[ // we use append for html objects to maintain js events
14711608 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
14721609 ](content)
14731610
....@@ -1493,7 +1630,7 @@
14931630 }
14941631
14951632 Popover.prototype.arrow = function () {
1496
- return this.$arrow = this.$arrow || this.tip().find('.arrow')
1633
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
14971634 }
14981635
14991636 Popover.prototype.tip = function () {
....@@ -1505,9 +1642,7 @@
15051642 // POPOVER PLUGIN DEFINITION
15061643 // =========================
15071644
1508
- var old = $.fn.popover
1509
-
1510
- $.fn.popover = function (option) {
1645
+ function Plugin(option) {
15111646 return this.each(function () {
15121647 var $this = $(this)
15131648 var data = $this.data('bs.popover')
....@@ -1519,6 +1654,9 @@
15191654 })
15201655 }
15211656
1657
+ var old = $.fn.popover
1658
+
1659
+ $.fn.popover = Plugin
15221660 $.fn.popover.Constructor = Popover
15231661
15241662
....@@ -1533,7 +1671,7 @@
15331671 }(jQuery);
15341672
15351673 /* ========================================================================
1536
- * Bootstrap: scrollspy.js v3.1.0
1674
+ * Bootstrap: scrollspy.js v3.2.0
15371675 * http://getbootstrap.com/javascript/#scrollspy
15381676 * ========================================================================
15391677 * Copyright 2011-2014 Twitter, Inc.
....@@ -1548,36 +1686,48 @@
15481686 // ==========================
15491687
15501688 function ScrollSpy(element, options) {
1551
- var href
15521689 var process = $.proxy(this.process, this)
15531690
1554
- this.$element = $(element).is('body') ? $(window) : $(element)
15551691 this.$body = $('body')
1556
- this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
1692
+ this.$scrollElement = $(element).is('body') ? $(window) : $(element)
15571693 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
1558
- this.selector = (this.options.target
1559
- || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1560
- || '') + ' .nav li > a'
1561
- this.offsets = $([])
1562
- this.targets = $([])
1694
+ this.selector = (this.options.target || '') + ' .nav li > a'
1695
+ this.offsets = []
1696
+ this.targets = []
15631697 this.activeTarget = null
1698
+ this.scrollHeight = 0
15641699
1700
+ this.$scrollElement.on('scroll.bs.scrollspy', process)
15651701 this.refresh()
15661702 this.process()
15671703 }
1704
+
1705
+ ScrollSpy.VERSION = '3.2.0'
15681706
15691707 ScrollSpy.DEFAULTS = {
15701708 offset: 10
15711709 }
15721710
1573
- ScrollSpy.prototype.refresh = function () {
1574
- var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
1711
+ ScrollSpy.prototype.getScrollHeight = function () {
1712
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
1713
+ }
15751714
1576
- this.offsets = $([])
1577
- this.targets = $([])
1715
+ ScrollSpy.prototype.refresh = function () {
1716
+ var offsetMethod = 'offset'
1717
+ var offsetBase = 0
1718
+
1719
+ if (!$.isWindow(this.$scrollElement[0])) {
1720
+ offsetMethod = 'position'
1721
+ offsetBase = this.$scrollElement.scrollTop()
1722
+ }
1723
+
1724
+ this.offsets = []
1725
+ this.targets = []
1726
+ this.scrollHeight = this.getScrollHeight()
15781727
15791728 var self = this
1580
- var $targets = this.$body
1729
+
1730
+ this.$body
15811731 .find(this.selector)
15821732 .map(function () {
15831733 var $el = $(this)
....@@ -1587,7 +1737,7 @@
15871737 return ($href
15881738 && $href.length
15891739 && $href.is(':visible')
1590
- && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
1740
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
15911741 })
15921742 .sort(function (a, b) { return a[0] - b[0] })
15931743 .each(function () {
....@@ -1598,15 +1748,19 @@
15981748
15991749 ScrollSpy.prototype.process = function () {
16001750 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1601
- var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
1602
- var maxScroll = scrollHeight - this.$scrollElement.height()
1751
+ var scrollHeight = this.getScrollHeight()
1752
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
16031753 var offsets = this.offsets
16041754 var targets = this.targets
16051755 var activeTarget = this.activeTarget
16061756 var i
16071757
1758
+ if (this.scrollHeight != scrollHeight) {
1759
+ this.refresh()
1760
+ }
1761
+
16081762 if (scrollTop >= maxScroll) {
1609
- return activeTarget != (i = targets.last()[0]) && this.activate(i)
1763
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
16101764 }
16111765
16121766 if (activeTarget && scrollTop <= offsets[0]) {
....@@ -1617,7 +1771,7 @@
16171771 activeTarget != targets[i]
16181772 && scrollTop >= offsets[i]
16191773 && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1620
- && this.activate( targets[i] )
1774
+ && this.activate(targets[i])
16211775 }
16221776 }
16231777
....@@ -1649,9 +1803,7 @@
16491803 // SCROLLSPY PLUGIN DEFINITION
16501804 // ===========================
16511805
1652
- var old = $.fn.scrollspy
1653
-
1654
- $.fn.scrollspy = function (option) {
1806
+ function Plugin(option) {
16551807 return this.each(function () {
16561808 var $this = $(this)
16571809 var data = $this.data('bs.scrollspy')
....@@ -1662,6 +1814,9 @@
16621814 })
16631815 }
16641816
1817
+ var old = $.fn.scrollspy
1818
+
1819
+ $.fn.scrollspy = Plugin
16651820 $.fn.scrollspy.Constructor = ScrollSpy
16661821
16671822
....@@ -1677,17 +1832,17 @@
16771832 // SCROLLSPY DATA-API
16781833 // ==================
16791834
1680
- $(window).on('load', function () {
1835
+ $(window).on('load.bs.scrollspy.data-api', function () {
16811836 $('[data-spy="scroll"]').each(function () {
16821837 var $spy = $(this)
1683
- $spy.scrollspy($spy.data())
1838
+ Plugin.call($spy, $spy.data())
16841839 })
16851840 })
16861841
16871842 }(jQuery);
16881843
16891844 /* ========================================================================
1690
- * Bootstrap: tab.js v3.1.0
1845
+ * Bootstrap: tab.js v3.2.0
16911846 * http://getbootstrap.com/javascript/#tabs
16921847 * ========================================================================
16931848 * Copyright 2011-2014 Twitter, Inc.
....@@ -1705,6 +1860,8 @@
17051860 this.element = $(element)
17061861 }
17071862
1863
+ Tab.VERSION = '3.2.0'
1864
+
17081865 Tab.prototype.show = function () {
17091866 var $this = this.element
17101867 var $ul = $this.closest('ul:not(.dropdown-menu)')
....@@ -1712,7 +1869,7 @@
17121869
17131870 if (!selector) {
17141871 selector = $this.attr('href')
1715
- selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1872
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
17161873 }
17171874
17181875 if ($this.parent('li').hasClass('active')) return
....@@ -1728,7 +1885,7 @@
17281885
17291886 var $target = $(selector)
17301887
1731
- this.activate($this.parent('li'), $ul)
1888
+ this.activate($this.closest('li'), $ul)
17321889 this.activate($target, $target.parent(), function () {
17331890 $this.trigger({
17341891 type: 'shown.bs.tab',
....@@ -1767,7 +1924,7 @@
17671924
17681925 transition ?
17691926 $active
1770
- .one($.support.transition.end, next)
1927
+ .one('bsTransitionEnd', next)
17711928 .emulateTransitionEnd(150) :
17721929 next()
17731930
....@@ -1778,9 +1935,7 @@
17781935 // TAB PLUGIN DEFINITION
17791936 // =====================
17801937
1781
- var old = $.fn.tab
1782
-
1783
- $.fn.tab = function ( option ) {
1938
+ function Plugin(option) {
17841939 return this.each(function () {
17851940 var $this = $(this)
17861941 var data = $this.data('bs.tab')
....@@ -1790,6 +1945,9 @@
17901945 })
17911946 }
17921947
1948
+ var old = $.fn.tab
1949
+
1950
+ $.fn.tab = Plugin
17931951 $.fn.tab.Constructor = Tab
17941952
17951953
....@@ -1807,13 +1965,13 @@
18071965
18081966 $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
18091967 e.preventDefault()
1810
- $(this).tab('show')
1968
+ Plugin.call($(this), 'show')
18111969 })
18121970
18131971 }(jQuery);
18141972
18151973 /* ========================================================================
1816
- * Bootstrap: affix.js v3.1.0
1974
+ * Bootstrap: affix.js v3.2.0
18171975 * http://getbootstrap.com/javascript/#affix
18181976 * ========================================================================
18191977 * Copyright 2011-2014 Twitter, Inc.
....@@ -1829,7 +1987,8 @@
18291987
18301988 var Affix = function (element, options) {
18311989 this.options = $.extend({}, Affix.DEFAULTS, options)
1832
- this.$window = $(window)
1990
+
1991
+ this.$target = $(this.options.target)
18331992 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
18341993 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
18351994
....@@ -1841,16 +2000,19 @@
18412000 this.checkPosition()
18422001 }
18432002
1844
- Affix.RESET = 'affix affix-top affix-bottom'
2003
+ Affix.VERSION = '3.2.0'
2004
+
2005
+ Affix.RESET = 'affix affix-top affix-bottom'
18452006
18462007 Affix.DEFAULTS = {
1847
- offset: 0
2008
+ offset: 0,
2009
+ target: window
18482010 }
18492011
18502012 Affix.prototype.getPinnedOffset = function () {
18512013 if (this.pinnedOffset) return this.pinnedOffset
18522014 this.$element.removeClass(Affix.RESET).addClass('affix')
1853
- var scrollTop = this.$window.scrollTop()
2015
+ var scrollTop = this.$target.scrollTop()
18542016 var position = this.$element.offset()
18552017 return (this.pinnedOffset = position.top - scrollTop)
18562018 }
....@@ -1863,13 +2025,11 @@
18632025 if (!this.$element.is(':visible')) return
18642026
18652027 var scrollHeight = $(document).height()
1866
- var scrollTop = this.$window.scrollTop()
2028
+ var scrollTop = this.$target.scrollTop()
18672029 var position = this.$element.offset()
18682030 var offset = this.options.offset
18692031 var offsetTop = offset.top
18702032 var offsetBottom = offset.bottom
1871
-
1872
- if (this.affixed == 'top') position.top += scrollTop
18732033
18742034 if (typeof offset != 'object') offsetBottom = offsetTop = offset
18752035 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
....@@ -1880,7 +2040,7 @@
18802040 offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
18812041
18822042 if (this.affixed === affix) return
1883
- if (this.unpin) this.$element.css('top', '')
2043
+ if (this.unpin != null) this.$element.css('top', '')
18842044
18852045 var affixType = 'affix' + (affix ? '-' + affix : '')
18862046 var e = $.Event(affixType + '.bs.affix')
....@@ -1898,7 +2058,9 @@
18982058 .trigger($.Event(affixType.replace('affix', 'affixed')))
18992059
19002060 if (affix == 'bottom') {
1901
- this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
2061
+ this.$element.offset({
2062
+ top: scrollHeight - this.$element.height() - offsetBottom
2063
+ })
19022064 }
19032065 }
19042066
....@@ -1906,9 +2068,7 @@
19062068 // AFFIX PLUGIN DEFINITION
19072069 // =======================
19082070
1909
- var old = $.fn.affix
1910
-
1911
- $.fn.affix = function (option) {
2071
+ function Plugin(option) {
19122072 return this.each(function () {
19132073 var $this = $(this)
19142074 var data = $this.data('bs.affix')
....@@ -1919,6 +2079,9 @@
19192079 })
19202080 }
19212081
2082
+ var old = $.fn.affix
2083
+
2084
+ $.fn.affix = Plugin
19222085 $.fn.affix.Constructor = Affix
19232086
19242087
....@@ -1944,7 +2107,7 @@
19442107 if (data.offsetBottom) data.offset.bottom = data.offsetBottom
19452108 if (data.offsetTop) data.offset.top = data.offsetTop
19462109
1947
- $spy.affix(data)
2110
+ Plugin.call($spy, data)
19482111 })
19492112 })
19502113
securis/src/main/resources/static/js/vendor/bootstrap.min.js
....@@ -1,6 +1,6 @@
11 /*!
2
- * Bootstrap v3.1.0 (http://getbootstrap.com)
2
+ * Bootstrap v3.2.0 (http://getbootstrap.com)
33 * Copyright 2011-2014 Twitter, Inc.
44 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
55 */
6
-if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu], [role=listbox]",f.prototype.keydown)}(jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(a){return this[this.isShown?"hide":"show"](a)},b.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one(a.support.transition.end,function(){c.$element.focus().trigger(e)}).emulateTransitionEnd(300):c.$element.focus().trigger(e)}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one(a.support.transition.end,a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHeight:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i<p?"right":e,d.removeClass(l).addClass(e)}var q=this.getCalculatedOffset(e,h,i,j);this.applyPlacement(q,e),this.hoverState=null;var r=function(){c.$element.trigger("shown.bs."+c.type)};a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,r).emulateTransitionEnd(150):r()}},b.prototype.applyPlacement=function(b,c){var d,e=this.tip(),f=e[0].offsetWidth,g=e[0].offsetHeight,h=parseInt(e.css("margin-top"),10),i=parseInt(e.css("margin-left"),10);isNaN(h)&&(h=0),isNaN(i)&&(i=0),b.top=b.top+h,b.left=b.left+i,a.offset.setOffset(e[0],a.extend({using:function(a){e.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),e.addClass("in");var j=e[0].offsetWidth,k=e[0].offsetHeight;if("top"==c&&k!=g&&(d=!0,b.top=b.top+g-k),/bottom|top/.test(c)){var l=0;b.left<0&&(l=-2*b.left,b.left=0,e.offset(b),j=e[0].offsetWidth,k=e[0].offsetHeight),this.replaceArrow(l-f+j,j,"left")}else this.replaceArrow(k-g,k,"top");d&&e.offset(b)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one(a.support.transition.end,b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
6
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);