#2021 config - Added application Metadata management
1 files deleted
4 files added
30 files modified
deleted file mode 100644| .. | .. |
|---|
| 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 | | -} |
|---|
| .. | .. |
|---|
| 16 | 16 | |
|---|
| 17 | 17 | import org.codehaus.jackson.annotate.JsonAutoDetect; |
|---|
| 18 | 18 | import org.codehaus.jackson.annotate.JsonIgnore; |
|---|
| 19 | +import org.codehaus.jackson.annotate.JsonProperty; |
|---|
| 19 | 20 | import org.codehaus.jackson.map.annotate.JsonSerialize; |
|---|
| 21 | + |
|---|
| 20 | 22 | |
|---|
| 21 | 23 | /** |
|---|
| 22 | 24 | * Entity implementation class for Entity: application |
|---|
| .. | .. |
|---|
| 35 | 37 | |
|---|
| 36 | 38 | @Id |
|---|
| 37 | 39 | @GeneratedValue |
|---|
| 38 | | - private int id; |
|---|
| 40 | + private Integer id; |
|---|
| 39 | 41 | |
|---|
| 40 | 42 | private String name; |
|---|
| 41 | 43 | private String description; |
|---|
| .. | .. |
|---|
| 49 | 51 | @OneToMany(fetch = FetchType.LAZY, mappedBy = "application") |
|---|
| 50 | 52 | private Set<LicenseType> licenseTypes; |
|---|
| 51 | 53 | |
|---|
| 52 | | - @JsonIgnore |
|---|
| 53 | | - // We don't include the referenced entities to limit the size of each row at |
|---|
| 54 | | - // the listing |
|---|
| 55 | 54 | @OneToMany(fetch = FetchType.LAZY, mappedBy = "application") |
|---|
| 56 | 55 | private Set<ApplicationMetadata> metadata; |
|---|
| 57 | 56 | |
|---|
| .. | .. |
|---|
| 95 | 94 | this.licenseTypes = licenseTypes; |
|---|
| 96 | 95 | } |
|---|
| 97 | 96 | |
|---|
| 97 | + @JsonProperty("metadata") |
|---|
| 98 | 98 | public Set<ApplicationMetadata> getApplicationMetadata() { |
|---|
| 99 | 99 | return metadata; |
|---|
| 100 | 100 | } |
|---|
| 101 | 101 | |
|---|
| 102 | + @JsonProperty("metadata") |
|---|
| 102 | 103 | public void setApplicationMetadata(Set<ApplicationMetadata> metadata) { |
|---|
| 103 | 104 | this.metadata = metadata; |
|---|
| 104 | 105 | } |
|---|
| 105 | 106 | |
|---|
| 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 | + } |
|---|
| 106 | 120 | } |
|---|
| .. | .. |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | import java.io.Serializable; |
|---|
| 4 | 4 | import java.util.Date; |
|---|
| 5 | | -import java.util.Set; |
|---|
| 6 | 5 | |
|---|
| 7 | 6 | import javax.persistence.Column; |
|---|
| 8 | 7 | import javax.persistence.Entity; |
|---|
| 9 | | -import javax.persistence.FetchType; |
|---|
| 10 | 8 | import javax.persistence.GeneratedValue; |
|---|
| 11 | 9 | import javax.persistence.Id; |
|---|
| 12 | 10 | import javax.persistence.JoinColumn; |
|---|
| 13 | 11 | import javax.persistence.ManyToOne; |
|---|
| 14 | 12 | import javax.persistence.NamedQueries; |
|---|
| 15 | 13 | import javax.persistence.NamedQuery; |
|---|
| 16 | | -import javax.persistence.OneToMany; |
|---|
| 17 | 14 | import javax.persistence.Table; |
|---|
| 18 | | - |
|---|
| 19 | | -import net.curisit.securis.beans.MetadataType; |
|---|
| 20 | 15 | |
|---|
| 21 | 16 | import org.codehaus.jackson.annotate.JsonAutoDetect; |
|---|
| 22 | 17 | import org.codehaus.jackson.annotate.JsonIgnore; |
|---|
| .. | .. |
|---|
| 38 | 33 | |
|---|
| 39 | 34 | private static final long serialVersionUID = 1L; |
|---|
| 40 | 35 | |
|---|
| 41 | | - @Id |
|---|
| 42 | | - @GeneratedValue |
|---|
| 43 | | - private int id; |
|---|
| 44 | | - |
|---|
| 45 | | - private String key; |
|---|
| 46 | | - |
|---|
| 47 | | - private String description; |
|---|
| 48 | | - |
|---|
| 49 | | - private MetadataType dataType; |
|---|
| 50 | | - |
|---|
| 51 | 36 | @JsonIgnore |
|---|
| 37 | + @Id |
|---|
| 52 | 38 | @ManyToOne |
|---|
| 53 | 39 | @JoinColumn(name = "application_id") |
|---|
| 54 | 40 | private Application application; |
|---|
| 55 | 41 | |
|---|
| 42 | + @Id |
|---|
| 43 | + private String key; |
|---|
| 44 | + |
|---|
| 45 | + private String value; |
|---|
| 46 | + |
|---|
| 47 | + private boolean mandatory; |
|---|
| 48 | + |
|---|
| 56 | 49 | @Column(name = "creation_timestamp") |
|---|
| 57 | 50 | private Date creationTimestamp; |
|---|
| 58 | 51 | |
|---|
| 59 | | - public int getId() { |
|---|
| 60 | | - return id; |
|---|
| 61 | | - } |
|---|
| 62 | | - |
|---|
| 63 | | - public void setId(int id) { |
|---|
| 64 | | - this.id = id; |
|---|
| 65 | | - } |
|---|
| 66 | 52 | |
|---|
| 67 | 53 | public String getKey() { |
|---|
| 68 | 54 | return key; |
|---|
| .. | .. |
|---|
| 70 | 56 | |
|---|
| 71 | 57 | public void setKey(String key) { |
|---|
| 72 | 58 | 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; |
|---|
| 89 | 59 | } |
|---|
| 90 | 60 | |
|---|
| 91 | 61 | public Application getApplication() { |
|---|
| .. | .. |
|---|
| 120 | 90 | } |
|---|
| 121 | 91 | } |
|---|
| 122 | 92 | |
|---|
| 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 | + |
|---|
| 123 | 123 | } |
|---|
| .. | .. |
|---|
| 59 | 59 | @JoinColumn(name = "application_id") |
|---|
| 60 | 60 | private Application application; |
|---|
| 61 | 61 | |
|---|
| 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") |
|---|
| 66 | 63 | private Set<LicenseTypeMetadata> metadata; |
|---|
| 67 | 64 | |
|---|
| 68 | 65 | public Set<LicenseTypeMetadata> getMetadata() { |
|---|
| .. | .. |
|---|
| 1 | 1 | package net.curisit.securis.db; |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | import java.io.Serializable; |
|---|
| 4 | | -import java.util.Date; |
|---|
| 5 | 4 | |
|---|
| 6 | | -import javax.persistence.Column; |
|---|
| 7 | 5 | import javax.persistence.Entity; |
|---|
| 8 | 6 | import javax.persistence.GeneratedValue; |
|---|
| 9 | 7 | import javax.persistence.Id; |
|---|
| .. | .. |
|---|
| 12 | 10 | import javax.persistence.NamedQueries; |
|---|
| 13 | 11 | import javax.persistence.NamedQuery; |
|---|
| 14 | 12 | import javax.persistence.Table; |
|---|
| 15 | | - |
|---|
| 16 | | -import net.curisit.securis.beans.MetadataType; |
|---|
| 17 | 13 | |
|---|
| 18 | 14 | import org.codehaus.jackson.annotate.JsonAutoDetect; |
|---|
| 19 | 15 | import org.codehaus.jackson.annotate.JsonIgnore; |
|---|
| .. | .. |
|---|
| 39 | 35 | @GeneratedValue |
|---|
| 40 | 36 | private int id; |
|---|
| 41 | 37 | |
|---|
| 38 | + private String key; |
|---|
| 39 | + |
|---|
| 42 | 40 | private String value; |
|---|
| 43 | 41 | |
|---|
| 44 | 42 | @JsonIgnore |
|---|
| 45 | 43 | @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") |
|---|
| 52 | 45 | private LicenseType licenseType; |
|---|
| 53 | 46 | |
|---|
| 54 | 47 | public int getId() { |
|---|
| .. | .. |
|---|
| 74 | 67 | } |
|---|
| 75 | 68 | } |
|---|
| 76 | 69 | |
|---|
| 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 | | - |
|---|
| 100 | 70 | public LicenseType getLicenseType() { |
|---|
| 101 | 71 | return licenseType; |
|---|
| 102 | 72 | } |
|---|
| .. | .. |
|---|
| 113 | 83 | this.value = value; |
|---|
| 114 | 84 | } |
|---|
| 115 | 85 | |
|---|
| 86 | + public String getKey() { |
|---|
| 87 | + return key; |
|---|
| 88 | + } |
|---|
| 89 | + |
|---|
| 90 | + public void setKey(String key) { |
|---|
| 91 | + this.key = key; |
|---|
| 92 | + } |
|---|
| 93 | + |
|---|
| 116 | 94 | } |
|---|
| .. | .. |
|---|
| 78 | 78 | @JsonProperty("license_preactivation") |
|---|
| 79 | 79 | private boolean licensePreactivation; |
|---|
| 80 | 80 | |
|---|
| 81 | + @OneToMany(fetch = FetchType.LAZY, mappedBy = "pack") |
|---|
| 82 | + private Set<PackMetadata> metadata; |
|---|
| 83 | + |
|---|
| 81 | 84 | public int getId() { |
|---|
| 82 | 85 | return id; |
|---|
| 83 | 86 | } |
|---|
| .. | .. |
|---|
| 1 | 1 | package net.curisit.securis.db; |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | import java.io.Serializable; |
|---|
| 4 | | -import java.util.Date; |
|---|
| 5 | 4 | |
|---|
| 6 | | -import javax.persistence.Column; |
|---|
| 7 | 5 | import javax.persistence.Entity; |
|---|
| 8 | 6 | import javax.persistence.GeneratedValue; |
|---|
| 9 | 7 | import javax.persistence.Id; |
|---|
| .. | .. |
|---|
| 37 | 35 | @GeneratedValue |
|---|
| 38 | 36 | private int id; |
|---|
| 39 | 37 | |
|---|
| 38 | + private String key; |
|---|
| 39 | + |
|---|
| 40 | 40 | private String value; |
|---|
| 41 | 41 | |
|---|
| 42 | | - @JsonIgnore |
|---|
| 43 | | - @ManyToOne |
|---|
| 44 | | - @JoinColumn(name = "metadata_id") |
|---|
| 45 | | - private ApplicationMetadata metadata; |
|---|
| 42 | + private boolean readonly; |
|---|
| 46 | 43 | |
|---|
| 47 | 44 | @JsonIgnore |
|---|
| 48 | 45 | @ManyToOne |
|---|
| .. | .. |
|---|
| 72 | 69 | } |
|---|
| 73 | 70 | } |
|---|
| 74 | 71 | |
|---|
| 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 | | - |
|---|
| 98 | 72 | public Pack getPack() { |
|---|
| 99 | 73 | return pack; |
|---|
| 100 | 74 | } |
|---|
| .. | .. |
|---|
| 111 | 85 | this.value = value; |
|---|
| 112 | 86 | } |
|---|
| 113 | 87 | |
|---|
| 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 | + |
|---|
| 114 | 104 | } |
|---|
| .. | .. |
|---|
| 2 | 2 | |
|---|
| 3 | 3 | import java.util.Date; |
|---|
| 4 | 4 | import java.util.List; |
|---|
| 5 | +import java.util.Set; |
|---|
| 5 | 6 | |
|---|
| 6 | 7 | import javax.inject.Inject; |
|---|
| 7 | 8 | import javax.inject.Provider; |
|---|
| .. | .. |
|---|
| 25 | 26 | import net.curisit.integrity.commons.Utils; |
|---|
| 26 | 27 | import net.curisit.securis.DefaultExceptionHandler; |
|---|
| 27 | 28 | import net.curisit.securis.db.Application; |
|---|
| 29 | +import net.curisit.securis.db.ApplicationMetadata; |
|---|
| 28 | 30 | import net.curisit.securis.utils.TokenHelper; |
|---|
| 29 | 31 | |
|---|
| 30 | 32 | import org.apache.logging.log4j.LogManager; |
|---|
| .. | .. |
|---|
| 110 | 112 | EntityManager em = emProvider.get(); |
|---|
| 111 | 113 | app.setCreationTimestamp(new Date()); |
|---|
| 112 | 114 | 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 | + } |
|---|
| 113 | 123 | |
|---|
| 114 | 124 | return Response.ok(app).build(); |
|---|
| 115 | 125 | } |
|---|
| .. | .. |
|---|
| 134 | 144 | currentapp.setName(app.getName()); |
|---|
| 135 | 145 | currentapp.setDescription(app.getDescription()); |
|---|
| 136 | 146 | 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()); |
|---|
| 138 | 164 | return Response.ok(currentapp).build(); |
|---|
| 139 | 165 | } |
|---|
| 140 | 166 | |
|---|
| .. | .. |
|---|
| 26 | 26 | creation_timestamp DATETIME NULL , |
|---|
| 27 | 27 | PRIMARY KEY (id)); |
|---|
| 28 | 28 | |
|---|
| 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 | + |
|---|
| 29 | 38 | |
|---|
| 30 | 39 | drop table IF EXISTS license_type; |
|---|
| 31 | 40 | CREATE TABLE IF NOT EXISTS license_type ( |
|---|
| .. | .. |
|---|
| 35 | 44 | description VARCHAR(100) NULL , |
|---|
| 36 | 45 | application_id INT NULL , |
|---|
| 37 | 46 | 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 , |
|---|
| 38 | 55 | PRIMARY KEY (id)); |
|---|
| 39 | 56 | |
|---|
| 40 | 57 | drop table IF EXISTS organization; |
|---|
| .. | .. |
|---|
| 66 | 83 | creation_timestamp DATETIME NOT NULL , |
|---|
| 67 | 84 | PRIMARY KEY (id)); |
|---|
| 68 | 85 | |
|---|
| 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 | + |
|---|
| 69 | 96 | drop table IF EXISTS license; |
|---|
| 70 | 97 | CREATE TABLE IF NOT EXISTS license ( |
|---|
| 71 | 98 | id INT NOT NULL auto_increment, |
|---|
| .. | .. |
|---|
| 8 | 8 | license.server.port = 9080 |
|---|
| 9 | 9 | license.server.ssl.port = 9443 |
|---|
| 10 | 10 | |
|---|
| 11 | | -ssl.keystore.path = /change-path-to/securis.pkcs12 |
|---|
| 11 | +ssl.keystore.path = /Users/rob/.ssh/keys/securis.pkcs12 |
|---|
| 12 | 12 | ssl.keystore.type = PKCS12 |
|---|
| 13 | 13 | ssl.keystore.password = curist3c |
|---|
| 14 | 14 | ssl.keystore.alias = |
|---|
| .. | .. |
|---|
| 58 | 58 | <select chosen multiple ng-switch-when="multiselect" class="form-control" ng-required="field.mandatory" ng-model="formu[field.name]" |
|---|
| 59 | 59 | ng-options="o.id as o.label for o in refs[field.name]" data-placeholder="..."> |
|---|
| 60 | 60 | </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> |
|---|
| 61 | 91 | |
|---|
| 62 | 92 | |
|---|
| 63 | 93 | </div> |
|---|
| .. | .. |
|---|
| 1 | 1 | /*! |
|---|
| 2 | | - * Bootstrap v3.1.0 (http://getbootstrap.com) |
|---|
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) |
|---|
| 3 | 3 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| 4 | 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
|---|
| 5 | 5 | */ |
|---|
| .. | .. |
|---|
| 36 | 36 | .btn-default { |
|---|
| 37 | 37 | text-shadow: 0 1px 0 #fff; |
|---|
| 38 | 38 | 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)); |
|---|
| 39 | 41 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); |
|---|
| 40 | 42 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); |
|---|
| 41 | 43 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 53 | 55 | background-color: #e0e0e0; |
|---|
| 54 | 56 | border-color: #dbdbdb; |
|---|
| 55 | 57 | } |
|---|
| 58 | +.btn-default:disabled, |
|---|
| 59 | +.btn-default[disabled] { |
|---|
| 60 | + background-color: #e0e0e0; |
|---|
| 61 | + background-image: none; |
|---|
| 62 | +} |
|---|
| 56 | 63 | .btn-primary { |
|---|
| 57 | 64 | 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)); |
|---|
| 58 | 67 | background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); |
|---|
| 59 | 68 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); |
|---|
| 60 | 69 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 71 | 80 | background-color: #2d6ca2; |
|---|
| 72 | 81 | border-color: #2b669a; |
|---|
| 73 | 82 | } |
|---|
| 83 | +.btn-primary:disabled, |
|---|
| 84 | +.btn-primary[disabled] { |
|---|
| 85 | + background-color: #2d6ca2; |
|---|
| 86 | + background-image: none; |
|---|
| 87 | +} |
|---|
| 74 | 88 | .btn-success { |
|---|
| 75 | 89 | 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)); |
|---|
| 76 | 92 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); |
|---|
| 77 | 93 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); |
|---|
| 78 | 94 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 89 | 105 | background-color: #419641; |
|---|
| 90 | 106 | border-color: #3e8f3e; |
|---|
| 91 | 107 | } |
|---|
| 108 | +.btn-success:disabled, |
|---|
| 109 | +.btn-success[disabled] { |
|---|
| 110 | + background-color: #419641; |
|---|
| 111 | + background-image: none; |
|---|
| 112 | +} |
|---|
| 92 | 113 | .btn-info { |
|---|
| 93 | 114 | 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)); |
|---|
| 94 | 117 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); |
|---|
| 95 | 118 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); |
|---|
| 96 | 119 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 107 | 130 | background-color: #2aabd2; |
|---|
| 108 | 131 | border-color: #28a4c9; |
|---|
| 109 | 132 | } |
|---|
| 133 | +.btn-info:disabled, |
|---|
| 134 | +.btn-info[disabled] { |
|---|
| 135 | + background-color: #2aabd2; |
|---|
| 136 | + background-image: none; |
|---|
| 137 | +} |
|---|
| 110 | 138 | .btn-warning { |
|---|
| 111 | 139 | 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)); |
|---|
| 112 | 142 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); |
|---|
| 113 | 143 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); |
|---|
| 114 | 144 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 125 | 155 | background-color: #eb9316; |
|---|
| 126 | 156 | border-color: #e38d13; |
|---|
| 127 | 157 | } |
|---|
| 158 | +.btn-warning:disabled, |
|---|
| 159 | +.btn-warning[disabled] { |
|---|
| 160 | + background-color: #eb9316; |
|---|
| 161 | + background-image: none; |
|---|
| 162 | +} |
|---|
| 128 | 163 | .btn-danger { |
|---|
| 129 | 164 | 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)); |
|---|
| 130 | 167 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); |
|---|
| 131 | 168 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); |
|---|
| 132 | 169 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 143 | 180 | background-color: #c12e2a; |
|---|
| 144 | 181 | border-color: #b92c28; |
|---|
| 145 | 182 | } |
|---|
| 183 | +.btn-danger:disabled, |
|---|
| 184 | +.btn-danger[disabled] { |
|---|
| 185 | + background-color: #c12e2a; |
|---|
| 186 | + background-image: none; |
|---|
| 187 | +} |
|---|
| 146 | 188 | .thumbnail, |
|---|
| 147 | 189 | .img-thumbnail { |
|---|
| 148 | 190 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); |
|---|
| .. | .. |
|---|
| 152 | 194 | .dropdown-menu > li > a:focus { |
|---|
| 153 | 195 | background-color: #e8e8e8; |
|---|
| 154 | 196 | 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)); |
|---|
| 155 | 199 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); |
|---|
| 156 | 200 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); |
|---|
| 157 | 201 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 161 | 205 | .dropdown-menu > .active > a:focus { |
|---|
| 162 | 206 | background-color: #357ebd; |
|---|
| 163 | 207 | 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)); |
|---|
| 164 | 210 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); |
|---|
| 165 | 211 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); |
|---|
| 166 | 212 | background-repeat: repeat-x; |
|---|
| 167 | 213 | } |
|---|
| 168 | 214 | .navbar-default { |
|---|
| 169 | 215 | 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)); |
|---|
| 170 | 218 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); |
|---|
| 171 | 219 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); |
|---|
| 172 | 220 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 177 | 225 | } |
|---|
| 178 | 226 | .navbar-default .navbar-nav > .active > a { |
|---|
| 179 | 227 | 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)); |
|---|
| 180 | 230 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); |
|---|
| 181 | 231 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); |
|---|
| 182 | 232 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 189 | 239 | } |
|---|
| 190 | 240 | .navbar-inverse { |
|---|
| 191 | 241 | 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)); |
|---|
| 192 | 244 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); |
|---|
| 193 | 245 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); |
|---|
| 194 | 246 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); |
|---|
| .. | .. |
|---|
| 196 | 248 | } |
|---|
| 197 | 249 | .navbar-inverse .navbar-nav > .active > a { |
|---|
| 198 | 250 | 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)); |
|---|
| 199 | 253 | background-image: linear-gradient(to bottom, #222 0%, #282828 100%); |
|---|
| 200 | 254 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); |
|---|
| 201 | 255 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 218 | 272 | } |
|---|
| 219 | 273 | .alert-success { |
|---|
| 220 | 274 | 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)); |
|---|
| 221 | 277 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); |
|---|
| 222 | 278 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); |
|---|
| 223 | 279 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 225 | 281 | } |
|---|
| 226 | 282 | .alert-info { |
|---|
| 227 | 283 | 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)); |
|---|
| 228 | 286 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); |
|---|
| 229 | 287 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); |
|---|
| 230 | 288 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 232 | 290 | } |
|---|
| 233 | 291 | .alert-warning { |
|---|
| 234 | 292 | 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)); |
|---|
| 235 | 295 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); |
|---|
| 236 | 296 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); |
|---|
| 237 | 297 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 239 | 299 | } |
|---|
| 240 | 300 | .alert-danger { |
|---|
| 241 | 301 | 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)); |
|---|
| 242 | 304 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); |
|---|
| 243 | 305 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); |
|---|
| 244 | 306 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 246 | 308 | } |
|---|
| 247 | 309 | .progress { |
|---|
| 248 | 310 | 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)); |
|---|
| 249 | 313 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); |
|---|
| 250 | 314 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); |
|---|
| 251 | 315 | background-repeat: repeat-x; |
|---|
| 252 | 316 | } |
|---|
| 253 | 317 | .progress-bar { |
|---|
| 254 | 318 | 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)); |
|---|
| 255 | 321 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); |
|---|
| 256 | 322 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); |
|---|
| 257 | 323 | background-repeat: repeat-x; |
|---|
| 258 | 324 | } |
|---|
| 259 | 325 | .progress-bar-success { |
|---|
| 260 | 326 | 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)); |
|---|
| 261 | 329 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); |
|---|
| 262 | 330 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); |
|---|
| 263 | 331 | background-repeat: repeat-x; |
|---|
| 264 | 332 | } |
|---|
| 265 | 333 | .progress-bar-info { |
|---|
| 266 | 334 | 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)); |
|---|
| 267 | 337 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); |
|---|
| 268 | 338 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); |
|---|
| 269 | 339 | background-repeat: repeat-x; |
|---|
| 270 | 340 | } |
|---|
| 271 | 341 | .progress-bar-warning { |
|---|
| 272 | 342 | 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)); |
|---|
| 273 | 345 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); |
|---|
| 274 | 346 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); |
|---|
| 275 | 347 | background-repeat: repeat-x; |
|---|
| 276 | 348 | } |
|---|
| 277 | 349 | .progress-bar-danger { |
|---|
| 278 | 350 | 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)); |
|---|
| 279 | 353 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); |
|---|
| 280 | 354 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); |
|---|
| 281 | 355 | 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); |
|---|
| 282 | 361 | } |
|---|
| 283 | 362 | .list-group { |
|---|
| 284 | 363 | border-radius: 4px; |
|---|
| .. | .. |
|---|
| 290 | 369 | .list-group-item.active:focus { |
|---|
| 291 | 370 | text-shadow: 0 -1px 0 #3071a9; |
|---|
| 292 | 371 | 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)); |
|---|
| 293 | 374 | background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); |
|---|
| 294 | 375 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); |
|---|
| 295 | 376 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 301 | 382 | } |
|---|
| 302 | 383 | .panel-default > .panel-heading { |
|---|
| 303 | 384 | 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)); |
|---|
| 304 | 387 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); |
|---|
| 305 | 388 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); |
|---|
| 306 | 389 | background-repeat: repeat-x; |
|---|
| 307 | 390 | } |
|---|
| 308 | 391 | .panel-primary > .panel-heading { |
|---|
| 309 | 392 | 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)); |
|---|
| 310 | 395 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); |
|---|
| 311 | 396 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); |
|---|
| 312 | 397 | background-repeat: repeat-x; |
|---|
| 313 | 398 | } |
|---|
| 314 | 399 | .panel-success > .panel-heading { |
|---|
| 315 | 400 | 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)); |
|---|
| 316 | 403 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); |
|---|
| 317 | 404 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); |
|---|
| 318 | 405 | background-repeat: repeat-x; |
|---|
| 319 | 406 | } |
|---|
| 320 | 407 | .panel-info > .panel-heading { |
|---|
| 321 | 408 | 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)); |
|---|
| 322 | 411 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); |
|---|
| 323 | 412 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); |
|---|
| 324 | 413 | background-repeat: repeat-x; |
|---|
| 325 | 414 | } |
|---|
| 326 | 415 | .panel-warning > .panel-heading { |
|---|
| 327 | 416 | 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)); |
|---|
| 328 | 419 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); |
|---|
| 329 | 420 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); |
|---|
| 330 | 421 | background-repeat: repeat-x; |
|---|
| 331 | 422 | } |
|---|
| 332 | 423 | .panel-danger > .panel-heading { |
|---|
| 333 | 424 | 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)); |
|---|
| 334 | 427 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); |
|---|
| 335 | 428 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); |
|---|
| 336 | 429 | background-repeat: repeat-x; |
|---|
| 337 | 430 | } |
|---|
| 338 | 431 | .well { |
|---|
| 339 | 432 | 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)); |
|---|
| 340 | 435 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); |
|---|
| 341 | 436 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); |
|---|
| 342 | 437 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 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":"AAeA;;;;;;EAME,0CAAA;EC+CA,6FAAA;EACQ,qFAAA;EC5DT;AFiBC;;;;;;;;;;;;EC0CA,0DAAA;EACQ,kDAAA;EC7CT;AFqCC;;EAEE,wBAAA;EEnCH;AFwCD;EG/CI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EA+B2C,2BAAA;EAA2B,oBAAA;EE7BvE;AFAC;;EAEE,2BAAA;EACA,8BAAA;EEEH;AFCC;;EAEE,2BAAA;EACA,uBAAA;EECH;AFEC;;EAEE,2BAAA;EACA,wBAAA;EEAH;AFeD;EGhDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0BD;AFxBC;;EAEE,2BAAA;EACA,8BAAA;EE0BH;AFvBC;;EAEE,2BAAA;EACA,uBAAA;EEyBH;AFtBC;;EAEE,2BAAA;EACA,wBAAA;EEwBH;AFRD;EGjDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkDD;AFhDC;;EAEE,2BAAA;EACA,8BAAA;EEkDH;AF/CC;;EAEE,2BAAA;EACA,uBAAA;EEiDH;AF9CC;;EAEE,2BAAA;EACA,wBAAA;EEgDH;AF/BD;EGlDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0ED;AFxEC;;EAEE,2BAAA;EACA,8BAAA;EE0EH;AFvEC;;EAEE,2BAAA;EACA,uBAAA;EEyEH;AFtEC;;EAEE,2BAAA;EACA,wBAAA;EEwEH;AFtDD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EEkGD;AFhGC;;EAEE,2BAAA;EACA,8BAAA;EEkGH;AF/FC;;EAEE,2BAAA;EACA,uBAAA;EEiGH;AF9FC;;EAEE,2BAAA;EACA,wBAAA;EEgGH;AF7ED;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJ8BA,6BAAA;EACA,uBAAA;EE0HD;AFxHC;;EAEE,2BAAA;EACA,8BAAA;EE0HH;AFvHC;;EAEE,2BAAA;EACA,uBAAA;EEyHH;AFtHC;;EAEE,2BAAA;EACA,wBAAA;EEwHH;AF7FD;;ECbE,oDAAA;EACQ,4CAAA;EC8GT;AFvFD;;EGvEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHsEF,2BAAA;EE6FD;AF3FD;;;EG5EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4EF,2BAAA;EEiGD;AFvFD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ4GA,oBAAA;EC9CA,6FAAA;EACQ,qFAAA;EC4IT;AFlGD;EG1FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECqJT;AF/FD;;EAEE,gDAAA;EEiGD;AF7FD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EFgOD;AFrGD;EG5GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0KT;AF9GD;;EAWI,2CAAA;EEuGH;AFlGD;;;EAGE,kBAAA;EEoGD;AF1FD;EACE,+CAAA;EC3FA,4FAAA;EACQ,oFAAA;ECwLT;AFlFD;EGtJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8FD;AFzFD;EGvJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsGD;AFhGD;EGxJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EE8GD;AFvGD;EGzJI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8IF,uBAAA;EEsHD;AFtGD;EGlKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2QH;AFnGD;EG5KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkRH;AFzGD;EG7KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDyRH;AF/GD;EG9KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDgSH;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AF3HD;EGhLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AF9HD;EGnJI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDoRH;AF1HD;EACE,oBAAA;EC/IA,oDAAA;EACQ,4CAAA;EC4QT;AF3HD;;;EAGE,+BAAA;EGpME,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHkMF,uBAAA;EEiID;AFvHD;ECjKE,mDAAA;EACQ,2CAAA;EC2RT;AFjHD;EG1NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8UH;AFvHD;EG3NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqVH;AF7HD;EG5NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4VH;AFnID;EG7NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmWH;AFzID;EG9NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0WH;AF/ID;EG/NI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDiXH;AF9ID;EGvOI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHqOF,uBAAA;EC1LA,2FAAA;EACQ,mFAAA;EC+UT","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"]} |
|---|
| .. | .. |
|---|
| 1 | 1 | /*! |
|---|
| 2 | | - * Bootstrap v3.1.0 (http://getbootstrap.com) |
|---|
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) |
|---|
| 3 | 3 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| 4 | 4 | * 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)} |
|---|
| .. | .. |
|---|
| 1 | 1 | /*! |
|---|
| 2 | | - * Bootstrap v3.1.0 (http://getbootstrap.com) |
|---|
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) |
|---|
| 3 | 3 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| 4 | 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
|---|
| 5 | 5 | */ |
|---|
| 6 | 6 | |
|---|
| 7 | | -/*! normalize.css v3.0.0 | MIT License | git.io/normalize */ |
|---|
| 7 | +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ |
|---|
| 8 | 8 | html { |
|---|
| 9 | 9 | font-family: sans-serif; |
|---|
| 10 | 10 | -webkit-text-size-adjust: 100%; |
|---|
| .. | .. |
|---|
| 94 | 94 | } |
|---|
| 95 | 95 | hr { |
|---|
| 96 | 96 | 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; |
|---|
| 99 | 100 | } |
|---|
| 100 | 101 | pre { |
|---|
| 101 | 102 | overflow: auto; |
|---|
| .. | .. |
|---|
| 144 | 145 | } |
|---|
| 145 | 146 | input[type="checkbox"], |
|---|
| 146 | 147 | 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; |
|---|
| 148 | 151 | padding: 0; |
|---|
| 149 | 152 | } |
|---|
| 150 | 153 | input[type="number"]::-webkit-inner-spin-button, |
|---|
| .. | .. |
|---|
| 189 | 192 | color: #000 !important; |
|---|
| 190 | 193 | text-shadow: none !important; |
|---|
| 191 | 194 | background: transparent !important; |
|---|
| 192 | | - box-shadow: none !important; |
|---|
| 195 | + -webkit-box-shadow: none !important; |
|---|
| 196 | + box-shadow: none !important; |
|---|
| 193 | 197 | } |
|---|
| 194 | 198 | a, |
|---|
| 195 | 199 | a:visited { |
|---|
| .. | .. |
|---|
| 255 | 259 | .table-bordered td { |
|---|
| 256 | 260 | border: 1px solid #ddd !important; |
|---|
| 257 | 261 | } |
|---|
| 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; |
|---|
| 2366 | 262 | } |
|---|
| 2367 | 263 | @font-face { |
|---|
| 2368 | 264 | font-family: 'Glyphicons Halflings'; |
|---|
| .. | .. |
|---|
| 2982 | 878 | .glyphicon-tree-deciduous:before { |
|---|
| 2983 | 879 | content: "\e200"; |
|---|
| 2984 | 880 | } |
|---|
| 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 | +} |
|---|
| 2985 | 3112 | .caret { |
|---|
| 2986 | 3113 | display: inline-block; |
|---|
| 2987 | 3114 | width: 0; |
|---|
| .. | .. |
|---|
| 3009 | 3136 | padding: 5px 0; |
|---|
| 3010 | 3137 | margin: 2px 0 0; |
|---|
| 3011 | 3138 | font-size: 14px; |
|---|
| 3139 | + text-align: left; |
|---|
| 3012 | 3140 | list-style: none; |
|---|
| 3013 | 3141 | background-color: #fff; |
|---|
| 3014 | | - background-clip: padding-box; |
|---|
| 3142 | + -webkit-background-clip: padding-box; |
|---|
| 3143 | + background-clip: padding-box; |
|---|
| 3015 | 3144 | border: 1px solid #ccc; |
|---|
| 3016 | 3145 | border: 1px solid rgba(0, 0, 0, .15); |
|---|
| 3017 | 3146 | border-radius: 4px; |
|---|
| .. | .. |
|---|
| 3033 | 3162 | padding: 3px 20px; |
|---|
| 3034 | 3163 | clear: both; |
|---|
| 3035 | 3164 | font-weight: normal; |
|---|
| 3036 | | - line-height: 1.428571429; |
|---|
| 3165 | + line-height: 1.42857143; |
|---|
| 3037 | 3166 | color: #333; |
|---|
| 3038 | 3167 | white-space: nowrap; |
|---|
| 3039 | 3168 | } |
|---|
| .. | .. |
|---|
| 3054 | 3183 | .dropdown-menu > .disabled > a, |
|---|
| 3055 | 3184 | .dropdown-menu > .disabled > a:hover, |
|---|
| 3056 | 3185 | .dropdown-menu > .disabled > a:focus { |
|---|
| 3057 | | - color: #999; |
|---|
| 3186 | + color: #777; |
|---|
| 3058 | 3187 | } |
|---|
| 3059 | 3188 | .dropdown-menu > .disabled > a:hover, |
|---|
| 3060 | 3189 | .dropdown-menu > .disabled > a:focus { |
|---|
| .. | .. |
|---|
| 3082 | 3211 | display: block; |
|---|
| 3083 | 3212 | padding: 3px 20px; |
|---|
| 3084 | 3213 | font-size: 12px; |
|---|
| 3085 | | - line-height: 1.428571429; |
|---|
| 3086 | | - color: #999; |
|---|
| 3214 | + line-height: 1.42857143; |
|---|
| 3215 | + color: #777; |
|---|
| 3216 | + white-space: nowrap; |
|---|
| 3087 | 3217 | } |
|---|
| 3088 | 3218 | .dropdown-backdrop { |
|---|
| 3089 | 3219 | position: fixed; |
|---|
| .. | .. |
|---|
| 3142 | 3272 | } |
|---|
| 3143 | 3273 | .btn-group > .btn:focus, |
|---|
| 3144 | 3274 | .btn-group-vertical > .btn:focus { |
|---|
| 3145 | | - outline: none; |
|---|
| 3275 | + outline: 0; |
|---|
| 3146 | 3276 | } |
|---|
| 3147 | 3277 | .btn-group .btn + .btn, |
|---|
| 3148 | 3278 | .btn-group .btn + .btn-group, |
|---|
| .. | .. |
|---|
| 3195 | 3325 | .btn-group .dropdown-toggle:active, |
|---|
| 3196 | 3326 | .btn-group.open .dropdown-toggle { |
|---|
| 3197 | 3327 | 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; |
|---|
| 3216 | 3328 | } |
|---|
| 3217 | 3329 | .btn-group > .btn + .dropdown-toggle { |
|---|
| 3218 | 3330 | padding-right: 8px; |
|---|
| .. | .. |
|---|
| 3298 | 3410 | .btn-group-justified > .btn-group .btn { |
|---|
| 3299 | 3411 | width: 100%; |
|---|
| 3300 | 3412 | } |
|---|
| 3413 | +.btn-group-justified > .btn-group .dropdown-menu { |
|---|
| 3414 | + left: auto; |
|---|
| 3415 | +} |
|---|
| 3301 | 3416 | [data-toggle="buttons"] > .btn > input[type="radio"], |
|---|
| 3302 | 3417 | [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; |
|---|
| 3304 | 3422 | } |
|---|
| 3305 | 3423 | .input-group { |
|---|
| 3306 | 3424 | position: relative; |
|---|
| .. | .. |
|---|
| 3313 | 3431 | padding-left: 0; |
|---|
| 3314 | 3432 | } |
|---|
| 3315 | 3433 | .input-group .form-control { |
|---|
| 3434 | + position: relative; |
|---|
| 3435 | + z-index: 2; |
|---|
| 3316 | 3436 | float: left; |
|---|
| 3317 | 3437 | width: 100%; |
|---|
| 3318 | 3438 | margin-bottom: 0; |
|---|
| .. | .. |
|---|
| 3474 | 3594 | background-color: #eee; |
|---|
| 3475 | 3595 | } |
|---|
| 3476 | 3596 | .nav > li.disabled > a { |
|---|
| 3477 | | - color: #999; |
|---|
| 3597 | + color: #777; |
|---|
| 3478 | 3598 | } |
|---|
| 3479 | 3599 | .nav > li.disabled > a:hover, |
|---|
| 3480 | 3600 | .nav > li.disabled > a:focus { |
|---|
| 3481 | | - color: #999; |
|---|
| 3601 | + color: #777; |
|---|
| 3482 | 3602 | text-decoration: none; |
|---|
| 3483 | 3603 | cursor: not-allowed; |
|---|
| 3484 | 3604 | background-color: transparent; |
|---|
| .. | .. |
|---|
| 3507 | 3627 | } |
|---|
| 3508 | 3628 | .nav-tabs > li > a { |
|---|
| 3509 | 3629 | margin-right: 2px; |
|---|
| 3510 | | - line-height: 1.428571429; |
|---|
| 3630 | + line-height: 1.42857143; |
|---|
| 3511 | 3631 | border: 1px solid transparent; |
|---|
| 3512 | 3632 | border-radius: 4px 4px 0 0; |
|---|
| 3513 | 3633 | } |
|---|
| .. | .. |
|---|
| 3663 | 3783 | } |
|---|
| 3664 | 3784 | } |
|---|
| 3665 | 3785 | .navbar-collapse { |
|---|
| 3666 | | - max-height: 340px; |
|---|
| 3667 | 3786 | padding-right: 15px; |
|---|
| 3668 | 3787 | padding-left: 15px; |
|---|
| 3669 | 3788 | overflow-x: visible; |
|---|
| 3670 | 3789 | -webkit-overflow-scrolling: touch; |
|---|
| 3671 | 3790 | 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); |
|---|
| 3673 | 3793 | } |
|---|
| 3674 | 3794 | .navbar-collapse.in { |
|---|
| 3675 | 3795 | overflow-y: auto; |
|---|
| .. | .. |
|---|
| 3678 | 3798 | .navbar-collapse { |
|---|
| 3679 | 3799 | width: auto; |
|---|
| 3680 | 3800 | border-top: 0; |
|---|
| 3681 | | - box-shadow: none; |
|---|
| 3801 | + -webkit-box-shadow: none; |
|---|
| 3802 | + box-shadow: none; |
|---|
| 3682 | 3803 | } |
|---|
| 3683 | 3804 | .navbar-collapse.collapse { |
|---|
| 3684 | 3805 | display: block !important; |
|---|
| .. | .. |
|---|
| 3694 | 3815 | .navbar-fixed-bottom .navbar-collapse { |
|---|
| 3695 | 3816 | padding-right: 0; |
|---|
| 3696 | 3817 | 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; |
|---|
| 3697 | 3828 | } |
|---|
| 3698 | 3829 | } |
|---|
| 3699 | 3830 | .container > .navbar-header, |
|---|
| .. | .. |
|---|
| 3727 | 3858 | right: 0; |
|---|
| 3728 | 3859 | left: 0; |
|---|
| 3729 | 3860 | z-index: 1030; |
|---|
| 3861 | + -webkit-transform: translate3d(0, 0, 0); |
|---|
| 3862 | + -o-transform: translate3d(0, 0, 0); |
|---|
| 3863 | + transform: translate3d(0, 0, 0); |
|---|
| 3730 | 3864 | } |
|---|
| 3731 | 3865 | @media (min-width: 768px) { |
|---|
| 3732 | 3866 | .navbar-fixed-top, |
|---|
| .. | .. |
|---|
| 3745 | 3879 | } |
|---|
| 3746 | 3880 | .navbar-brand { |
|---|
| 3747 | 3881 | float: left; |
|---|
| 3748 | | - height: 20px; |
|---|
| 3882 | + height: 50px; |
|---|
| 3749 | 3883 | padding: 15px 15px; |
|---|
| 3750 | 3884 | font-size: 18px; |
|---|
| 3751 | 3885 | line-height: 20px; |
|---|
| .. | .. |
|---|
| 3773 | 3907 | border-radius: 4px; |
|---|
| 3774 | 3908 | } |
|---|
| 3775 | 3909 | .navbar-toggle:focus { |
|---|
| 3776 | | - outline: none; |
|---|
| 3910 | + outline: 0; |
|---|
| 3777 | 3911 | } |
|---|
| 3778 | 3912 | .navbar-toggle .icon-bar { |
|---|
| 3779 | 3913 | display: block; |
|---|
| .. | .. |
|---|
| 3805 | 3939 | margin-top: 0; |
|---|
| 3806 | 3940 | background-color: transparent; |
|---|
| 3807 | 3941 | border: 0; |
|---|
| 3808 | | - box-shadow: none; |
|---|
| 3942 | + -webkit-box-shadow: none; |
|---|
| 3943 | + box-shadow: none; |
|---|
| 3809 | 3944 | } |
|---|
| 3810 | 3945 | .navbar-nav .open .dropdown-menu > li > a, |
|---|
| 3811 | 3946 | .navbar-nav .open .dropdown-menu .dropdown-header { |
|---|
| .. | .. |
|---|
| 3865 | 4000 | width: auto; |
|---|
| 3866 | 4001 | vertical-align: middle; |
|---|
| 3867 | 4002 | } |
|---|
| 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 | + } |
|---|
| 3868 | 4015 | .navbar-form .control-label { |
|---|
| 3869 | 4016 | margin-bottom: 0; |
|---|
| 3870 | 4017 | vertical-align: middle; |
|---|
| .. | .. |
|---|
| 3872 | 4019 | .navbar-form .radio, |
|---|
| 3873 | 4020 | .navbar-form .checkbox { |
|---|
| 3874 | 4021 | display: inline-block; |
|---|
| 3875 | | - padding-left: 0; |
|---|
| 3876 | 4022 | margin-top: 0; |
|---|
| 3877 | 4023 | margin-bottom: 0; |
|---|
| 3878 | 4024 | vertical-align: middle; |
|---|
| 3879 | 4025 | } |
|---|
| 4026 | + .navbar-form .radio label, |
|---|
| 4027 | + .navbar-form .checkbox label { |
|---|
| 4028 | + padding-left: 0; |
|---|
| 4029 | + } |
|---|
| 3880 | 4030 | .navbar-form .radio input[type="radio"], |
|---|
| 3881 | 4031 | .navbar-form .checkbox input[type="checkbox"] { |
|---|
| 3882 | | - float: none; |
|---|
| 4032 | + position: relative; |
|---|
| 3883 | 4033 | margin-left: 0; |
|---|
| 3884 | 4034 | } |
|---|
| 3885 | 4035 | .navbar-form .has-feedback .form-control-feedback { |
|---|
| .. | .. |
|---|
| 4024 | 4174 | .navbar-default .navbar-link:hover { |
|---|
| 4025 | 4175 | color: #333; |
|---|
| 4026 | 4176 | } |
|---|
| 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 | +} |
|---|
| 4027 | 4190 | .navbar-inverse { |
|---|
| 4028 | 4191 | background-color: #222; |
|---|
| 4029 | 4192 | border-color: #080808; |
|---|
| 4030 | 4193 | } |
|---|
| 4031 | 4194 | .navbar-inverse .navbar-brand { |
|---|
| 4032 | | - color: #999; |
|---|
| 4195 | + color: #777; |
|---|
| 4033 | 4196 | } |
|---|
| 4034 | 4197 | .navbar-inverse .navbar-brand:hover, |
|---|
| 4035 | 4198 | .navbar-inverse .navbar-brand:focus { |
|---|
| .. | .. |
|---|
| 4037 | 4200 | background-color: transparent; |
|---|
| 4038 | 4201 | } |
|---|
| 4039 | 4202 | .navbar-inverse .navbar-text { |
|---|
| 4040 | | - color: #999; |
|---|
| 4203 | + color: #777; |
|---|
| 4041 | 4204 | } |
|---|
| 4042 | 4205 | .navbar-inverse .navbar-nav > li > a { |
|---|
| 4043 | | - color: #999; |
|---|
| 4206 | + color: #777; |
|---|
| 4044 | 4207 | } |
|---|
| 4045 | 4208 | .navbar-inverse .navbar-nav > li > a:hover, |
|---|
| 4046 | 4209 | .navbar-inverse .navbar-nav > li > a:focus { |
|---|
| .. | .. |
|---|
| 4087 | 4250 | background-color: #080808; |
|---|
| 4088 | 4251 | } |
|---|
| 4089 | 4252 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { |
|---|
| 4090 | | - color: #999; |
|---|
| 4253 | + color: #777; |
|---|
| 4091 | 4254 | } |
|---|
| 4092 | 4255 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, |
|---|
| 4093 | 4256 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { |
|---|
| .. | .. |
|---|
| 4108 | 4271 | } |
|---|
| 4109 | 4272 | } |
|---|
| 4110 | 4273 | .navbar-inverse .navbar-link { |
|---|
| 4111 | | - color: #999; |
|---|
| 4274 | + color: #777; |
|---|
| 4112 | 4275 | } |
|---|
| 4113 | 4276 | .navbar-inverse .navbar-link:hover { |
|---|
| 4114 | 4277 | 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; |
|---|
| 4115 | 4291 | } |
|---|
| 4116 | 4292 | .breadcrumb { |
|---|
| 4117 | 4293 | padding: 8px 15px; |
|---|
| .. | .. |
|---|
| 4129 | 4305 | content: "/\00a0"; |
|---|
| 4130 | 4306 | } |
|---|
| 4131 | 4307 | .breadcrumb > .active { |
|---|
| 4132 | | - color: #999; |
|---|
| 4308 | + color: #777; |
|---|
| 4133 | 4309 | } |
|---|
| 4134 | 4310 | .pagination { |
|---|
| 4135 | 4311 | display: inline-block; |
|---|
| .. | .. |
|---|
| 4146 | 4322 | float: left; |
|---|
| 4147 | 4323 | padding: 6px 12px; |
|---|
| 4148 | 4324 | margin-left: -1px; |
|---|
| 4149 | | - line-height: 1.428571429; |
|---|
| 4325 | + line-height: 1.42857143; |
|---|
| 4150 | 4326 | color: #428bca; |
|---|
| 4151 | 4327 | text-decoration: none; |
|---|
| 4152 | 4328 | background-color: #fff; |
|---|
| .. | .. |
|---|
| 4189 | 4365 | .pagination > .disabled > a, |
|---|
| 4190 | 4366 | .pagination > .disabled > a:hover, |
|---|
| 4191 | 4367 | .pagination > .disabled > a:focus { |
|---|
| 4192 | | - color: #999; |
|---|
| 4368 | + color: #777; |
|---|
| 4193 | 4369 | cursor: not-allowed; |
|---|
| 4194 | 4370 | background-color: #fff; |
|---|
| 4195 | 4371 | border-color: #ddd; |
|---|
| .. | .. |
|---|
| 4258 | 4434 | .pager .disabled > a:hover, |
|---|
| 4259 | 4435 | .pager .disabled > a:focus, |
|---|
| 4260 | 4436 | .pager .disabled > span { |
|---|
| 4261 | | - color: #999; |
|---|
| 4437 | + color: #777; |
|---|
| 4262 | 4438 | cursor: not-allowed; |
|---|
| 4263 | 4439 | background-color: #fff; |
|---|
| 4264 | 4440 | } |
|---|
| .. | .. |
|---|
| 4274 | 4450 | vertical-align: baseline; |
|---|
| 4275 | 4451 | border-radius: .25em; |
|---|
| 4276 | 4452 | } |
|---|
| 4277 | | -.label[href]:hover, |
|---|
| 4278 | | -.label[href]:focus { |
|---|
| 4453 | +a.label:hover, |
|---|
| 4454 | +a.label:focus { |
|---|
| 4279 | 4455 | color: #fff; |
|---|
| 4280 | 4456 | text-decoration: none; |
|---|
| 4281 | 4457 | cursor: pointer; |
|---|
| .. | .. |
|---|
| 4288 | 4464 | top: -1px; |
|---|
| 4289 | 4465 | } |
|---|
| 4290 | 4466 | .label-default { |
|---|
| 4291 | | - background-color: #999; |
|---|
| 4467 | + background-color: #777; |
|---|
| 4292 | 4468 | } |
|---|
| 4293 | 4469 | .label-default[href]:hover, |
|---|
| 4294 | 4470 | .label-default[href]:focus { |
|---|
| 4295 | | - background-color: #808080; |
|---|
| 4471 | + background-color: #5e5e5e; |
|---|
| 4296 | 4472 | } |
|---|
| 4297 | 4473 | .label-primary { |
|---|
| 4298 | 4474 | background-color: #428bca; |
|---|
| .. | .. |
|---|
| 4340 | 4516 | text-align: center; |
|---|
| 4341 | 4517 | white-space: nowrap; |
|---|
| 4342 | 4518 | vertical-align: baseline; |
|---|
| 4343 | | - background-color: #999; |
|---|
| 4519 | + background-color: #777; |
|---|
| 4344 | 4520 | border-radius: 10px; |
|---|
| 4345 | 4521 | } |
|---|
| 4346 | 4522 | .badge:empty { |
|---|
| .. | .. |
|---|
| 4383 | 4559 | font-size: 21px; |
|---|
| 4384 | 4560 | font-weight: 200; |
|---|
| 4385 | 4561 | } |
|---|
| 4562 | +.jumbotron > hr { |
|---|
| 4563 | + border-top-color: #d5d5d5; |
|---|
| 4564 | +} |
|---|
| 4386 | 4565 | .container .jumbotron { |
|---|
| 4387 | 4566 | border-radius: 6px; |
|---|
| 4388 | 4567 | } |
|---|
| .. | .. |
|---|
| 4407 | 4586 | display: block; |
|---|
| 4408 | 4587 | padding: 4px; |
|---|
| 4409 | 4588 | margin-bottom: 20px; |
|---|
| 4410 | | - line-height: 1.428571429; |
|---|
| 4589 | + line-height: 1.42857143; |
|---|
| 4411 | 4590 | background-color: #fff; |
|---|
| 4412 | 4591 | border: 1px solid #ddd; |
|---|
| 4413 | 4592 | border-radius: 4px; |
|---|
| 4414 | 4593 | -webkit-transition: all .2s ease-in-out; |
|---|
| 4594 | + -o-transition: all .2s ease-in-out; |
|---|
| 4415 | 4595 | transition: all .2s ease-in-out; |
|---|
| 4416 | 4596 | } |
|---|
| 4417 | 4597 | .thumbnail > img, |
|---|
| 4418 | 4598 | .thumbnail a > img { |
|---|
| 4419 | | - display: block; |
|---|
| 4420 | | - max-width: 100%; |
|---|
| 4421 | | - height: auto; |
|---|
| 4422 | 4599 | margin-right: auto; |
|---|
| 4423 | 4600 | margin-left: auto; |
|---|
| 4424 | 4601 | } |
|---|
| .. | .. |
|---|
| 4451 | 4628 | .alert > p + p { |
|---|
| 4452 | 4629 | margin-top: 5px; |
|---|
| 4453 | 4630 | } |
|---|
| 4454 | | -.alert-dismissable { |
|---|
| 4631 | +.alert-dismissable, |
|---|
| 4632 | +.alert-dismissible { |
|---|
| 4455 | 4633 | padding-right: 35px; |
|---|
| 4456 | 4634 | } |
|---|
| 4457 | | -.alert-dismissable .close { |
|---|
| 4635 | +.alert-dismissable .close, |
|---|
| 4636 | +.alert-dismissible .close { |
|---|
| 4458 | 4637 | position: relative; |
|---|
| 4459 | 4638 | top: -2px; |
|---|
| 4460 | 4639 | right: -21px; |
|---|
| .. | .. |
|---|
| 4512 | 4691 | background-position: 0 0; |
|---|
| 4513 | 4692 | } |
|---|
| 4514 | 4693 | } |
|---|
| 4694 | +@-o-keyframes progress-bar-stripes { |
|---|
| 4695 | + from { |
|---|
| 4696 | + background-position: 40px 0; |
|---|
| 4697 | + } |
|---|
| 4698 | + to { |
|---|
| 4699 | + background-position: 0 0; |
|---|
| 4700 | + } |
|---|
| 4701 | +} |
|---|
| 4515 | 4702 | @keyframes progress-bar-stripes { |
|---|
| 4516 | 4703 | from { |
|---|
| 4517 | 4704 | background-position: 40px 0; |
|---|
| .. | .. |
|---|
| 4541 | 4728 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); |
|---|
| 4542 | 4729 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); |
|---|
| 4543 | 4730 | -webkit-transition: width .6s ease; |
|---|
| 4731 | + -o-transition: width .6s ease; |
|---|
| 4544 | 4732 | transition: width .6s ease; |
|---|
| 4545 | 4733 | } |
|---|
| 4546 | | -.progress-striped .progress-bar { |
|---|
| 4734 | +.progress-striped .progress-bar, |
|---|
| 4735 | +.progress-bar-striped { |
|---|
| 4547 | 4736 | 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); |
|---|
| 4548 | 4738 | 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; |
|---|
| 4550 | 4741 | } |
|---|
| 4551 | | -.progress.active .progress-bar { |
|---|
| 4742 | +.progress.active .progress-bar, |
|---|
| 4743 | +.progress-bar.active { |
|---|
| 4552 | 4744 | -webkit-animation: progress-bar-stripes 2s linear infinite; |
|---|
| 4745 | + -o-animation: progress-bar-stripes 2s linear infinite; |
|---|
| 4553 | 4746 | 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; |
|---|
| 4554 | 4759 | } |
|---|
| 4555 | 4760 | .progress-bar-success { |
|---|
| 4556 | 4761 | background-color: #5cb85c; |
|---|
| 4557 | 4762 | } |
|---|
| 4558 | 4763 | .progress-striped .progress-bar-success { |
|---|
| 4559 | 4764 | 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); |
|---|
| 4560 | 4766 | 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); |
|---|
| 4561 | 4767 | } |
|---|
| 4562 | 4768 | .progress-bar-info { |
|---|
| .. | .. |
|---|
| 4564 | 4770 | } |
|---|
| 4565 | 4771 | .progress-striped .progress-bar-info { |
|---|
| 4566 | 4772 | 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); |
|---|
| 4567 | 4774 | 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); |
|---|
| 4568 | 4775 | } |
|---|
| 4569 | 4776 | .progress-bar-warning { |
|---|
| .. | .. |
|---|
| 4571 | 4778 | } |
|---|
| 4572 | 4779 | .progress-striped .progress-bar-warning { |
|---|
| 4573 | 4780 | 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); |
|---|
| 4574 | 4782 | 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); |
|---|
| 4575 | 4783 | } |
|---|
| 4576 | 4784 | .progress-bar-danger { |
|---|
| .. | .. |
|---|
| 4578 | 4786 | } |
|---|
| 4579 | 4787 | .progress-striped .progress-bar-danger { |
|---|
| 4580 | 4788 | 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); |
|---|
| 4581 | 4790 | 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); |
|---|
| 4582 | 4791 | } |
|---|
| 4583 | 4792 | .media, |
|---|
| .. | .. |
|---|
| 4643 | 4852 | } |
|---|
| 4644 | 4853 | a.list-group-item:hover, |
|---|
| 4645 | 4854 | a.list-group-item:focus { |
|---|
| 4855 | + color: #555; |
|---|
| 4646 | 4856 | text-decoration: none; |
|---|
| 4647 | 4857 | background-color: #f5f5f5; |
|---|
| 4648 | 4858 | } |
|---|
| 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 { |
|---|
| 4652 | 4878 | z-index: 2; |
|---|
| 4653 | 4879 | color: #fff; |
|---|
| 4654 | 4880 | background-color: #428bca; |
|---|
| 4655 | 4881 | border-color: #428bca; |
|---|
| 4656 | 4882 | } |
|---|
| 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 { |
|---|
| 4660 | 4892 | color: inherit; |
|---|
| 4661 | 4893 | } |
|---|
| 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 { |
|---|
| 4665 | 4897 | color: #e1edf7; |
|---|
| 4666 | 4898 | } |
|---|
| 4667 | 4899 | .list-group-item-success { |
|---|
| .. | .. |
|---|
| 4771 | 5003 | .panel-body { |
|---|
| 4772 | 5004 | padding: 15px; |
|---|
| 4773 | 5005 | } |
|---|
| 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 | +} |
|---|
| 4774 | 5031 | .panel > .list-group { |
|---|
| 4775 | 5032 | margin-bottom: 0; |
|---|
| 4776 | 5033 | } |
|---|
| .. | .. |
|---|
| 4778 | 5035 | border-width: 1px 0; |
|---|
| 4779 | 5036 | border-radius: 0; |
|---|
| 4780 | 5037 | } |
|---|
| 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 | | -} |
|---|
| 4787 | 5038 | .panel > .list-group:first-child .list-group-item:first-child { |
|---|
| 5039 | + border-top: 0; |
|---|
| 4788 | 5040 | border-top-left-radius: 3px; |
|---|
| 4789 | 5041 | border-top-right-radius: 3px; |
|---|
| 4790 | 5042 | } |
|---|
| 4791 | 5043 | .panel > .list-group:last-child .list-group-item:last-child { |
|---|
| 5044 | + border-bottom: 0; |
|---|
| 4792 | 5045 | border-bottom-right-radius: 3px; |
|---|
| 4793 | 5046 | border-bottom-left-radius: 3px; |
|---|
| 4794 | 5047 | } |
|---|
| 4795 | 5048 | .panel-heading + .list-group .list-group-item:first-child { |
|---|
| 4796 | 5049 | border-top-width: 0; |
|---|
| 4797 | 5050 | } |
|---|
| 5051 | +.list-group + .panel-footer { |
|---|
| 5052 | + border-top-width: 0; |
|---|
| 5053 | +} |
|---|
| 4798 | 5054 | .panel > .table, |
|---|
| 4799 | | -.panel > .table-responsive > .table { |
|---|
| 5055 | +.panel > .table-responsive > .table, |
|---|
| 5056 | +.panel > .panel-collapse > .table { |
|---|
| 4800 | 5057 | 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; |
|---|
| 4801 | 5063 | } |
|---|
| 4802 | 5064 | .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, |
|---|
| 4803 | 5065 | .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, |
|---|
| .. | .. |
|---|
| 4818 | 5080 | .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, |
|---|
| 4819 | 5081 | .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { |
|---|
| 4820 | 5082 | 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; |
|---|
| 4821 | 5088 | } |
|---|
| 4822 | 5089 | .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, |
|---|
| 4823 | 5090 | .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, |
|---|
| .. | .. |
|---|
| 4879 | 5146 | .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { |
|---|
| 4880 | 5147 | border-right: 0; |
|---|
| 4881 | 5148 | } |
|---|
| 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, |
|---|
| 4888 | 5149 | .panel > .table-bordered > thead > tr:first-child > td, |
|---|
| 4889 | 5150 | .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, |
|---|
| 4890 | 5151 | .panel > .table-bordered > tbody > tr:first-child > td, |
|---|
| 4891 | 5152 | .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; |
|---|
| 4895 | 5158 | } |
|---|
| 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, |
|---|
| 4904 | 5159 | .panel > .table-bordered > tbody > tr:last-child > td, |
|---|
| 4905 | 5160 | .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, |
|---|
| 4906 | 5161 | .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 { |
|---|
| 4908 | 5167 | border-bottom: 0; |
|---|
| 4909 | 5168 | } |
|---|
| 4910 | 5169 | .panel > .table-responsive { |
|---|
| 4911 | 5170 | margin-bottom: 0; |
|---|
| 4912 | 5171 | border: 0; |
|---|
| 4913 | 5172 | } |
|---|
| 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 | | -} |
|---|
| 4939 | 5173 | .panel-group { |
|---|
| 4940 | 5174 | margin-bottom: 20px; |
|---|
| 4941 | 5175 | } |
|---|
| 4942 | 5176 | .panel-group .panel { |
|---|
| 4943 | 5177 | margin-bottom: 0; |
|---|
| 4944 | | - overflow: hidden; |
|---|
| 4945 | 5178 | border-radius: 4px; |
|---|
| 4946 | 5179 | } |
|---|
| 4947 | 5180 | .panel-group .panel + .panel { |
|---|
| .. | .. |
|---|
| 4950 | 5183 | .panel-group .panel-heading { |
|---|
| 4951 | 5184 | border-bottom: 0; |
|---|
| 4952 | 5185 | } |
|---|
| 4953 | | -.panel-group .panel-heading + .panel-collapse .panel-body { |
|---|
| 5186 | +.panel-group .panel-heading + .panel-collapse > .panel-body { |
|---|
| 4954 | 5187 | border-top: 1px solid #ddd; |
|---|
| 4955 | 5188 | } |
|---|
| 4956 | 5189 | .panel-group .panel-footer { |
|---|
| .. | .. |
|---|
| 4967 | 5200 | background-color: #f5f5f5; |
|---|
| 4968 | 5201 | border-color: #ddd; |
|---|
| 4969 | 5202 | } |
|---|
| 4970 | | -.panel-default > .panel-heading + .panel-collapse .panel-body { |
|---|
| 5203 | +.panel-default > .panel-heading + .panel-collapse > .panel-body { |
|---|
| 4971 | 5204 | border-top-color: #ddd; |
|---|
| 4972 | 5205 | } |
|---|
| 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 { |
|---|
| 4974 | 5211 | border-bottom-color: #ddd; |
|---|
| 4975 | 5212 | } |
|---|
| 4976 | 5213 | .panel-primary { |
|---|
| .. | .. |
|---|
| 4981 | 5218 | background-color: #428bca; |
|---|
| 4982 | 5219 | border-color: #428bca; |
|---|
| 4983 | 5220 | } |
|---|
| 4984 | | -.panel-primary > .panel-heading + .panel-collapse .panel-body { |
|---|
| 5221 | +.panel-primary > .panel-heading + .panel-collapse > .panel-body { |
|---|
| 4985 | 5222 | border-top-color: #428bca; |
|---|
| 4986 | 5223 | } |
|---|
| 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 { |
|---|
| 4988 | 5229 | border-bottom-color: #428bca; |
|---|
| 4989 | 5230 | } |
|---|
| 4990 | 5231 | .panel-success { |
|---|
| .. | .. |
|---|
| 4995 | 5236 | background-color: #dff0d8; |
|---|
| 4996 | 5237 | border-color: #d6e9c6; |
|---|
| 4997 | 5238 | } |
|---|
| 4998 | | -.panel-success > .panel-heading + .panel-collapse .panel-body { |
|---|
| 5239 | +.panel-success > .panel-heading + .panel-collapse > .panel-body { |
|---|
| 4999 | 5240 | border-top-color: #d6e9c6; |
|---|
| 5000 | 5241 | } |
|---|
| 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 { |
|---|
| 5002 | 5247 | border-bottom-color: #d6e9c6; |
|---|
| 5003 | 5248 | } |
|---|
| 5004 | 5249 | .panel-info { |
|---|
| .. | .. |
|---|
| 5009 | 5254 | background-color: #d9edf7; |
|---|
| 5010 | 5255 | border-color: #bce8f1; |
|---|
| 5011 | 5256 | } |
|---|
| 5012 | | -.panel-info > .panel-heading + .panel-collapse .panel-body { |
|---|
| 5257 | +.panel-info > .panel-heading + .panel-collapse > .panel-body { |
|---|
| 5013 | 5258 | border-top-color: #bce8f1; |
|---|
| 5014 | 5259 | } |
|---|
| 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 { |
|---|
| 5016 | 5265 | border-bottom-color: #bce8f1; |
|---|
| 5017 | 5266 | } |
|---|
| 5018 | 5267 | .panel-warning { |
|---|
| .. | .. |
|---|
| 5023 | 5272 | background-color: #fcf8e3; |
|---|
| 5024 | 5273 | border-color: #faebcc; |
|---|
| 5025 | 5274 | } |
|---|
| 5026 | | -.panel-warning > .panel-heading + .panel-collapse .panel-body { |
|---|
| 5275 | +.panel-warning > .panel-heading + .panel-collapse > .panel-body { |
|---|
| 5027 | 5276 | border-top-color: #faebcc; |
|---|
| 5028 | 5277 | } |
|---|
| 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 { |
|---|
| 5030 | 5283 | border-bottom-color: #faebcc; |
|---|
| 5031 | 5284 | } |
|---|
| 5032 | 5285 | .panel-danger { |
|---|
| .. | .. |
|---|
| 5037 | 5290 | background-color: #f2dede; |
|---|
| 5038 | 5291 | border-color: #ebccd1; |
|---|
| 5039 | 5292 | } |
|---|
| 5040 | | -.panel-danger > .panel-heading + .panel-collapse .panel-body { |
|---|
| 5293 | +.panel-danger > .panel-heading + .panel-collapse > .panel-body { |
|---|
| 5041 | 5294 | border-top-color: #ebccd1; |
|---|
| 5042 | 5295 | } |
|---|
| 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 { |
|---|
| 5044 | 5301 | 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%; |
|---|
| 5045 | 5327 | } |
|---|
| 5046 | 5328 | .well { |
|---|
| 5047 | 5329 | min-height: 20px; |
|---|
| .. | .. |
|---|
| 5101 | 5383 | left: 0; |
|---|
| 5102 | 5384 | z-index: 1050; |
|---|
| 5103 | 5385 | display: none; |
|---|
| 5104 | | - overflow: auto; |
|---|
| 5105 | | - overflow-y: scroll; |
|---|
| 5386 | + overflow: hidden; |
|---|
| 5106 | 5387 | -webkit-overflow-scrolling: touch; |
|---|
| 5107 | 5388 | outline: 0; |
|---|
| 5108 | 5389 | } |
|---|
| 5109 | 5390 | .modal.fade .modal-dialog { |
|---|
| 5110 | 5391 | -webkit-transition: -webkit-transform .3s ease-out; |
|---|
| 5111 | | - -moz-transition: -moz-transform .3s ease-out; |
|---|
| 5112 | 5392 | -o-transition: -o-transform .3s ease-out; |
|---|
| 5113 | 5393 | 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); |
|---|
| 5117 | 5397 | } |
|---|
| 5118 | 5398 | .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; |
|---|
| 5122 | 5406 | } |
|---|
| 5123 | 5407 | .modal-dialog { |
|---|
| 5124 | 5408 | position: relative; |
|---|
| .. | .. |
|---|
| 5128 | 5412 | .modal-content { |
|---|
| 5129 | 5413 | position: relative; |
|---|
| 5130 | 5414 | background-color: #fff; |
|---|
| 5131 | | - background-clip: padding-box; |
|---|
| 5415 | + -webkit-background-clip: padding-box; |
|---|
| 5416 | + background-clip: padding-box; |
|---|
| 5132 | 5417 | border: 1px solid #999; |
|---|
| 5133 | 5418 | border: 1px solid rgba(0, 0, 0, .2); |
|---|
| 5134 | 5419 | border-radius: 6px; |
|---|
| 5135 | | - outline: none; |
|---|
| 5420 | + outline: 0; |
|---|
| 5136 | 5421 | -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); |
|---|
| 5137 | 5422 | box-shadow: 0 3px 9px rgba(0, 0, 0, .5); |
|---|
| 5138 | 5423 | } |
|---|
| .. | .. |
|---|
| 5154 | 5439 | opacity: .5; |
|---|
| 5155 | 5440 | } |
|---|
| 5156 | 5441 | .modal-header { |
|---|
| 5157 | | - min-height: 16.428571429px; |
|---|
| 5442 | + min-height: 16.42857143px; |
|---|
| 5158 | 5443 | padding: 15px; |
|---|
| 5159 | 5444 | border-bottom: 1px solid #e5e5e5; |
|---|
| 5160 | 5445 | } |
|---|
| .. | .. |
|---|
| 5163 | 5448 | } |
|---|
| 5164 | 5449 | .modal-title { |
|---|
| 5165 | 5450 | margin: 0; |
|---|
| 5166 | | - line-height: 1.428571429; |
|---|
| 5451 | + line-height: 1.42857143; |
|---|
| 5167 | 5452 | } |
|---|
| 5168 | 5453 | .modal-body { |
|---|
| 5169 | 5454 | position: relative; |
|---|
| 5170 | | - padding: 20px; |
|---|
| 5455 | + padding: 15px; |
|---|
| 5171 | 5456 | } |
|---|
| 5172 | 5457 | .modal-footer { |
|---|
| 5173 | | - padding: 19px 20px 20px; |
|---|
| 5174 | | - margin-top: 15px; |
|---|
| 5458 | + padding: 15px; |
|---|
| 5175 | 5459 | text-align: right; |
|---|
| 5176 | 5460 | border-top: 1px solid #e5e5e5; |
|---|
| 5177 | 5461 | } |
|---|
| .. | .. |
|---|
| 5185 | 5469 | .modal-footer .btn-block + .btn-block { |
|---|
| 5186 | 5470 | margin-left: 0; |
|---|
| 5187 | 5471 | } |
|---|
| 5472 | +.modal-scrollbar-measure { |
|---|
| 5473 | + position: absolute; |
|---|
| 5474 | + top: -9999px; |
|---|
| 5475 | + width: 50px; |
|---|
| 5476 | + height: 50px; |
|---|
| 5477 | + overflow: scroll; |
|---|
| 5478 | +} |
|---|
| 5188 | 5479 | @media (min-width: 768px) { |
|---|
| 5189 | 5480 | .modal-dialog { |
|---|
| 5190 | 5481 | width: 600px; |
|---|
| .. | .. |
|---|
| 5197 | 5488 | .modal-sm { |
|---|
| 5198 | 5489 | width: 300px; |
|---|
| 5199 | 5490 | } |
|---|
| 5491 | +} |
|---|
| 5492 | +@media (min-width: 992px) { |
|---|
| 5200 | 5493 | .modal-lg { |
|---|
| 5201 | 5494 | width: 900px; |
|---|
| 5202 | 5495 | } |
|---|
| 5203 | 5496 | } |
|---|
| 5204 | 5497 | .tooltip { |
|---|
| 5205 | 5498 | position: absolute; |
|---|
| 5206 | | - z-index: 1030; |
|---|
| 5499 | + z-index: 1070; |
|---|
| 5207 | 5500 | display: block; |
|---|
| 5208 | 5501 | font-size: 12px; |
|---|
| 5209 | 5502 | line-height: 1.4; |
|---|
| .. | .. |
|---|
| 5303 | 5596 | position: absolute; |
|---|
| 5304 | 5597 | top: 0; |
|---|
| 5305 | 5598 | left: 0; |
|---|
| 5306 | | - z-index: 1010; |
|---|
| 5599 | + z-index: 1060; |
|---|
| 5307 | 5600 | display: none; |
|---|
| 5308 | 5601 | max-width: 276px; |
|---|
| 5309 | 5602 | padding: 1px; |
|---|
| 5310 | 5603 | text-align: left; |
|---|
| 5311 | 5604 | white-space: normal; |
|---|
| 5312 | 5605 | background-color: #fff; |
|---|
| 5313 | | - background-clip: padding-box; |
|---|
| 5606 | + -webkit-background-clip: padding-box; |
|---|
| 5607 | + background-clip: padding-box; |
|---|
| 5314 | 5608 | border: 1px solid #ccc; |
|---|
| 5315 | 5609 | border: 1px solid rgba(0, 0, 0, .2); |
|---|
| 5316 | 5610 | border-radius: 6px; |
|---|
| .. | .. |
|---|
| 5342 | 5636 | .popover-content { |
|---|
| 5343 | 5637 | padding: 9px 14px; |
|---|
| 5344 | 5638 | } |
|---|
| 5345 | | -.popover .arrow, |
|---|
| 5346 | | -.popover .arrow:after { |
|---|
| 5639 | +.popover > .arrow, |
|---|
| 5640 | +.popover > .arrow:after { |
|---|
| 5347 | 5641 | position: absolute; |
|---|
| 5348 | 5642 | display: block; |
|---|
| 5349 | 5643 | width: 0; |
|---|
| .. | .. |
|---|
| 5351 | 5645 | border-color: transparent; |
|---|
| 5352 | 5646 | border-style: solid; |
|---|
| 5353 | 5647 | } |
|---|
| 5354 | | -.popover .arrow { |
|---|
| 5648 | +.popover > .arrow { |
|---|
| 5355 | 5649 | border-width: 11px; |
|---|
| 5356 | 5650 | } |
|---|
| 5357 | | -.popover .arrow:after { |
|---|
| 5651 | +.popover > .arrow:after { |
|---|
| 5358 | 5652 | content: ""; |
|---|
| 5359 | 5653 | border-width: 10px; |
|---|
| 5360 | 5654 | } |
|---|
| 5361 | | -.popover.top .arrow { |
|---|
| 5655 | +.popover.top > .arrow { |
|---|
| 5362 | 5656 | bottom: -11px; |
|---|
| 5363 | 5657 | left: 50%; |
|---|
| 5364 | 5658 | margin-left: -11px; |
|---|
| .. | .. |
|---|
| 5366 | 5660 | border-top-color: rgba(0, 0, 0, .25); |
|---|
| 5367 | 5661 | border-bottom-width: 0; |
|---|
| 5368 | 5662 | } |
|---|
| 5369 | | -.popover.top .arrow:after { |
|---|
| 5663 | +.popover.top > .arrow:after { |
|---|
| 5370 | 5664 | bottom: 1px; |
|---|
| 5371 | 5665 | margin-left: -10px; |
|---|
| 5372 | 5666 | content: " "; |
|---|
| 5373 | 5667 | border-top-color: #fff; |
|---|
| 5374 | 5668 | border-bottom-width: 0; |
|---|
| 5375 | 5669 | } |
|---|
| 5376 | | -.popover.right .arrow { |
|---|
| 5670 | +.popover.right > .arrow { |
|---|
| 5377 | 5671 | top: 50%; |
|---|
| 5378 | 5672 | left: -11px; |
|---|
| 5379 | 5673 | margin-top: -11px; |
|---|
| .. | .. |
|---|
| 5381 | 5675 | border-right-color: rgba(0, 0, 0, .25); |
|---|
| 5382 | 5676 | border-left-width: 0; |
|---|
| 5383 | 5677 | } |
|---|
| 5384 | | -.popover.right .arrow:after { |
|---|
| 5678 | +.popover.right > .arrow:after { |
|---|
| 5385 | 5679 | bottom: -10px; |
|---|
| 5386 | 5680 | left: 1px; |
|---|
| 5387 | 5681 | content: " "; |
|---|
| 5388 | 5682 | border-right-color: #fff; |
|---|
| 5389 | 5683 | border-left-width: 0; |
|---|
| 5390 | 5684 | } |
|---|
| 5391 | | -.popover.bottom .arrow { |
|---|
| 5685 | +.popover.bottom > .arrow { |
|---|
| 5392 | 5686 | top: -11px; |
|---|
| 5393 | 5687 | left: 50%; |
|---|
| 5394 | 5688 | margin-left: -11px; |
|---|
| .. | .. |
|---|
| 5396 | 5690 | border-bottom-color: #999; |
|---|
| 5397 | 5691 | border-bottom-color: rgba(0, 0, 0, .25); |
|---|
| 5398 | 5692 | } |
|---|
| 5399 | | -.popover.bottom .arrow:after { |
|---|
| 5693 | +.popover.bottom > .arrow:after { |
|---|
| 5400 | 5694 | top: 1px; |
|---|
| 5401 | 5695 | margin-left: -10px; |
|---|
| 5402 | 5696 | content: " "; |
|---|
| 5403 | 5697 | border-top-width: 0; |
|---|
| 5404 | 5698 | border-bottom-color: #fff; |
|---|
| 5405 | 5699 | } |
|---|
| 5406 | | -.popover.left .arrow { |
|---|
| 5700 | +.popover.left > .arrow { |
|---|
| 5407 | 5701 | top: 50%; |
|---|
| 5408 | 5702 | right: -11px; |
|---|
| 5409 | 5703 | margin-top: -11px; |
|---|
| .. | .. |
|---|
| 5411 | 5705 | border-left-color: #999; |
|---|
| 5412 | 5706 | border-left-color: rgba(0, 0, 0, .25); |
|---|
| 5413 | 5707 | } |
|---|
| 5414 | | -.popover.left .arrow:after { |
|---|
| 5708 | +.popover.left > .arrow:after { |
|---|
| 5415 | 5709 | right: 1px; |
|---|
| 5416 | 5710 | bottom: -10px; |
|---|
| 5417 | 5711 | content: " "; |
|---|
| .. | .. |
|---|
| 5430 | 5724 | position: relative; |
|---|
| 5431 | 5725 | display: none; |
|---|
| 5432 | 5726 | -webkit-transition: .6s ease-in-out left; |
|---|
| 5727 | + -o-transition: .6s ease-in-out left; |
|---|
| 5433 | 5728 | transition: .6s ease-in-out left; |
|---|
| 5434 | 5729 | } |
|---|
| 5435 | 5730 | .carousel-inner > .item > img, |
|---|
| 5436 | 5731 | .carousel-inner > .item > a > img { |
|---|
| 5437 | | - display: block; |
|---|
| 5438 | | - max-width: 100%; |
|---|
| 5439 | | - height: auto; |
|---|
| 5440 | 5732 | line-height: 1; |
|---|
| 5441 | 5733 | } |
|---|
| 5442 | 5734 | .carousel-inner > .active, |
|---|
| .. | .. |
|---|
| 5483 | 5775 | opacity: .5; |
|---|
| 5484 | 5776 | } |
|---|
| 5485 | 5777 | .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))); |
|---|
| 5487 | 5781 | background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); |
|---|
| 5488 | 5782 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); |
|---|
| 5489 | 5783 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 5491 | 5785 | .carousel-control.right { |
|---|
| 5492 | 5786 | right: 0; |
|---|
| 5493 | 5787 | 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))); |
|---|
| 5495 | 5791 | background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); |
|---|
| 5496 | 5792 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); |
|---|
| 5497 | 5793 | background-repeat: repeat-x; |
|---|
| .. | .. |
|---|
| 5501 | 5797 | color: #fff; |
|---|
| 5502 | 5798 | text-decoration: none; |
|---|
| 5503 | 5799 | filter: alpha(opacity=90); |
|---|
| 5504 | | - outline: none; |
|---|
| 5800 | + outline: 0; |
|---|
| 5505 | 5801 | opacity: .9; |
|---|
| 5506 | 5802 | } |
|---|
| 5507 | 5803 | .carousel-control .icon-prev, |
|---|
| .. | .. |
|---|
| 5516 | 5812 | .carousel-control .icon-prev, |
|---|
| 5517 | 5813 | .carousel-control .glyphicon-chevron-left { |
|---|
| 5518 | 5814 | left: 50%; |
|---|
| 5815 | + margin-left: -10px; |
|---|
| 5519 | 5816 | } |
|---|
| 5520 | 5817 | .carousel-control .icon-next, |
|---|
| 5521 | 5818 | .carousel-control .glyphicon-chevron-right { |
|---|
| 5522 | 5819 | right: 50%; |
|---|
| 5820 | + margin-right: -10px; |
|---|
| 5523 | 5821 | } |
|---|
| 5524 | 5822 | .carousel-control .icon-prev, |
|---|
| 5525 | 5823 | .carousel-control .icon-next { |
|---|
| 5526 | 5824 | width: 20px; |
|---|
| 5527 | 5825 | height: 20px; |
|---|
| 5528 | 5826 | margin-top: -10px; |
|---|
| 5529 | | - margin-left: -10px; |
|---|
| 5530 | 5827 | font-family: serif; |
|---|
| 5531 | 5828 | } |
|---|
| 5532 | 5829 | .carousel-control .icon-prev:before { |
|---|
| .. | .. |
|---|
| 5580 | 5877 | text-shadow: none; |
|---|
| 5581 | 5878 | } |
|---|
| 5582 | 5879 | @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, |
|---|
| 5585 | 5882 | .carousel-control .icon-prev, |
|---|
| 5586 | 5883 | .carousel-control .icon-next { |
|---|
| 5587 | 5884 | width: 30px; |
|---|
| 5588 | 5885 | height: 30px; |
|---|
| 5589 | 5886 | margin-top: -15px; |
|---|
| 5590 | | - margin-left: -15px; |
|---|
| 5591 | 5887 | 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; |
|---|
| 5592 | 5896 | } |
|---|
| 5593 | 5897 | .carousel-caption { |
|---|
| 5594 | 5898 | right: 20%; |
|---|
| .. | .. |
|---|
| 5601 | 5905 | } |
|---|
| 5602 | 5906 | .clearfix:before, |
|---|
| 5603 | 5907 | .clearfix:after, |
|---|
| 5908 | +.dl-horizontal dd:before, |
|---|
| 5909 | +.dl-horizontal dd:after, |
|---|
| 5604 | 5910 | .container:before, |
|---|
| 5605 | 5911 | .container:after, |
|---|
| 5606 | 5912 | .container-fluid:before, |
|---|
| .. | .. |
|---|
| 5631 | 5937 | content: " "; |
|---|
| 5632 | 5938 | } |
|---|
| 5633 | 5939 | .clearfix:after, |
|---|
| 5940 | +.dl-horizontal dd:after, |
|---|
| 5634 | 5941 | .container:after, |
|---|
| 5635 | 5942 | .container-fluid:after, |
|---|
| 5636 | 5943 | .row:after, |
|---|
| .. | .. |
|---|
| 5679 | 5986 | } |
|---|
| 5680 | 5987 | .affix { |
|---|
| 5681 | 5988 | position: fixed; |
|---|
| 5989 | + -webkit-transform: translate3d(0, 0, 0); |
|---|
| 5990 | + -o-transform: translate3d(0, 0, 0); |
|---|
| 5991 | + transform: translate3d(0, 0, 0); |
|---|
| 5682 | 5992 | } |
|---|
| 5683 | 5993 | @-ms-viewport { |
|---|
| 5684 | 5994 | width: device-width; |
|---|
| 5685 | 5995 | } |
|---|
| 5686 | 5996 | .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 { |
|---|
| 5690 | 6014 | display: none !important; |
|---|
| 5691 | 6015 | } |
|---|
| 5692 | 6016 | @media (max-width: 767px) { |
|---|
| .. | .. |
|---|
| 5704 | 6028 | display: table-cell !important; |
|---|
| 5705 | 6029 | } |
|---|
| 5706 | 6030 | } |
|---|
| 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 | + } |
|---|
| 5712 | 6045 | } |
|---|
| 5713 | 6046 | @media (min-width: 768px) and (max-width: 991px) { |
|---|
| 5714 | 6047 | .visible-sm { |
|---|
| .. | .. |
|---|
| 5725 | 6058 | display: table-cell !important; |
|---|
| 5726 | 6059 | } |
|---|
| 5727 | 6060 | } |
|---|
| 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 | + } |
|---|
| 5733 | 6075 | } |
|---|
| 5734 | 6076 | @media (min-width: 992px) and (max-width: 1199px) { |
|---|
| 5735 | 6077 | .visible-md { |
|---|
| .. | .. |
|---|
| 5746 | 6088 | display: table-cell !important; |
|---|
| 5747 | 6089 | } |
|---|
| 5748 | 6090 | } |
|---|
| 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 | + } |
|---|
| 5754 | 6105 | } |
|---|
| 5755 | 6106 | @media (min-width: 1200px) { |
|---|
| 5756 | 6107 | .visible-lg { |
|---|
| .. | .. |
|---|
| 5767 | 6118 | display: table-cell !important; |
|---|
| 5768 | 6119 | } |
|---|
| 5769 | 6120 | } |
|---|
| 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 | +} |
|---|
| 5770 | 6136 | @media (max-width: 767px) { |
|---|
| 5771 | | - .hidden-xs, |
|---|
| 5772 | | - tr.hidden-xs, |
|---|
| 5773 | | - th.hidden-xs, |
|---|
| 5774 | | - td.hidden-xs { |
|---|
| 6137 | + .hidden-xs { |
|---|
| 5775 | 6138 | display: none !important; |
|---|
| 5776 | 6139 | } |
|---|
| 5777 | 6140 | } |
|---|
| 5778 | 6141 | @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 { |
|---|
| 5783 | 6143 | display: none !important; |
|---|
| 5784 | 6144 | } |
|---|
| 5785 | 6145 | } |
|---|
| 5786 | 6146 | @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 { |
|---|
| 5791 | 6148 | display: none !important; |
|---|
| 5792 | 6149 | } |
|---|
| 5793 | 6150 | } |
|---|
| 5794 | 6151 | @media (min-width: 1200px) { |
|---|
| 5795 | | - .hidden-lg, |
|---|
| 5796 | | - tr.hidden-lg, |
|---|
| 5797 | | - th.hidden-lg, |
|---|
| 5798 | | - td.hidden-lg { |
|---|
| 6152 | + .hidden-lg { |
|---|
| 5799 | 6153 | display: none !important; |
|---|
| 5800 | 6154 | } |
|---|
| 5801 | 6155 | } |
|---|
| 5802 | | -.visible-print, |
|---|
| 5803 | | -tr.visible-print, |
|---|
| 5804 | | -th.visible-print, |
|---|
| 5805 | | -td.visible-print { |
|---|
| 6156 | +.visible-print { |
|---|
| 5806 | 6157 | display: none !important; |
|---|
| 5807 | 6158 | } |
|---|
| 5808 | 6159 | @media print { |
|---|
| .. | .. |
|---|
| 5820 | 6171 | display: table-cell !important; |
|---|
| 5821 | 6172 | } |
|---|
| 5822 | 6173 | } |
|---|
| 6174 | +.visible-print-block { |
|---|
| 6175 | + display: none !important; |
|---|
| 6176 | +} |
|---|
| 5823 | 6177 | @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 { |
|---|
| 5828 | 6200 | display: none !important; |
|---|
| 5829 | 6201 | } |
|---|
| 5830 | 6202 | } |
|---|
| .. | .. |
|---|
| 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"]} |
|---|
| .. | .. |
|---|
| 1 | 1 | /*! |
|---|
| 2 | | - * Bootstrap v3.1.0 (http://getbootstrap.com) |
|---|
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) |
|---|
| 3 | 3 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| 4 | 4 | * 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}} |
|---|
| .. | .. |
|---|
| 28 | 28 | <glyph unicode=" " horiz-adv-x="326" /> |
|---|
| 29 | 29 | <glyph unicode="€" 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" /> |
|---|
| 30 | 30 | <glyph unicode="−" d="M200 400h900v300h-900v-300z" /> |
|---|
| 31 | | -<glyph unicode="☁" 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="◼" horiz-adv-x="500" d="M0 0z" /> |
|---|
| 32 | +<glyph unicode="☁" 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" /> |
|---|
| 32 | 33 | <glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" /> |
|---|
| 33 | 34 | <glyph unicode="✏" 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="" horiz-adv-x="500" d="M0 0z" /> |
|---|
| 35 | 35 | <glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" /> |
|---|
| 36 | | -<glyph unicode="" 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="" 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" /> |
|---|
| 37 | 37 | <glyph unicode="" 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" /> |
|---|
| 38 | 38 | <glyph unicode="" 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" /> |
|---|
| 39 | 39 | <glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" /> |
|---|
| .. | .. |
|---|
| 46 | 46 | <glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" /> |
|---|
| 47 | 47 | <glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" /> |
|---|
| 48 | 48 | <glyph unicode="" 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="" 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="" 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" /> |
|---|
| 50 | 50 | <glyph unicode="" 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" /> |
|---|
| 51 | 51 | <glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" /> |
|---|
| 52 | 52 | <glyph unicode="" 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 | 58 | <glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" /> |
|---|
| 59 | 59 | <glyph unicode="" 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" /> |
|---|
| 60 | 60 | <glyph unicode="" 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="" 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="" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" /> |
|---|
| 62 | 62 | <glyph unicode="" 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" /> |
|---|
| 63 | 63 | <glyph unicode="" 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" /> |
|---|
| 64 | 64 | <glyph unicode="" 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 | 71 | <glyph unicode="" 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" /> |
|---|
| 72 | 72 | <glyph unicode="" 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" /> |
|---|
| 73 | 73 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 76 | 76 | <glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" /> |
|---|
| 77 | 77 | <glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> |
|---|
| 78 | 78 | <glyph unicode="" 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" /> |
|---|
| 79 | 79 | <glyph unicode="" 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" /> |
|---|
| 80 | 80 | <glyph unicode="" 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="" 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="" 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" /> |
|---|
| 82 | 82 | <glyph unicode="" 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" /> |
|---|
| 83 | 83 | <glyph unicode="" 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 " /> |
|---|
| 84 | 84 | <glyph unicode="" 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 | 93 | <glyph unicode="" 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 " /> |
|---|
| 94 | 94 | <glyph unicode="" 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" /> |
|---|
| 95 | 95 | <glyph unicode="" 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="" 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="" 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" /> |
|---|
| 97 | 97 | <glyph unicode="" 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" /> |
|---|
| 98 | 98 | <glyph unicode="" 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="" 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="" 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" /> |
|---|
| 100 | 100 | <glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" /> |
|---|
| 101 | 101 | <glyph unicode="" 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" /> |
|---|
| 102 | 102 | <glyph unicode="" 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 | 110 | <glyph unicode="" 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" /> |
|---|
| 111 | 111 | <glyph unicode="" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" /> |
|---|
| 112 | 112 | <glyph unicode="" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" /> |
|---|
| 113 | | -<glyph unicode="" 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="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 116 | 116 | <glyph unicode="" 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="" 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="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 120 | 120 | <glyph unicode="" 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" /> |
|---|
| 121 | 121 | <glyph unicode="" 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" /> |
|---|
| 122 | 122 | <glyph unicode="" 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 | 127 | <glyph unicode="" 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" /> |
|---|
| 128 | 128 | <glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" /> |
|---|
| 129 | 129 | <glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" /> |
|---|
| 130 | | -<glyph unicode="" 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="" 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="" 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="" 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" /> |
|---|
| 132 | 132 | <glyph unicode="" 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" /> |
|---|
| 133 | 133 | <glyph unicode="" 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" /> |
|---|
| 134 | 134 | <glyph unicode="" 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" /> |
|---|
| 135 | 135 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 138 | 138 | <glyph unicode="" 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" /> |
|---|
| 139 | 139 | <glyph unicode="" 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" /> |
|---|
| 140 | 140 | <glyph unicode="" 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 | 148 | <glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> |
|---|
| 149 | 149 | <glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" /> |
|---|
| 150 | 150 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 153 | 153 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 156 | 156 | <glyph unicode="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 165 | 165 | <glyph unicode="" 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" /> |
|---|
| 166 | 166 | <glyph unicode="" 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" /> |
|---|
| 167 | 167 | <glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> |
|---|
| 168 | 168 | <glyph unicode="" 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" /> |
|---|
| 169 | 169 | <glyph unicode="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 174 | 174 | <glyph unicode="" 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" /> |
|---|
| 175 | 175 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 178 | 178 | <glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" /> |
|---|
| 179 | 179 | <glyph unicode="" 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" /> |
|---|
| 180 | 180 | <glyph unicode="" 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 | 187 | <glyph unicode="" 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" /> |
|---|
| 188 | 188 | <glyph unicode="" 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" /> |
|---|
| 189 | 189 | <glyph unicode="" 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="" 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="" 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" /> |
|---|
| 191 | 191 | <glyph unicode="" 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 " /> |
|---|
| 192 | 192 | <glyph unicode="" 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" /> |
|---|
| 193 | 193 | <glyph unicode="" 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" /> |
|---|
| 194 | 194 | <glyph unicode="" 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" /> |
|---|
| 195 | 195 | <glyph unicode="" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" /> |
|---|
| 196 | 196 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 199 | 199 | <glyph unicode="" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" /> |
|---|
| 200 | 200 | <glyph unicode="" 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" /> |
|---|
| 201 | 201 | <glyph unicode="" 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 | 204 | <glyph unicode="" 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" /> |
|---|
| 205 | 205 | <glyph unicode="" 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" /> |
|---|
| 206 | 206 | <glyph unicode="" 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="" 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="" 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" /> |
|---|
| 208 | 208 | <glyph unicode="" 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" /> |
|---|
| 209 | 209 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 212 | 212 | <glyph unicode="" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" /> |
|---|
| 213 | 213 | <glyph unicode="" 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" /> |
|---|
| 214 | 214 | <glyph unicode="" 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 | 221 | <glyph unicode="" 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" /> |
|---|
| 222 | 222 | <glyph unicode="" 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" /> |
|---|
| 223 | 223 | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
|---|
| 226 | 226 | <glyph unicode="" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" /> |
|---|
| 227 | | -<glyph unicode="" 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="" 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" /> |
|---|
| 228 | 228 | </font> |
|---|
| 229 | 229 | </defs></svg> |
|---|
| .. | .. |
|---|
| 7 | 7 | 401: "Unathorized action", |
|---|
| 8 | 8 | 403: "Forbidden action", |
|---|
| 9 | 9 | 500: "Server error", |
|---|
| 10 | + 418: "Application error", |
|---|
| 10 | 11 | 404: "Element not found" |
|---|
| 11 | 12 | } |
|---|
| 12 | 13 | |
|---|
| .. | .. |
|---|
| 21 | 22 | link : function(scope, element, attrs, ngModel) { |
|---|
| 22 | 23 | if (!ngModel) |
|---|
| 23 | 24 | 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 |
|---|
| 25 | 26 | // appropiate dynamic field |
|---|
| 26 | | - scope.catalogForm[attrs.name] = scope.catalogForm['{{field.name}}']; |
|---|
| 27 | + scope.catalogForm[attrs.name] = scope.catalogForm[scope.field.name]; |
|---|
| 27 | 28 | scope.catalogForm[attrs.name].$name = attrs.name; |
|---|
| 28 | 29 | } |
|---|
| 29 | 30 | }; |
|---|
| .. | .. |
|---|
| 115 | 116 | return 'select'; |
|---|
| 116 | 117 | if (field.type === 'multiselect') |
|---|
| 117 | 118 | return 'multiselect'; |
|---|
| 119 | + if (field.type === 'metadata') |
|---|
| 120 | + return 'metadata'; |
|---|
| 118 | 121 | if (!field.multiline) |
|---|
| 119 | 122 | return 'normal'; |
|---|
| 120 | 123 | if (field.multiline) |
|---|
| .. | .. |
|---|
| 161 | 164 | |
|---|
| 162 | 165 | } |
|---|
| 163 | 166 | } |
|---|
| 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 | + |
|---|
| 164 | 180 | } ]); |
|---|
| 165 | 181 | |
|---|
| 166 | 182 | app.controller('CatalogListCtrl', [ '$scope', '$http', '$filter', 'Catalogs', |
|---|
| .. | .. |
|---|
| 1 | 1 | /* |
|---|
| 2 | | - AngularJS v1.2.9 |
|---|
| 2 | + AngularJS v1.3.0-rc.5 |
|---|
| 3 | 3 | (c) 2010-2014 Google, Inc. http://angularjs.org |
|---|
| 4 | 4 | License: MIT |
|---|
| 5 | 5 | */ |
|---|
| 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); |
|---|
| 25 | 30 | //# sourceMappingURL=angular-animate.min.js.map |
|---|
| .. | .. |
|---|
| 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 | +} |
|---|
| .. | .. |
|---|
| 1 | 1 | /* |
|---|
| 2 | | - AngularJS v1.2.9 |
|---|
| 2 | + AngularJS v1.3.0-rc.5 |
|---|
| 3 | 3 | (c) 2010-2014 Google, Inc. http://angularjs.org |
|---|
| 4 | 4 | License: MIT |
|---|
| 5 | 5 | */ |
|---|
| 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); |
|---|
| 13 | 13 | //# sourceMappingURL=angular-resource.min.js.map |
|---|
| .. | .. |
|---|
| 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 | +} |
|---|
| .. | .. |
|---|
| 1 | 1 | /* |
|---|
| 2 | | - AngularJS v1.2.9 |
|---|
| 2 | + AngularJS v1.3.0-rc.5 |
|---|
| 3 | 3 | (c) 2010-2014 Google, Inc. http://angularjs.org |
|---|
| 4 | 4 | License: MIT |
|---|
| 5 | 5 | */ |
|---|
| 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); |
|---|
| 14 | 15 | //# sourceMappingURL=angular-route.min.js.map |
|---|
| .. | .. |
|---|
| 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 | +} |
|---|
| .. | .. |
|---|
| 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(/</,'<').replace(/>/,'>')); |
|---|
| 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)) |
|---|
| 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 (<, >) with &lt; and &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="Explicitly trusted HTML bypasses ' + |
|---|
| 14923 | + * 'sanitization."">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="Explicitly trusted HTML bypasses ' + |
|---|
| 14949 | + * 'sanitization."">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=" " 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}} |
|---|
| 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 | + * /* this is just another form of hiding an element */ |
|---|
| 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 | + * /* this is required as of 1.3x to properly |
|---|
| 23904 | + * apply all styling in a show/hide animation */ |
|---|
| 23905 | + * transition:0s linear all; |
|---|
| 23906 | + * } |
|---|
| 23907 | + * |
|---|
| 23908 | + * .my-element.ng-hide-add-active, |
|---|
| 23909 | + * .my-element.ng-hide-remove-active { |
|---|
| 23910 | + * /* the transition is defined in the active class */ |
|---|
| 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 | + * /* this is just another form of hiding an element */ |
|---|
| 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>'); |
|---|
| .. | .. |
|---|
| 1 | 1 | /* |
|---|
| 2 | | - AngularJS v1.2.9 |
|---|
| 2 | + AngularJS v1.3.0-rc.5 |
|---|
| 3 | 3 | (c) 2010-2014 Google, Inc. http://angularjs.org |
|---|
| 4 | 4 | License: MIT |
|---|
| 5 | 5 | */ |
|---|
| 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> </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(/</,"<").replace(/>/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng"); |
|---|
| 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>'); |
|---|
| 202 | 246 | //# sourceMappingURL=angular.min.js.map |
|---|
| .. | .. |
|---|
| 1 | 1 | { |
|---|
| 2 | 2 | "version":3, |
|---|
| 3 | 3 | "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"] |
|---|
| 8 | 8 | } |
|---|
| .. | .. |
|---|
| 137 | 137 | this.getField = function(key, catalog) { |
|---|
| 138 | 138 | catalog = catalog || _current; |
|---|
| 139 | 139 | if (!catalog) |
|---|
| 140 | | - throw new Error( |
|---|
| 141 | | - 'There is no current catalog selected'); |
|---|
| 140 | + throw new Error('There is no current catalog selected'); |
|---|
| 142 | 141 | var index = -1; |
|---|
| 143 | 142 | if (typeof key === 'string') { |
|---|
| 144 | 143 | for (var i = catalog.fields.length - 1; i >= 0 |
|---|
| 145 | | - && catalog.fields[i].name !== key; i--) |
|---|
| 146 | | - ; |
|---|
| 144 | + && catalog.fields[i].name !== key; i--); |
|---|
| 147 | 145 | index = i; |
|---|
| 148 | 146 | } else { |
|---|
| 149 | | - index = key; // In this case key === |
|---|
| 150 | | - // field position |
|---|
| 147 | + index = key; // In this case key === field position |
|---|
| 151 | 148 | } |
|---|
| 152 | 149 | |
|---|
| 153 | 150 | return index === -1 ? {} |
|---|
| .. | .. |
|---|
| 160 | 157 | |
|---|
| 161 | 158 | function _success(response) { |
|---|
| 162 | 159 | console.debug('$resource action success') |
|---|
| 160 | + console.log(_current); |
|---|
| 161 | + |
|---|
| 163 | 162 | } |
|---|
| 164 | 163 | 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: ' |
|---|
| 167 | 165 | + response.status) |
|---|
| 168 | 166 | } |
|---|
| 169 | 167 | |
|---|
| 170 | 168 | this.save = function(data) { |
|---|
| 171 | 169 | if (!_current) |
|---|
| 172 | | - throw new Error( |
|---|
| 173 | | - 'There is no current catalog selected'); |
|---|
| 170 | + throw new Error('There is no current catalog selected'); |
|---|
| 174 | 171 | |
|---|
| 175 | 172 | var resource = this.getResource(); |
|---|
| 176 | 173 | return resource.save(data, _success, _fail); |
|---|
| .. | .. |
|---|
| 200 | 197 | if (!field) |
|---|
| 201 | 198 | return; |
|---|
| 202 | 199 | var resource = this.getResource(res); |
|---|
| 203 | | - var data = preloadedData |
|---|
| 204 | | - || resource.query({}, _success, |
|---|
| 205 | | - _fail); |
|---|
| 200 | + var data = preloadedData || resource.query({}, _success, _fail); |
|---|
| 206 | 201 | var that = this; |
|---|
| 207 | 202 | data.$promise.then(function(responseData) { |
|---|
| 208 | 203 | var pk = that.getPk(that |
|---|
| .. | .. |
|---|
| 223 | 218 | this.loadRefs = function(refs, refsFields) { |
|---|
| 224 | 219 | if (!refsFields || refsFields.length === 0) { |
|---|
| 225 | 220 | if (!_current) |
|---|
| 226 | | - throw new Error( |
|---|
| 227 | | - 'There is no current catalog selected'); |
|---|
| 221 | + throw new Error('There is no current catalog selected'); |
|---|
| 228 | 222 | refsFields = []; |
|---|
| 229 | 223 | _current.fields.forEach(function(f) { |
|---|
| 230 | 224 | if (f.resource) |
|---|
| .. | .. |
|---|
| 27 | 27 | "autogenerate" : true, |
|---|
| 28 | 28 | "type" : "date", |
|---|
| 29 | 29 | "readOnly" : true |
|---|
| 30 | + }, { |
|---|
| 31 | + "name" : "metadata", |
|---|
| 32 | + "display" : "Metadata", |
|---|
| 33 | + "type" : "metadata", |
|---|
| 34 | + "allow_creation": true |
|---|
| 30 | 35 | } ] |
|---|
| 31 | 36 | }, { |
|---|
| 32 | 37 | "name" : "License types", |
|---|
| .. | .. |
|---|
| 73 | 78 | "name" : "application_name", |
|---|
| 74 | 79 | "display" : "Application", |
|---|
| 75 | 80 | "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 | + |
|---|
| 76 | 92 | } ] |
|---|
| 77 | 93 | }, { |
|---|
| 78 | 94 | "name" : "Organizations", |
|---|
| .. | .. |
|---|
| 1 | 1 | /*! |
|---|
| 2 | | - * Bootstrap v3.1.0 (http://getbootstrap.com) |
|---|
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) |
|---|
| 3 | 3 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| 4 | 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
|---|
| 5 | 5 | */ |
|---|
| 6 | 6 | |
|---|
| 7 | | -if (typeof jQuery === 'undefined') { throw new Error('Bootstrap requires jQuery') } |
|---|
| 7 | +if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } |
|---|
| 8 | 8 | |
|---|
| 9 | 9 | /* ======================================================================== |
|---|
| 10 | | - * Bootstrap: transition.js v3.1.0 |
|---|
| 10 | + * Bootstrap: transition.js v3.2.0 |
|---|
| 11 | 11 | * http://getbootstrap.com/javascript/#transitions |
|---|
| 12 | 12 | * ======================================================================== |
|---|
| 13 | 13 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 25 | 25 | var el = document.createElement('bootstrap') |
|---|
| 26 | 26 | |
|---|
| 27 | 27 | 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' |
|---|
| 32 | 32 | } |
|---|
| 33 | 33 | |
|---|
| 34 | 34 | for (var name in transEndEventNames) { |
|---|
| .. | .. |
|---|
| 42 | 42 | |
|---|
| 43 | 43 | // http://blog.alexmaccaw.com/css-transitions |
|---|
| 44 | 44 | $.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 }) |
|---|
| 47 | 48 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) } |
|---|
| 48 | 49 | setTimeout(callback, duration) |
|---|
| 49 | 50 | return this |
|---|
| .. | .. |
|---|
| 51 | 52 | |
|---|
| 52 | 53 | $(function () { |
|---|
| 53 | 54 | $.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 | + } |
|---|
| 54 | 65 | }) |
|---|
| 55 | 66 | |
|---|
| 56 | 67 | }(jQuery); |
|---|
| 57 | 68 | |
|---|
| 58 | 69 | /* ======================================================================== |
|---|
| 59 | | - * Bootstrap: alert.js v3.1.0 |
|---|
| 70 | + * Bootstrap: alert.js v3.2.0 |
|---|
| 60 | 71 | * http://getbootstrap.com/javascript/#alerts |
|---|
| 61 | 72 | * ======================================================================== |
|---|
| 62 | 73 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 74 | 85 | var Alert = function (el) { |
|---|
| 75 | 86 | $(el).on('click', dismiss, this.close) |
|---|
| 76 | 87 | } |
|---|
| 88 | + |
|---|
| 89 | + Alert.VERSION = '3.2.0' |
|---|
| 77 | 90 | |
|---|
| 78 | 91 | Alert.prototype.close = function (e) { |
|---|
| 79 | 92 | var $this = $(this) |
|---|
| .. | .. |
|---|
| 99 | 112 | $parent.removeClass('in') |
|---|
| 100 | 113 | |
|---|
| 101 | 114 | 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() |
|---|
| 103 | 117 | } |
|---|
| 104 | 118 | |
|---|
| 105 | 119 | $.support.transition && $parent.hasClass('fade') ? |
|---|
| 106 | 120 | $parent |
|---|
| 107 | | - .one($.support.transition.end, removeElement) |
|---|
| 121 | + .one('bsTransitionEnd', removeElement) |
|---|
| 108 | 122 | .emulateTransitionEnd(150) : |
|---|
| 109 | 123 | removeElement() |
|---|
| 110 | 124 | } |
|---|
| .. | .. |
|---|
| 113 | 127 | // ALERT PLUGIN DEFINITION |
|---|
| 114 | 128 | // ======================= |
|---|
| 115 | 129 | |
|---|
| 116 | | - var old = $.fn.alert |
|---|
| 117 | | - |
|---|
| 118 | | - $.fn.alert = function (option) { |
|---|
| 130 | + function Plugin(option) { |
|---|
| 119 | 131 | return this.each(function () { |
|---|
| 120 | 132 | var $this = $(this) |
|---|
| 121 | 133 | var data = $this.data('bs.alert') |
|---|
| .. | .. |
|---|
| 125 | 137 | }) |
|---|
| 126 | 138 | } |
|---|
| 127 | 139 | |
|---|
| 140 | + var old = $.fn.alert |
|---|
| 141 | + |
|---|
| 142 | + $.fn.alert = Plugin |
|---|
| 128 | 143 | $.fn.alert.Constructor = Alert |
|---|
| 129 | 144 | |
|---|
| 130 | 145 | |
|---|
| .. | .. |
|---|
| 145 | 160 | }(jQuery); |
|---|
| 146 | 161 | |
|---|
| 147 | 162 | /* ======================================================================== |
|---|
| 148 | | - * Bootstrap: button.js v3.1.0 |
|---|
| 163 | + * Bootstrap: button.js v3.2.0 |
|---|
| 149 | 164 | * http://getbootstrap.com/javascript/#buttons |
|---|
| 150 | 165 | * ======================================================================== |
|---|
| 151 | 166 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 165 | 180 | this.isLoading = false |
|---|
| 166 | 181 | } |
|---|
| 167 | 182 | |
|---|
| 183 | + Button.VERSION = '3.2.0' |
|---|
| 184 | + |
|---|
| 168 | 185 | Button.DEFAULTS = { |
|---|
| 169 | 186 | loadingText: 'loading...' |
|---|
| 170 | 187 | } |
|---|
| .. | .. |
|---|
| 177 | 194 | |
|---|
| 178 | 195 | state = state + 'Text' |
|---|
| 179 | 196 | |
|---|
| 180 | | - if (!data.resetText) $el.data('resetText', $el[val]()) |
|---|
| 197 | + if (data.resetText == null) $el.data('resetText', $el[val]()) |
|---|
| 181 | 198 | |
|---|
| 182 | | - $el[val](data[state] || this.options[state]) |
|---|
| 199 | + $el[val](data[state] == null ? this.options[state] : data[state]) |
|---|
| 183 | 200 | |
|---|
| 184 | 201 | // push to event loop to allow forms to submit |
|---|
| 185 | 202 | setTimeout($.proxy(function () { |
|---|
| .. | .. |
|---|
| 213 | 230 | // BUTTON PLUGIN DEFINITION |
|---|
| 214 | 231 | // ======================== |
|---|
| 215 | 232 | |
|---|
| 216 | | - var old = $.fn.button |
|---|
| 217 | | - |
|---|
| 218 | | - $.fn.button = function (option) { |
|---|
| 233 | + function Plugin(option) { |
|---|
| 219 | 234 | return this.each(function () { |
|---|
| 220 | 235 | var $this = $(this) |
|---|
| 221 | 236 | var data = $this.data('bs.button') |
|---|
| .. | .. |
|---|
| 228 | 243 | }) |
|---|
| 229 | 244 | } |
|---|
| 230 | 245 | |
|---|
| 246 | + var old = $.fn.button |
|---|
| 247 | + |
|---|
| 248 | + $.fn.button = Plugin |
|---|
| 231 | 249 | $.fn.button.Constructor = Button |
|---|
| 232 | 250 | |
|---|
| 233 | 251 | |
|---|
| .. | .. |
|---|
| 243 | 261 | // BUTTON DATA-API |
|---|
| 244 | 262 | // =============== |
|---|
| 245 | 263 | |
|---|
| 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) { |
|---|
| 247 | 265 | var $btn = $(e.target) |
|---|
| 248 | 266 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') |
|---|
| 249 | | - $btn.button('toggle') |
|---|
| 267 | + Plugin.call($btn, 'toggle') |
|---|
| 250 | 268 | e.preventDefault() |
|---|
| 251 | 269 | }) |
|---|
| 252 | 270 | |
|---|
| 253 | 271 | }(jQuery); |
|---|
| 254 | 272 | |
|---|
| 255 | 273 | /* ======================================================================== |
|---|
| 256 | | - * Bootstrap: carousel.js v3.1.0 |
|---|
| 274 | + * Bootstrap: carousel.js v3.2.0 |
|---|
| 257 | 275 | * http://getbootstrap.com/javascript/#carousel |
|---|
| 258 | 276 | * ======================================================================== |
|---|
| 259 | 277 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 268 | 286 | // ========================= |
|---|
| 269 | 287 | |
|---|
| 270 | 288 | var Carousel = function (element, options) { |
|---|
| 271 | | - this.$element = $(element) |
|---|
| 289 | + this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this)) |
|---|
| 272 | 290 | this.$indicators = this.$element.find('.carousel-indicators') |
|---|
| 273 | 291 | this.options = options |
|---|
| 274 | 292 | this.paused = |
|---|
| .. | .. |
|---|
| 278 | 296 | this.$items = null |
|---|
| 279 | 297 | |
|---|
| 280 | 298 | 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)) |
|---|
| 283 | 301 | } |
|---|
| 302 | + |
|---|
| 303 | + Carousel.VERSION = '3.2.0' |
|---|
| 284 | 304 | |
|---|
| 285 | 305 | Carousel.DEFAULTS = { |
|---|
| 286 | 306 | interval: 5000, |
|---|
| .. | .. |
|---|
| 288 | 308 | wrap: true |
|---|
| 289 | 309 | } |
|---|
| 290 | 310 | |
|---|
| 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) { |
|---|
| 292 | 322 | e || (this.paused = false) |
|---|
| 293 | 323 | |
|---|
| 294 | 324 | this.interval && clearInterval(this.interval) |
|---|
| .. | .. |
|---|
| 300 | 330 | return this |
|---|
| 301 | 331 | } |
|---|
| 302 | 332 | |
|---|
| 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) |
|---|
| 308 | 336 | } |
|---|
| 309 | 337 | |
|---|
| 310 | 338 | Carousel.prototype.to = function (pos) { |
|---|
| 311 | 339 | var that = this |
|---|
| 312 | | - var activeIndex = this.getActiveIndex() |
|---|
| 340 | + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) |
|---|
| 313 | 341 | |
|---|
| 314 | 342 | if (pos > (this.$items.length - 1) || pos < 0) return |
|---|
| 315 | 343 | |
|---|
| 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" |
|---|
| 317 | 345 | if (activeIndex == pos) return this.pause().cycle() |
|---|
| 318 | 346 | |
|---|
| 319 | 347 | return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) |
|---|
| .. | .. |
|---|
| 355 | 383 | $next = this.$element.find('.item')[fallback]() |
|---|
| 356 | 384 | } |
|---|
| 357 | 385 | |
|---|
| 358 | | - if ($next.hasClass('active')) return this.sliding = false |
|---|
| 386 | + if ($next.hasClass('active')) return (this.sliding = false) |
|---|
| 359 | 387 | |
|---|
| 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 |
|---|
| 363 | 395 | |
|---|
| 364 | 396 | this.sliding = true |
|---|
| 365 | 397 | |
|---|
| .. | .. |
|---|
| 367 | 399 | |
|---|
| 368 | 400 | if (this.$indicators.length) { |
|---|
| 369 | 401 | 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') |
|---|
| 374 | 404 | } |
|---|
| 375 | 405 | |
|---|
| 406 | + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" |
|---|
| 376 | 407 | if ($.support.transition && this.$element.hasClass('slide')) { |
|---|
| 377 | 408 | $next.addClass(type) |
|---|
| 378 | 409 | $next[0].offsetWidth // force reflow |
|---|
| 379 | 410 | $active.addClass(direction) |
|---|
| 380 | 411 | $next.addClass(direction) |
|---|
| 381 | 412 | $active |
|---|
| 382 | | - .one($.support.transition.end, function () { |
|---|
| 413 | + .one('bsTransitionEnd', function () { |
|---|
| 383 | 414 | $next.removeClass([type, direction].join(' ')).addClass('active') |
|---|
| 384 | 415 | $active.removeClass(['active', direction].join(' ')) |
|---|
| 385 | 416 | that.sliding = false |
|---|
| 386 | | - setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0) |
|---|
| 417 | + setTimeout(function () { |
|---|
| 418 | + that.$element.trigger(slidEvent) |
|---|
| 419 | + }, 0) |
|---|
| 387 | 420 | }) |
|---|
| 388 | 421 | .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) |
|---|
| 389 | 422 | } else { |
|---|
| 390 | 423 | $active.removeClass('active') |
|---|
| 391 | 424 | $next.addClass('active') |
|---|
| 392 | 425 | this.sliding = false |
|---|
| 393 | | - this.$element.trigger('slid.bs.carousel') |
|---|
| 426 | + this.$element.trigger(slidEvent) |
|---|
| 394 | 427 | } |
|---|
| 395 | 428 | |
|---|
| 396 | 429 | isCycling && this.cycle() |
|---|
| .. | .. |
|---|
| 402 | 435 | // CAROUSEL PLUGIN DEFINITION |
|---|
| 403 | 436 | // ========================== |
|---|
| 404 | 437 | |
|---|
| 405 | | - var old = $.fn.carousel |
|---|
| 406 | | - |
|---|
| 407 | | - $.fn.carousel = function (option) { |
|---|
| 438 | + function Plugin(option) { |
|---|
| 408 | 439 | return this.each(function () { |
|---|
| 409 | 440 | var $this = $(this) |
|---|
| 410 | 441 | var data = $this.data('bs.carousel') |
|---|
| .. | .. |
|---|
| 418 | 449 | }) |
|---|
| 419 | 450 | } |
|---|
| 420 | 451 | |
|---|
| 452 | + var old = $.fn.carousel |
|---|
| 453 | + |
|---|
| 454 | + $.fn.carousel = Plugin |
|---|
| 421 | 455 | $.fn.carousel.Constructor = Carousel |
|---|
| 422 | 456 | |
|---|
| 423 | 457 | |
|---|
| .. | .. |
|---|
| 434 | 468 | // ================= |
|---|
| 435 | 469 | |
|---|
| 436 | 470 | $(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 |
|---|
| 439 | 475 | var options = $.extend({}, $target.data(), $this.data()) |
|---|
| 440 | 476 | var slideIndex = $this.attr('data-slide-to') |
|---|
| 441 | 477 | if (slideIndex) options.interval = false |
|---|
| 442 | 478 | |
|---|
| 443 | | - $target.carousel(options) |
|---|
| 479 | + Plugin.call($target, options) |
|---|
| 444 | 480 | |
|---|
| 445 | | - if (slideIndex = $this.attr('data-slide-to')) { |
|---|
| 481 | + if (slideIndex) { |
|---|
| 446 | 482 | $target.data('bs.carousel').to(slideIndex) |
|---|
| 447 | 483 | } |
|---|
| 448 | 484 | |
|---|
| .. | .. |
|---|
| 452 | 488 | $(window).on('load', function () { |
|---|
| 453 | 489 | $('[data-ride="carousel"]').each(function () { |
|---|
| 454 | 490 | var $carousel = $(this) |
|---|
| 455 | | - $carousel.carousel($carousel.data()) |
|---|
| 491 | + Plugin.call($carousel, $carousel.data()) |
|---|
| 456 | 492 | }) |
|---|
| 457 | 493 | }) |
|---|
| 458 | 494 | |
|---|
| 459 | 495 | }(jQuery); |
|---|
| 460 | 496 | |
|---|
| 461 | 497 | /* ======================================================================== |
|---|
| 462 | | - * Bootstrap: collapse.js v3.1.0 |
|---|
| 498 | + * Bootstrap: collapse.js v3.2.0 |
|---|
| 463 | 499 | * http://getbootstrap.com/javascript/#collapse |
|---|
| 464 | 500 | * ======================================================================== |
|---|
| 465 | 501 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 482 | 518 | if (this.options.toggle) this.toggle() |
|---|
| 483 | 519 | } |
|---|
| 484 | 520 | |
|---|
| 521 | + Collapse.VERSION = '3.2.0' |
|---|
| 522 | + |
|---|
| 485 | 523 | Collapse.DEFAULTS = { |
|---|
| 486 | 524 | toggle: true |
|---|
| 487 | 525 | } |
|---|
| .. | .. |
|---|
| 503 | 541 | if (actives && actives.length) { |
|---|
| 504 | 542 | var hasData = actives.data('bs.collapse') |
|---|
| 505 | 543 | if (hasData && hasData.transitioning) return |
|---|
| 506 | | - actives.collapse('hide') |
|---|
| 544 | + Plugin.call(actives, 'hide') |
|---|
| 507 | 545 | hasData || actives.data('bs.collapse', null) |
|---|
| 508 | 546 | } |
|---|
| 509 | 547 | |
|---|
| .. | .. |
|---|
| 511 | 549 | |
|---|
| 512 | 550 | this.$element |
|---|
| 513 | 551 | .removeClass('collapse') |
|---|
| 514 | | - .addClass('collapsing') |
|---|
| 515 | | - [dimension](0) |
|---|
| 552 | + .addClass('collapsing')[dimension](0) |
|---|
| 516 | 553 | |
|---|
| 517 | 554 | this.transitioning = 1 |
|---|
| 518 | 555 | |
|---|
| 519 | 556 | var complete = function () { |
|---|
| 520 | 557 | this.$element |
|---|
| 521 | 558 | .removeClass('collapsing') |
|---|
| 522 | | - .addClass('collapse in') |
|---|
| 523 | | - [dimension]('auto') |
|---|
| 559 | + .addClass('collapse in')[dimension]('') |
|---|
| 524 | 560 | this.transitioning = 0 |
|---|
| 525 | | - this.$element.trigger('shown.bs.collapse') |
|---|
| 561 | + this.$element |
|---|
| 562 | + .trigger('shown.bs.collapse') |
|---|
| 526 | 563 | } |
|---|
| 527 | 564 | |
|---|
| 528 | 565 | if (!$.support.transition) return complete.call(this) |
|---|
| .. | .. |
|---|
| 530 | 567 | var scrollSize = $.camelCase(['scroll', dimension].join('-')) |
|---|
| 531 | 568 | |
|---|
| 532 | 569 | 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]) |
|---|
| 536 | 572 | } |
|---|
| 537 | 573 | |
|---|
| 538 | 574 | Collapse.prototype.hide = function () { |
|---|
| .. | .. |
|---|
| 544 | 580 | |
|---|
| 545 | 581 | var dimension = this.dimension() |
|---|
| 546 | 582 | |
|---|
| 547 | | - this.$element |
|---|
| 548 | | - [dimension](this.$element[dimension]()) |
|---|
| 549 | | - [0].offsetHeight |
|---|
| 583 | + this.$element[dimension](this.$element[dimension]())[0].offsetHeight |
|---|
| 550 | 584 | |
|---|
| 551 | 585 | this.$element |
|---|
| 552 | 586 | .addClass('collapsing') |
|---|
| .. | .. |
|---|
| 567 | 601 | |
|---|
| 568 | 602 | this.$element |
|---|
| 569 | 603 | [dimension](0) |
|---|
| 570 | | - .one($.support.transition.end, $.proxy(complete, this)) |
|---|
| 604 | + .one('bsTransitionEnd', $.proxy(complete, this)) |
|---|
| 571 | 605 | .emulateTransitionEnd(350) |
|---|
| 572 | 606 | } |
|---|
| 573 | 607 | |
|---|
| .. | .. |
|---|
| 579 | 613 | // COLLAPSE PLUGIN DEFINITION |
|---|
| 580 | 614 | // ========================== |
|---|
| 581 | 615 | |
|---|
| 582 | | - var old = $.fn.collapse |
|---|
| 583 | | - |
|---|
| 584 | | - $.fn.collapse = function (option) { |
|---|
| 616 | + function Plugin(option) { |
|---|
| 585 | 617 | return this.each(function () { |
|---|
| 586 | 618 | var $this = $(this) |
|---|
| 587 | 619 | var data = $this.data('bs.collapse') |
|---|
| .. | .. |
|---|
| 593 | 625 | }) |
|---|
| 594 | 626 | } |
|---|
| 595 | 627 | |
|---|
| 628 | + var old = $.fn.collapse |
|---|
| 629 | + |
|---|
| 630 | + $.fn.collapse = Plugin |
|---|
| 596 | 631 | $.fn.collapse.Constructor = Collapse |
|---|
| 597 | 632 | |
|---|
| 598 | 633 | |
|---|
| .. | .. |
|---|
| 608 | 643 | // COLLAPSE DATA-API |
|---|
| 609 | 644 | // ================= |
|---|
| 610 | 645 | |
|---|
| 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) |
|---|
| 613 | 649 | var target = $this.attr('data-target') |
|---|
| 614 | 650 | || e.preventDefault() |
|---|
| 615 | | - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 |
|---|
| 651 | + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 |
|---|
| 616 | 652 | var $target = $(target) |
|---|
| 617 | 653 | var data = $target.data('bs.collapse') |
|---|
| 618 | 654 | var option = data ? 'toggle' : $this.data() |
|---|
| .. | .. |
|---|
| 620 | 656 | var $parent = parent && $(parent) |
|---|
| 621 | 657 | |
|---|
| 622 | 658 | 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') |
|---|
| 624 | 660 | $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') |
|---|
| 625 | 661 | } |
|---|
| 626 | 662 | |
|---|
| 627 | | - $target.collapse(option) |
|---|
| 663 | + Plugin.call($target, option) |
|---|
| 628 | 664 | }) |
|---|
| 629 | 665 | |
|---|
| 630 | 666 | }(jQuery); |
|---|
| 631 | 667 | |
|---|
| 632 | 668 | /* ======================================================================== |
|---|
| 633 | | - * Bootstrap: dropdown.js v3.1.0 |
|---|
| 669 | + * Bootstrap: dropdown.js v3.2.0 |
|---|
| 634 | 670 | * http://getbootstrap.com/javascript/#dropdowns |
|---|
| 635 | 671 | * ======================================================================== |
|---|
| 636 | 672 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 645 | 681 | // ========================= |
|---|
| 646 | 682 | |
|---|
| 647 | 683 | var backdrop = '.dropdown-backdrop' |
|---|
| 648 | | - var toggle = '[data-toggle=dropdown]' |
|---|
| 684 | + var toggle = '[data-toggle="dropdown"]' |
|---|
| 649 | 685 | var Dropdown = function (element) { |
|---|
| 650 | 686 | $(element).on('click.bs.dropdown', this.toggle) |
|---|
| 651 | 687 | } |
|---|
| 688 | + |
|---|
| 689 | + Dropdown.VERSION = '3.2.0' |
|---|
| 652 | 690 | |
|---|
| 653 | 691 | Dropdown.prototype.toggle = function (e) { |
|---|
| 654 | 692 | var $this = $(this) |
|---|
| .. | .. |
|---|
| 671 | 709 | |
|---|
| 672 | 710 | if (e.isDefaultPrevented()) return |
|---|
| 673 | 711 | |
|---|
| 712 | + $this.trigger('focus') |
|---|
| 713 | + |
|---|
| 674 | 714 | $parent |
|---|
| 675 | 715 | .toggleClass('open') |
|---|
| 676 | 716 | .trigger('shown.bs.dropdown', relatedTarget) |
|---|
| 677 | | - |
|---|
| 678 | | - $this.focus() |
|---|
| 679 | 717 | } |
|---|
| 680 | 718 | |
|---|
| 681 | 719 | return false |
|---|
| .. | .. |
|---|
| 695 | 733 | var isActive = $parent.hasClass('open') |
|---|
| 696 | 734 | |
|---|
| 697 | 735 | 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') |
|---|
| 700 | 738 | } |
|---|
| 701 | 739 | |
|---|
| 702 | 740 | 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) |
|---|
| 704 | 742 | |
|---|
| 705 | 743 | if (!$items.length) return |
|---|
| 706 | 744 | |
|---|
| .. | .. |
|---|
| 710 | 748 | if (e.keyCode == 40 && index < $items.length - 1) index++ // down |
|---|
| 711 | 749 | if (!~index) index = 0 |
|---|
| 712 | 750 | |
|---|
| 713 | | - $items.eq(index).focus() |
|---|
| 751 | + $items.eq(index).trigger('focus') |
|---|
| 714 | 752 | } |
|---|
| 715 | 753 | |
|---|
| 716 | 754 | function clearMenus(e) { |
|---|
| 755 | + if (e && e.which === 3) return |
|---|
| 717 | 756 | $(backdrop).remove() |
|---|
| 718 | 757 | $(toggle).each(function () { |
|---|
| 719 | 758 | var $parent = getParent($(this)) |
|---|
| .. | .. |
|---|
| 730 | 769 | |
|---|
| 731 | 770 | if (!selector) { |
|---|
| 732 | 771 | 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 |
|---|
| 734 | 773 | } |
|---|
| 735 | 774 | |
|---|
| 736 | 775 | var $parent = selector && $(selector) |
|---|
| .. | .. |
|---|
| 742 | 781 | // DROPDOWN PLUGIN DEFINITION |
|---|
| 743 | 782 | // ========================== |
|---|
| 744 | 783 | |
|---|
| 745 | | - var old = $.fn.dropdown |
|---|
| 746 | | - |
|---|
| 747 | | - $.fn.dropdown = function (option) { |
|---|
| 784 | + function Plugin(option) { |
|---|
| 748 | 785 | return this.each(function () { |
|---|
| 749 | 786 | var $this = $(this) |
|---|
| 750 | 787 | var data = $this.data('bs.dropdown') |
|---|
| .. | .. |
|---|
| 754 | 791 | }) |
|---|
| 755 | 792 | } |
|---|
| 756 | 793 | |
|---|
| 794 | + var old = $.fn.dropdown |
|---|
| 795 | + |
|---|
| 796 | + $.fn.dropdown = Plugin |
|---|
| 757 | 797 | $.fn.dropdown.Constructor = Dropdown |
|---|
| 758 | 798 | |
|---|
| 759 | 799 | |
|---|
| .. | .. |
|---|
| 773 | 813 | .on('click.bs.dropdown.data-api', clearMenus) |
|---|
| 774 | 814 | .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) |
|---|
| 775 | 815 | .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) |
|---|
| 777 | 817 | |
|---|
| 778 | 818 | }(jQuery); |
|---|
| 779 | 819 | |
|---|
| 780 | 820 | /* ======================================================================== |
|---|
| 781 | | - * Bootstrap: modal.js v3.1.0 |
|---|
| 821 | + * Bootstrap: modal.js v3.2.0 |
|---|
| 782 | 822 | * http://getbootstrap.com/javascript/#modals |
|---|
| 783 | 823 | * ======================================================================== |
|---|
| 784 | 824 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 793 | 833 | // ====================== |
|---|
| 794 | 834 | |
|---|
| 795 | 835 | 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 |
|---|
| 800 | 842 | |
|---|
| 801 | 843 | if (this.options.remote) { |
|---|
| 802 | 844 | this.$element |
|---|
| .. | .. |
|---|
| 807 | 849 | } |
|---|
| 808 | 850 | } |
|---|
| 809 | 851 | |
|---|
| 852 | + Modal.VERSION = '3.2.0' |
|---|
| 853 | + |
|---|
| 810 | 854 | Modal.DEFAULTS = { |
|---|
| 811 | 855 | backdrop: true, |
|---|
| 812 | 856 | keyboard: true, |
|---|
| .. | .. |
|---|
| 814 | 858 | } |
|---|
| 815 | 859 | |
|---|
| 816 | 860 | Modal.prototype.toggle = function (_relatedTarget) { |
|---|
| 817 | | - return this[!this.isShown ? 'show' : 'hide'](_relatedTarget) |
|---|
| 861 | + return this.isShown ? this.hide() : this.show(_relatedTarget) |
|---|
| 818 | 862 | } |
|---|
| 819 | 863 | |
|---|
| 820 | 864 | Modal.prototype.show = function (_relatedTarget) { |
|---|
| .. | .. |
|---|
| 827 | 871 | |
|---|
| 828 | 872 | this.isShown = true |
|---|
| 829 | 873 | |
|---|
| 874 | + this.checkScrollbar() |
|---|
| 875 | + this.$body.addClass('modal-open') |
|---|
| 876 | + |
|---|
| 877 | + this.setScrollbar() |
|---|
| 830 | 878 | this.escape() |
|---|
| 831 | 879 | |
|---|
| 832 | 880 | this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) |
|---|
| .. | .. |
|---|
| 835 | 883 | var transition = $.support.transition && that.$element.hasClass('fade') |
|---|
| 836 | 884 | |
|---|
| 837 | 885 | 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 |
|---|
| 839 | 887 | } |
|---|
| 840 | 888 | |
|---|
| 841 | 889 | that.$element |
|---|
| .. | .. |
|---|
| 856 | 904 | |
|---|
| 857 | 905 | transition ? |
|---|
| 858 | 906 | 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) |
|---|
| 861 | 909 | }) |
|---|
| 862 | 910 | .emulateTransitionEnd(300) : |
|---|
| 863 | | - that.$element.focus().trigger(e) |
|---|
| 911 | + that.$element.trigger('focus').trigger(e) |
|---|
| 864 | 912 | }) |
|---|
| 865 | 913 | } |
|---|
| 866 | 914 | |
|---|
| .. | .. |
|---|
| 875 | 923 | |
|---|
| 876 | 924 | this.isShown = false |
|---|
| 877 | 925 | |
|---|
| 926 | + this.$body.removeClass('modal-open') |
|---|
| 927 | + |
|---|
| 928 | + this.resetScrollbar() |
|---|
| 878 | 929 | this.escape() |
|---|
| 879 | 930 | |
|---|
| 880 | 931 | $(document).off('focusin.bs.modal') |
|---|
| .. | .. |
|---|
| 886 | 937 | |
|---|
| 887 | 938 | $.support.transition && this.$element.hasClass('fade') ? |
|---|
| 888 | 939 | this.$element |
|---|
| 889 | | - .one($.support.transition.end, $.proxy(this.hideModal, this)) |
|---|
| 940 | + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) |
|---|
| 890 | 941 | .emulateTransitionEnd(300) : |
|---|
| 891 | 942 | this.hideModal() |
|---|
| 892 | 943 | } |
|---|
| .. | .. |
|---|
| 896 | 947 | .off('focusin.bs.modal') // guard against infinite focus loop |
|---|
| 897 | 948 | .on('focusin.bs.modal', $.proxy(function (e) { |
|---|
| 898 | 949 | if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { |
|---|
| 899 | | - this.$element.focus() |
|---|
| 950 | + this.$element.trigger('focus') |
|---|
| 900 | 951 | } |
|---|
| 901 | 952 | }, this)) |
|---|
| 902 | 953 | } |
|---|
| .. | .. |
|---|
| 915 | 966 | var that = this |
|---|
| 916 | 967 | this.$element.hide() |
|---|
| 917 | 968 | this.backdrop(function () { |
|---|
| 918 | | - that.removeBackdrop() |
|---|
| 919 | 969 | that.$element.trigger('hidden.bs.modal') |
|---|
| 920 | 970 | }) |
|---|
| 921 | 971 | } |
|---|
| .. | .. |
|---|
| 926 | 976 | } |
|---|
| 927 | 977 | |
|---|
| 928 | 978 | Modal.prototype.backdrop = function (callback) { |
|---|
| 979 | + var that = this |
|---|
| 929 | 980 | var animate = this.$element.hasClass('fade') ? 'fade' : '' |
|---|
| 930 | 981 | |
|---|
| 931 | 982 | if (this.isShown && this.options.backdrop) { |
|---|
| 932 | 983 | var doAnimate = $.support.transition && animate |
|---|
| 933 | 984 | |
|---|
| 934 | 985 | this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') |
|---|
| 935 | | - .appendTo(document.body) |
|---|
| 986 | + .appendTo(this.$body) |
|---|
| 936 | 987 | |
|---|
| 937 | 988 | this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { |
|---|
| 938 | 989 | if (e.target !== e.currentTarget) return |
|---|
| .. | .. |
|---|
| 949 | 1000 | |
|---|
| 950 | 1001 | doAnimate ? |
|---|
| 951 | 1002 | this.$backdrop |
|---|
| 952 | | - .one($.support.transition.end, callback) |
|---|
| 1003 | + .one('bsTransitionEnd', callback) |
|---|
| 953 | 1004 | .emulateTransitionEnd(150) : |
|---|
| 954 | 1005 | callback() |
|---|
| 955 | 1006 | |
|---|
| 956 | 1007 | } else if (!this.isShown && this.$backdrop) { |
|---|
| 957 | 1008 | this.$backdrop.removeClass('in') |
|---|
| 958 | 1009 | |
|---|
| 1010 | + var callbackRemove = function () { |
|---|
| 1011 | + that.removeBackdrop() |
|---|
| 1012 | + callback && callback() |
|---|
| 1013 | + } |
|---|
| 959 | 1014 | $.support.transition && this.$element.hasClass('fade') ? |
|---|
| 960 | 1015 | this.$backdrop |
|---|
| 961 | | - .one($.support.transition.end, callback) |
|---|
| 1016 | + .one('bsTransitionEnd', callbackRemove) |
|---|
| 962 | 1017 | .emulateTransitionEnd(150) : |
|---|
| 963 | | - callback() |
|---|
| 1018 | + callbackRemove() |
|---|
| 964 | 1019 | |
|---|
| 965 | 1020 | } else if (callback) { |
|---|
| 966 | 1021 | callback() |
|---|
| 967 | 1022 | } |
|---|
| 968 | 1023 | } |
|---|
| 969 | 1024 | |
|---|
| 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 | + |
|---|
| 970 | 1048 | |
|---|
| 971 | 1049 | // MODAL PLUGIN DEFINITION |
|---|
| 972 | 1050 | // ======================= |
|---|
| 973 | 1051 | |
|---|
| 974 | | - var old = $.fn.modal |
|---|
| 975 | | - |
|---|
| 976 | | - $.fn.modal = function (option, _relatedTarget) { |
|---|
| 1052 | + function Plugin(option, _relatedTarget) { |
|---|
| 977 | 1053 | return this.each(function () { |
|---|
| 978 | 1054 | var $this = $(this) |
|---|
| 979 | 1055 | var data = $this.data('bs.modal') |
|---|
| .. | .. |
|---|
| 985 | 1061 | }) |
|---|
| 986 | 1062 | } |
|---|
| 987 | 1063 | |
|---|
| 1064 | + var old = $.fn.modal |
|---|
| 1065 | + |
|---|
| 1066 | + $.fn.modal = Plugin |
|---|
| 988 | 1067 | $.fn.modal.Constructor = Modal |
|---|
| 989 | 1068 | |
|---|
| 990 | 1069 | |
|---|
| .. | .. |
|---|
| 1003 | 1082 | $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { |
|---|
| 1004 | 1083 | var $this = $(this) |
|---|
| 1005 | 1084 | 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 |
|---|
| 1007 | 1086 | var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) |
|---|
| 1008 | 1087 | |
|---|
| 1009 | 1088 | if ($this.is('a')) e.preventDefault() |
|---|
| 1010 | 1089 | |
|---|
| 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') |
|---|
| 1015 | 1094 | }) |
|---|
| 1095 | + }) |
|---|
| 1096 | + Plugin.call($target, option, this) |
|---|
| 1016 | 1097 | }) |
|---|
| 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') }) |
|---|
| 1021 | 1098 | |
|---|
| 1022 | 1099 | }(jQuery); |
|---|
| 1023 | 1100 | |
|---|
| 1024 | 1101 | /* ======================================================================== |
|---|
| 1025 | | - * Bootstrap: tooltip.js v3.1.0 |
|---|
| 1102 | + * Bootstrap: tooltip.js v3.2.0 |
|---|
| 1026 | 1103 | * http://getbootstrap.com/javascript/#tooltip |
|---|
| 1027 | 1104 | * Inspired by the original jQuery.tipsy by Jason Frame |
|---|
| 1028 | 1105 | * ======================================================================== |
|---|
| .. | .. |
|---|
| 1048 | 1125 | this.init('tooltip', element, options) |
|---|
| 1049 | 1126 | } |
|---|
| 1050 | 1127 | |
|---|
| 1128 | + Tooltip.VERSION = '3.2.0' |
|---|
| 1129 | + |
|---|
| 1051 | 1130 | Tooltip.DEFAULTS = { |
|---|
| 1052 | 1131 | animation: true, |
|---|
| 1053 | 1132 | placement: 'top', |
|---|
| 1054 | 1133 | 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>', |
|---|
| 1056 | 1135 | trigger: 'hover focus', |
|---|
| 1057 | 1136 | title: '', |
|---|
| 1058 | 1137 | delay: 0, |
|---|
| 1059 | 1138 | html: false, |
|---|
| 1060 | | - container: false |
|---|
| 1139 | + container: false, |
|---|
| 1140 | + viewport: { |
|---|
| 1141 | + selector: 'body', |
|---|
| 1142 | + padding: 0 |
|---|
| 1143 | + } |
|---|
| 1061 | 1144 | } |
|---|
| 1062 | 1145 | |
|---|
| 1063 | 1146 | 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) |
|---|
| 1068 | 1152 | |
|---|
| 1069 | 1153 | var triggers = this.options.trigger.split(' ') |
|---|
| 1070 | 1154 | |
|---|
| .. | .. |
|---|
| 1117 | 1201 | |
|---|
| 1118 | 1202 | Tooltip.prototype.enter = function (obj) { |
|---|
| 1119 | 1203 | 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 | + } |
|---|
| 1121 | 1210 | |
|---|
| 1122 | 1211 | clearTimeout(self.timeout) |
|---|
| 1123 | 1212 | |
|---|
| .. | .. |
|---|
| 1132 | 1221 | |
|---|
| 1133 | 1222 | Tooltip.prototype.leave = function (obj) { |
|---|
| 1134 | 1223 | 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 | + } |
|---|
| 1136 | 1230 | |
|---|
| 1137 | 1231 | clearTimeout(self.timeout) |
|---|
| 1138 | 1232 | |
|---|
| .. | .. |
|---|
| 1151 | 1245 | if (this.hasContent() && this.enabled) { |
|---|
| 1152 | 1246 | this.$element.trigger(e) |
|---|
| 1153 | 1247 | |
|---|
| 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 |
|---|
| 1156 | 1251 | |
|---|
| 1157 | 1252 | var $tip = this.tip() |
|---|
| 1158 | 1253 | |
|---|
| 1254 | + var tipId = this.getUID(this.type) |
|---|
| 1255 | + |
|---|
| 1159 | 1256 | this.setContent() |
|---|
| 1257 | + $tip.attr('id', tipId) |
|---|
| 1258 | + this.$element.attr('aria-describedby', tipId) |
|---|
| 1160 | 1259 | |
|---|
| 1161 | 1260 | if (this.options.animation) $tip.addClass('fade') |
|---|
| 1162 | 1261 | |
|---|
| .. | .. |
|---|
| 1172 | 1271 | .detach() |
|---|
| 1173 | 1272 | .css({ top: 0, left: 0, display: 'block' }) |
|---|
| 1174 | 1273 | .addClass(placement) |
|---|
| 1274 | + .data('bs.' + this.type, this) |
|---|
| 1175 | 1275 | |
|---|
| 1176 | 1276 | this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) |
|---|
| 1177 | 1277 | |
|---|
| .. | .. |
|---|
| 1180 | 1280 | var actualHeight = $tip[0].offsetHeight |
|---|
| 1181 | 1281 | |
|---|
| 1182 | 1282 | if (autoPlace) { |
|---|
| 1183 | | - var $parent = this.$element.parent() |
|---|
| 1184 | | - |
|---|
| 1185 | 1283 | 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) |
|---|
| 1190 | 1286 | |
|---|
| 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' : |
|---|
| 1195 | 1291 | placement |
|---|
| 1196 | 1292 | |
|---|
| 1197 | 1293 | $tip |
|---|
| .. | .. |
|---|
| 1202 | 1298 | var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) |
|---|
| 1203 | 1299 | |
|---|
| 1204 | 1300 | this.applyPlacement(calculatedOffset, placement) |
|---|
| 1205 | | - this.hoverState = null |
|---|
| 1206 | 1301 | |
|---|
| 1207 | | - var complete = function() { |
|---|
| 1302 | + var complete = function () { |
|---|
| 1208 | 1303 | that.$element.trigger('shown.bs.' + that.type) |
|---|
| 1304 | + that.hoverState = null |
|---|
| 1209 | 1305 | } |
|---|
| 1210 | 1306 | |
|---|
| 1211 | 1307 | $.support.transition && this.$tip.hasClass('fade') ? |
|---|
| 1212 | 1308 | $tip |
|---|
| 1213 | | - .one($.support.transition.end, complete) |
|---|
| 1309 | + .one('bsTransitionEnd', complete) |
|---|
| 1214 | 1310 | .emulateTransitionEnd(150) : |
|---|
| 1215 | 1311 | complete() |
|---|
| 1216 | 1312 | } |
|---|
| 1217 | 1313 | } |
|---|
| 1218 | 1314 | |
|---|
| 1219 | 1315 | Tooltip.prototype.applyPlacement = function (offset, placement) { |
|---|
| 1220 | | - var replace |
|---|
| 1221 | 1316 | var $tip = this.tip() |
|---|
| 1222 | 1317 | var width = $tip[0].offsetWidth |
|---|
| 1223 | 1318 | var height = $tip[0].offsetHeight |
|---|
| .. | .. |
|---|
| 1251 | 1346 | var actualHeight = $tip[0].offsetHeight |
|---|
| 1252 | 1347 | |
|---|
| 1253 | 1348 | if (placement == 'top' && actualHeight != height) { |
|---|
| 1254 | | - replace = true |
|---|
| 1255 | 1349 | offset.top = offset.top + height - actualHeight |
|---|
| 1256 | 1350 | } |
|---|
| 1257 | 1351 | |
|---|
| 1258 | | - if (/bottom|top/.test(placement)) { |
|---|
| 1259 | | - var delta = 0 |
|---|
| 1352 | + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) |
|---|
| 1260 | 1353 | |
|---|
| 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 |
|---|
| 1264 | 1356 | |
|---|
| 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' |
|---|
| 1266 | 1360 | |
|---|
| 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) |
|---|
| 1277 | 1363 | } |
|---|
| 1278 | 1364 | |
|---|
| 1279 | 1365 | Tooltip.prototype.replaceArrow = function (delta, dimension, position) { |
|---|
| .. | .. |
|---|
| 1293 | 1379 | var $tip = this.tip() |
|---|
| 1294 | 1380 | var e = $.Event('hide.bs.' + this.type) |
|---|
| 1295 | 1381 | |
|---|
| 1382 | + this.$element.removeAttr('aria-describedby') |
|---|
| 1383 | + |
|---|
| 1296 | 1384 | function complete() { |
|---|
| 1297 | 1385 | if (that.hoverState != 'in') $tip.detach() |
|---|
| 1298 | 1386 | that.$element.trigger('hidden.bs.' + that.type) |
|---|
| .. | .. |
|---|
| 1306 | 1394 | |
|---|
| 1307 | 1395 | $.support.transition && this.$tip.hasClass('fade') ? |
|---|
| 1308 | 1396 | $tip |
|---|
| 1309 | | - .one($.support.transition.end, complete) |
|---|
| 1397 | + .one('bsTransitionEnd', complete) |
|---|
| 1310 | 1398 | .emulateTransitionEnd(150) : |
|---|
| 1311 | 1399 | complete() |
|---|
| 1312 | 1400 | |
|---|
| .. | .. |
|---|
| 1317 | 1405 | |
|---|
| 1318 | 1406 | Tooltip.prototype.fixTitle = function () { |
|---|
| 1319 | 1407 | 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') { |
|---|
| 1321 | 1409 | $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') |
|---|
| 1322 | 1410 | } |
|---|
| 1323 | 1411 | } |
|---|
| .. | .. |
|---|
| 1326 | 1414 | return this.getTitle() |
|---|
| 1327 | 1415 | } |
|---|
| 1328 | 1416 | |
|---|
| 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()) |
|---|
| 1335 | 1426 | } |
|---|
| 1336 | 1427 | |
|---|
| 1337 | 1428 | Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { |
|---|
| .. | .. |
|---|
| 1339 | 1430 | placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : |
|---|
| 1340 | 1431 | placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : |
|---|
| 1341 | 1432 | /* 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 |
|---|
| 1342 | 1462 | } |
|---|
| 1343 | 1463 | |
|---|
| 1344 | 1464 | Tooltip.prototype.getTitle = function () { |
|---|
| .. | .. |
|---|
| 1352 | 1472 | return title |
|---|
| 1353 | 1473 | } |
|---|
| 1354 | 1474 | |
|---|
| 1475 | + Tooltip.prototype.getUID = function (prefix) { |
|---|
| 1476 | + do prefix += ~~(Math.random() * 1000000) |
|---|
| 1477 | + while (document.getElementById(prefix)) |
|---|
| 1478 | + return prefix |
|---|
| 1479 | + } |
|---|
| 1480 | + |
|---|
| 1355 | 1481 | Tooltip.prototype.tip = function () { |
|---|
| 1356 | | - return this.$tip = this.$tip || $(this.options.template) |
|---|
| 1482 | + return (this.$tip = this.$tip || $(this.options.template)) |
|---|
| 1357 | 1483 | } |
|---|
| 1358 | 1484 | |
|---|
| 1359 | 1485 | 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')) |
|---|
| 1361 | 1487 | } |
|---|
| 1362 | 1488 | |
|---|
| 1363 | 1489 | Tooltip.prototype.validate = function () { |
|---|
| .. | .. |
|---|
| 1381 | 1507 | } |
|---|
| 1382 | 1508 | |
|---|
| 1383 | 1509 | 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 | + |
|---|
| 1385 | 1519 | self.tip().hasClass('in') ? self.leave(self) : self.enter(self) |
|---|
| 1386 | 1520 | } |
|---|
| 1387 | 1521 | |
|---|
| .. | .. |
|---|
| 1394 | 1528 | // TOOLTIP PLUGIN DEFINITION |
|---|
| 1395 | 1529 | // ========================= |
|---|
| 1396 | 1530 | |
|---|
| 1397 | | - var old = $.fn.tooltip |
|---|
| 1398 | | - |
|---|
| 1399 | | - $.fn.tooltip = function (option) { |
|---|
| 1531 | + function Plugin(option) { |
|---|
| 1400 | 1532 | return this.each(function () { |
|---|
| 1401 | 1533 | var $this = $(this) |
|---|
| 1402 | 1534 | var data = $this.data('bs.tooltip') |
|---|
| .. | .. |
|---|
| 1408 | 1540 | }) |
|---|
| 1409 | 1541 | } |
|---|
| 1410 | 1542 | |
|---|
| 1543 | + var old = $.fn.tooltip |
|---|
| 1544 | + |
|---|
| 1545 | + $.fn.tooltip = Plugin |
|---|
| 1411 | 1546 | $.fn.tooltip.Constructor = Tooltip |
|---|
| 1412 | 1547 | |
|---|
| 1413 | 1548 | |
|---|
| .. | .. |
|---|
| 1422 | 1557 | }(jQuery); |
|---|
| 1423 | 1558 | |
|---|
| 1424 | 1559 | /* ======================================================================== |
|---|
| 1425 | | - * Bootstrap: popover.js v3.1.0 |
|---|
| 1560 | + * Bootstrap: popover.js v3.2.0 |
|---|
| 1426 | 1561 | * http://getbootstrap.com/javascript/#popovers |
|---|
| 1427 | 1562 | * ======================================================================== |
|---|
| 1428 | 1563 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 1442 | 1577 | |
|---|
| 1443 | 1578 | if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') |
|---|
| 1444 | 1579 | |
|---|
| 1580 | + Popover.VERSION = '3.2.0' |
|---|
| 1581 | + |
|---|
| 1445 | 1582 | Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { |
|---|
| 1446 | 1583 | placement: 'right', |
|---|
| 1447 | 1584 | trigger: 'click', |
|---|
| 1448 | 1585 | 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>' |
|---|
| 1450 | 1587 | }) |
|---|
| 1451 | 1588 | |
|---|
| 1452 | 1589 | |
|---|
| .. | .. |
|---|
| 1467 | 1604 | var content = this.getContent() |
|---|
| 1468 | 1605 | |
|---|
| 1469 | 1606 | $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 |
|---|
| 1471 | 1608 | this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' |
|---|
| 1472 | 1609 | ](content) |
|---|
| 1473 | 1610 | |
|---|
| .. | .. |
|---|
| 1493 | 1630 | } |
|---|
| 1494 | 1631 | |
|---|
| 1495 | 1632 | Popover.prototype.arrow = function () { |
|---|
| 1496 | | - return this.$arrow = this.$arrow || this.tip().find('.arrow') |
|---|
| 1633 | + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) |
|---|
| 1497 | 1634 | } |
|---|
| 1498 | 1635 | |
|---|
| 1499 | 1636 | Popover.prototype.tip = function () { |
|---|
| .. | .. |
|---|
| 1505 | 1642 | // POPOVER PLUGIN DEFINITION |
|---|
| 1506 | 1643 | // ========================= |
|---|
| 1507 | 1644 | |
|---|
| 1508 | | - var old = $.fn.popover |
|---|
| 1509 | | - |
|---|
| 1510 | | - $.fn.popover = function (option) { |
|---|
| 1645 | + function Plugin(option) { |
|---|
| 1511 | 1646 | return this.each(function () { |
|---|
| 1512 | 1647 | var $this = $(this) |
|---|
| 1513 | 1648 | var data = $this.data('bs.popover') |
|---|
| .. | .. |
|---|
| 1519 | 1654 | }) |
|---|
| 1520 | 1655 | } |
|---|
| 1521 | 1656 | |
|---|
| 1657 | + var old = $.fn.popover |
|---|
| 1658 | + |
|---|
| 1659 | + $.fn.popover = Plugin |
|---|
| 1522 | 1660 | $.fn.popover.Constructor = Popover |
|---|
| 1523 | 1661 | |
|---|
| 1524 | 1662 | |
|---|
| .. | .. |
|---|
| 1533 | 1671 | }(jQuery); |
|---|
| 1534 | 1672 | |
|---|
| 1535 | 1673 | /* ======================================================================== |
|---|
| 1536 | | - * Bootstrap: scrollspy.js v3.1.0 |
|---|
| 1674 | + * Bootstrap: scrollspy.js v3.2.0 |
|---|
| 1537 | 1675 | * http://getbootstrap.com/javascript/#scrollspy |
|---|
| 1538 | 1676 | * ======================================================================== |
|---|
| 1539 | 1677 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 1548 | 1686 | // ========================== |
|---|
| 1549 | 1687 | |
|---|
| 1550 | 1688 | function ScrollSpy(element, options) { |
|---|
| 1551 | | - var href |
|---|
| 1552 | 1689 | var process = $.proxy(this.process, this) |
|---|
| 1553 | 1690 | |
|---|
| 1554 | | - this.$element = $(element).is('body') ? $(window) : $(element) |
|---|
| 1555 | 1691 | this.$body = $('body') |
|---|
| 1556 | | - this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process) |
|---|
| 1692 | + this.$scrollElement = $(element).is('body') ? $(window) : $(element) |
|---|
| 1557 | 1693 | 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 = [] |
|---|
| 1563 | 1697 | this.activeTarget = null |
|---|
| 1698 | + this.scrollHeight = 0 |
|---|
| 1564 | 1699 | |
|---|
| 1700 | + this.$scrollElement.on('scroll.bs.scrollspy', process) |
|---|
| 1565 | 1701 | this.refresh() |
|---|
| 1566 | 1702 | this.process() |
|---|
| 1567 | 1703 | } |
|---|
| 1704 | + |
|---|
| 1705 | + ScrollSpy.VERSION = '3.2.0' |
|---|
| 1568 | 1706 | |
|---|
| 1569 | 1707 | ScrollSpy.DEFAULTS = { |
|---|
| 1570 | 1708 | offset: 10 |
|---|
| 1571 | 1709 | } |
|---|
| 1572 | 1710 | |
|---|
| 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 | + } |
|---|
| 1575 | 1714 | |
|---|
| 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() |
|---|
| 1578 | 1727 | |
|---|
| 1579 | 1728 | var self = this |
|---|
| 1580 | | - var $targets = this.$body |
|---|
| 1729 | + |
|---|
| 1730 | + this.$body |
|---|
| 1581 | 1731 | .find(this.selector) |
|---|
| 1582 | 1732 | .map(function () { |
|---|
| 1583 | 1733 | var $el = $(this) |
|---|
| .. | .. |
|---|
| 1587 | 1737 | return ($href |
|---|
| 1588 | 1738 | && $href.length |
|---|
| 1589 | 1739 | && $href.is(':visible') |
|---|
| 1590 | | - && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null |
|---|
| 1740 | + && [[$href[offsetMethod]().top + offsetBase, href]]) || null |
|---|
| 1591 | 1741 | }) |
|---|
| 1592 | 1742 | .sort(function (a, b) { return a[0] - b[0] }) |
|---|
| 1593 | 1743 | .each(function () { |
|---|
| .. | .. |
|---|
| 1598 | 1748 | |
|---|
| 1599 | 1749 | ScrollSpy.prototype.process = function () { |
|---|
| 1600 | 1750 | 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() |
|---|
| 1603 | 1753 | var offsets = this.offsets |
|---|
| 1604 | 1754 | var targets = this.targets |
|---|
| 1605 | 1755 | var activeTarget = this.activeTarget |
|---|
| 1606 | 1756 | var i |
|---|
| 1607 | 1757 | |
|---|
| 1758 | + if (this.scrollHeight != scrollHeight) { |
|---|
| 1759 | + this.refresh() |
|---|
| 1760 | + } |
|---|
| 1761 | + |
|---|
| 1608 | 1762 | if (scrollTop >= maxScroll) { |
|---|
| 1609 | | - return activeTarget != (i = targets.last()[0]) && this.activate(i) |
|---|
| 1763 | + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) |
|---|
| 1610 | 1764 | } |
|---|
| 1611 | 1765 | |
|---|
| 1612 | 1766 | if (activeTarget && scrollTop <= offsets[0]) { |
|---|
| .. | .. |
|---|
| 1617 | 1771 | activeTarget != targets[i] |
|---|
| 1618 | 1772 | && scrollTop >= offsets[i] |
|---|
| 1619 | 1773 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) |
|---|
| 1620 | | - && this.activate( targets[i] ) |
|---|
| 1774 | + && this.activate(targets[i]) |
|---|
| 1621 | 1775 | } |
|---|
| 1622 | 1776 | } |
|---|
| 1623 | 1777 | |
|---|
| .. | .. |
|---|
| 1649 | 1803 | // SCROLLSPY PLUGIN DEFINITION |
|---|
| 1650 | 1804 | // =========================== |
|---|
| 1651 | 1805 | |
|---|
| 1652 | | - var old = $.fn.scrollspy |
|---|
| 1653 | | - |
|---|
| 1654 | | - $.fn.scrollspy = function (option) { |
|---|
| 1806 | + function Plugin(option) { |
|---|
| 1655 | 1807 | return this.each(function () { |
|---|
| 1656 | 1808 | var $this = $(this) |
|---|
| 1657 | 1809 | var data = $this.data('bs.scrollspy') |
|---|
| .. | .. |
|---|
| 1662 | 1814 | }) |
|---|
| 1663 | 1815 | } |
|---|
| 1664 | 1816 | |
|---|
| 1817 | + var old = $.fn.scrollspy |
|---|
| 1818 | + |
|---|
| 1819 | + $.fn.scrollspy = Plugin |
|---|
| 1665 | 1820 | $.fn.scrollspy.Constructor = ScrollSpy |
|---|
| 1666 | 1821 | |
|---|
| 1667 | 1822 | |
|---|
| .. | .. |
|---|
| 1677 | 1832 | // SCROLLSPY DATA-API |
|---|
| 1678 | 1833 | // ================== |
|---|
| 1679 | 1834 | |
|---|
| 1680 | | - $(window).on('load', function () { |
|---|
| 1835 | + $(window).on('load.bs.scrollspy.data-api', function () { |
|---|
| 1681 | 1836 | $('[data-spy="scroll"]').each(function () { |
|---|
| 1682 | 1837 | var $spy = $(this) |
|---|
| 1683 | | - $spy.scrollspy($spy.data()) |
|---|
| 1838 | + Plugin.call($spy, $spy.data()) |
|---|
| 1684 | 1839 | }) |
|---|
| 1685 | 1840 | }) |
|---|
| 1686 | 1841 | |
|---|
| 1687 | 1842 | }(jQuery); |
|---|
| 1688 | 1843 | |
|---|
| 1689 | 1844 | /* ======================================================================== |
|---|
| 1690 | | - * Bootstrap: tab.js v3.1.0 |
|---|
| 1845 | + * Bootstrap: tab.js v3.2.0 |
|---|
| 1691 | 1846 | * http://getbootstrap.com/javascript/#tabs |
|---|
| 1692 | 1847 | * ======================================================================== |
|---|
| 1693 | 1848 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 1705 | 1860 | this.element = $(element) |
|---|
| 1706 | 1861 | } |
|---|
| 1707 | 1862 | |
|---|
| 1863 | + Tab.VERSION = '3.2.0' |
|---|
| 1864 | + |
|---|
| 1708 | 1865 | Tab.prototype.show = function () { |
|---|
| 1709 | 1866 | var $this = this.element |
|---|
| 1710 | 1867 | var $ul = $this.closest('ul:not(.dropdown-menu)') |
|---|
| .. | .. |
|---|
| 1712 | 1869 | |
|---|
| 1713 | 1870 | if (!selector) { |
|---|
| 1714 | 1871 | selector = $this.attr('href') |
|---|
| 1715 | | - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 |
|---|
| 1872 | + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 |
|---|
| 1716 | 1873 | } |
|---|
| 1717 | 1874 | |
|---|
| 1718 | 1875 | if ($this.parent('li').hasClass('active')) return |
|---|
| .. | .. |
|---|
| 1728 | 1885 | |
|---|
| 1729 | 1886 | var $target = $(selector) |
|---|
| 1730 | 1887 | |
|---|
| 1731 | | - this.activate($this.parent('li'), $ul) |
|---|
| 1888 | + this.activate($this.closest('li'), $ul) |
|---|
| 1732 | 1889 | this.activate($target, $target.parent(), function () { |
|---|
| 1733 | 1890 | $this.trigger({ |
|---|
| 1734 | 1891 | type: 'shown.bs.tab', |
|---|
| .. | .. |
|---|
| 1767 | 1924 | |
|---|
| 1768 | 1925 | transition ? |
|---|
| 1769 | 1926 | $active |
|---|
| 1770 | | - .one($.support.transition.end, next) |
|---|
| 1927 | + .one('bsTransitionEnd', next) |
|---|
| 1771 | 1928 | .emulateTransitionEnd(150) : |
|---|
| 1772 | 1929 | next() |
|---|
| 1773 | 1930 | |
|---|
| .. | .. |
|---|
| 1778 | 1935 | // TAB PLUGIN DEFINITION |
|---|
| 1779 | 1936 | // ===================== |
|---|
| 1780 | 1937 | |
|---|
| 1781 | | - var old = $.fn.tab |
|---|
| 1782 | | - |
|---|
| 1783 | | - $.fn.tab = function ( option ) { |
|---|
| 1938 | + function Plugin(option) { |
|---|
| 1784 | 1939 | return this.each(function () { |
|---|
| 1785 | 1940 | var $this = $(this) |
|---|
| 1786 | 1941 | var data = $this.data('bs.tab') |
|---|
| .. | .. |
|---|
| 1790 | 1945 | }) |
|---|
| 1791 | 1946 | } |
|---|
| 1792 | 1947 | |
|---|
| 1948 | + var old = $.fn.tab |
|---|
| 1949 | + |
|---|
| 1950 | + $.fn.tab = Plugin |
|---|
| 1793 | 1951 | $.fn.tab.Constructor = Tab |
|---|
| 1794 | 1952 | |
|---|
| 1795 | 1953 | |
|---|
| .. | .. |
|---|
| 1807 | 1965 | |
|---|
| 1808 | 1966 | $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { |
|---|
| 1809 | 1967 | e.preventDefault() |
|---|
| 1810 | | - $(this).tab('show') |
|---|
| 1968 | + Plugin.call($(this), 'show') |
|---|
| 1811 | 1969 | }) |
|---|
| 1812 | 1970 | |
|---|
| 1813 | 1971 | }(jQuery); |
|---|
| 1814 | 1972 | |
|---|
| 1815 | 1973 | /* ======================================================================== |
|---|
| 1816 | | - * Bootstrap: affix.js v3.1.0 |
|---|
| 1974 | + * Bootstrap: affix.js v3.2.0 |
|---|
| 1817 | 1975 | * http://getbootstrap.com/javascript/#affix |
|---|
| 1818 | 1976 | * ======================================================================== |
|---|
| 1819 | 1977 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| .. | .. |
|---|
| 1829 | 1987 | |
|---|
| 1830 | 1988 | var Affix = function (element, options) { |
|---|
| 1831 | 1989 | this.options = $.extend({}, Affix.DEFAULTS, options) |
|---|
| 1832 | | - this.$window = $(window) |
|---|
| 1990 | + |
|---|
| 1991 | + this.$target = $(this.options.target) |
|---|
| 1833 | 1992 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) |
|---|
| 1834 | 1993 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) |
|---|
| 1835 | 1994 | |
|---|
| .. | .. |
|---|
| 1841 | 2000 | this.checkPosition() |
|---|
| 1842 | 2001 | } |
|---|
| 1843 | 2002 | |
|---|
| 1844 | | - Affix.RESET = 'affix affix-top affix-bottom' |
|---|
| 2003 | + Affix.VERSION = '3.2.0' |
|---|
| 2004 | + |
|---|
| 2005 | + Affix.RESET = 'affix affix-top affix-bottom' |
|---|
| 1845 | 2006 | |
|---|
| 1846 | 2007 | Affix.DEFAULTS = { |
|---|
| 1847 | | - offset: 0 |
|---|
| 2008 | + offset: 0, |
|---|
| 2009 | + target: window |
|---|
| 1848 | 2010 | } |
|---|
| 1849 | 2011 | |
|---|
| 1850 | 2012 | Affix.prototype.getPinnedOffset = function () { |
|---|
| 1851 | 2013 | if (this.pinnedOffset) return this.pinnedOffset |
|---|
| 1852 | 2014 | this.$element.removeClass(Affix.RESET).addClass('affix') |
|---|
| 1853 | | - var scrollTop = this.$window.scrollTop() |
|---|
| 2015 | + var scrollTop = this.$target.scrollTop() |
|---|
| 1854 | 2016 | var position = this.$element.offset() |
|---|
| 1855 | 2017 | return (this.pinnedOffset = position.top - scrollTop) |
|---|
| 1856 | 2018 | } |
|---|
| .. | .. |
|---|
| 1863 | 2025 | if (!this.$element.is(':visible')) return |
|---|
| 1864 | 2026 | |
|---|
| 1865 | 2027 | var scrollHeight = $(document).height() |
|---|
| 1866 | | - var scrollTop = this.$window.scrollTop() |
|---|
| 2028 | + var scrollTop = this.$target.scrollTop() |
|---|
| 1867 | 2029 | var position = this.$element.offset() |
|---|
| 1868 | 2030 | var offset = this.options.offset |
|---|
| 1869 | 2031 | var offsetTop = offset.top |
|---|
| 1870 | 2032 | var offsetBottom = offset.bottom |
|---|
| 1871 | | - |
|---|
| 1872 | | - if (this.affixed == 'top') position.top += scrollTop |
|---|
| 1873 | 2033 | |
|---|
| 1874 | 2034 | if (typeof offset != 'object') offsetBottom = offsetTop = offset |
|---|
| 1875 | 2035 | if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) |
|---|
| .. | .. |
|---|
| 1880 | 2040 | offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false |
|---|
| 1881 | 2041 | |
|---|
| 1882 | 2042 | if (this.affixed === affix) return |
|---|
| 1883 | | - if (this.unpin) this.$element.css('top', '') |
|---|
| 2043 | + if (this.unpin != null) this.$element.css('top', '') |
|---|
| 1884 | 2044 | |
|---|
| 1885 | 2045 | var affixType = 'affix' + (affix ? '-' + affix : '') |
|---|
| 1886 | 2046 | var e = $.Event(affixType + '.bs.affix') |
|---|
| .. | .. |
|---|
| 1898 | 2058 | .trigger($.Event(affixType.replace('affix', 'affixed'))) |
|---|
| 1899 | 2059 | |
|---|
| 1900 | 2060 | 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 | + }) |
|---|
| 1902 | 2064 | } |
|---|
| 1903 | 2065 | } |
|---|
| 1904 | 2066 | |
|---|
| .. | .. |
|---|
| 1906 | 2068 | // AFFIX PLUGIN DEFINITION |
|---|
| 1907 | 2069 | // ======================= |
|---|
| 1908 | 2070 | |
|---|
| 1909 | | - var old = $.fn.affix |
|---|
| 1910 | | - |
|---|
| 1911 | | - $.fn.affix = function (option) { |
|---|
| 2071 | + function Plugin(option) { |
|---|
| 1912 | 2072 | return this.each(function () { |
|---|
| 1913 | 2073 | var $this = $(this) |
|---|
| 1914 | 2074 | var data = $this.data('bs.affix') |
|---|
| .. | .. |
|---|
| 1919 | 2079 | }) |
|---|
| 1920 | 2080 | } |
|---|
| 1921 | 2081 | |
|---|
| 2082 | + var old = $.fn.affix |
|---|
| 2083 | + |
|---|
| 2084 | + $.fn.affix = Plugin |
|---|
| 1922 | 2085 | $.fn.affix.Constructor = Affix |
|---|
| 1923 | 2086 | |
|---|
| 1924 | 2087 | |
|---|
| .. | .. |
|---|
| 1944 | 2107 | if (data.offsetBottom) data.offset.bottom = data.offsetBottom |
|---|
| 1945 | 2108 | if (data.offsetTop) data.offset.top = data.offsetTop |
|---|
| 1946 | 2109 | |
|---|
| 1947 | | - $spy.affix(data) |
|---|
| 2110 | + Plugin.call($spy, data) |
|---|
| 1948 | 2111 | }) |
|---|
| 1949 | 2112 | }) |
|---|
| 1950 | 2113 | |
|---|
| .. | .. |
|---|
| 1 | 1 | /*! |
|---|
| 2 | | - * Bootstrap v3.1.0 (http://getbootstrap.com) |
|---|
| 2 | + * Bootstrap v3.2.0 (http://getbootstrap.com) |
|---|
| 3 | 3 | * Copyright 2011-2014 Twitter, Inc. |
|---|
| 4 | 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) |
|---|
| 5 | 5 | */ |
|---|
| 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); |
|---|