├── .gitignore ├── README.md ├── manifest.yml ├── pom.xml ├── src ├── main │ ├── java │ │ └── org │ │ │ └── springsource │ │ │ └── cloudfoundry │ │ │ └── mvc │ │ │ ├── services │ │ │ ├── Customer.java │ │ │ ├── CustomerService.java │ │ │ └── config │ │ │ │ ├── CloudFoundryDataSourceConfiguration.java │ │ │ │ ├── LocalDataSourceConfiguration.java │ │ │ │ └── ServicesConfiguration.java │ │ │ └── web │ │ │ ├── CustomerApiController.java │ │ │ ├── StatusController.java │ │ │ └── WebMvcConfiguration.java │ ├── resources │ │ ├── config.properties │ │ ├── import_h2.sql │ │ ├── import_psql.sql │ │ ├── log4j.properties │ │ └── messages.properties │ └── webapp │ │ ├── WEB-INF │ │ ├── views │ │ │ └── customers.jsp │ │ └── web.xml │ │ └── web │ │ ├── assets │ │ ├── bootstrap │ │ │ └── bootstrap.css │ │ ├── img │ │ │ └── glyphicons-halflings.png │ │ └── js │ │ │ ├── angular-1.0.0rc6.js │ │ │ └── jquery-1.7.2.min.js │ │ └── views │ │ ├── customers.css │ │ └── customers.js └── test │ └── java │ └── org │ └── springsource │ └── cloudfoundry │ └── mvc │ └── services │ └── CustomerServiceTest.java └── todo.txt /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | *project 3 | .idea 4 | *iml 5 | *settings 6 | *classpath 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spring on Cloud Foundry 2 | 3 | This is a simple application that demonstrates how to use Spring on Cloud Foundry. 4 | 5 | This application builds a transactional service that talks to an RDBMS and is fronted by a Spring MVC controller which handles RESTful API calls. 6 | 7 | Deployment is easy, and there are a lot of options: 8 | 9 | From an Eclipse environment like the SpringSource Tool Suite equipped with the m2e and Cloud Foundry WTP connector support: 10 | 11 | * Import the project into Eclipse using the m2e / m2eclipse plugin - File > Import > Maven > Existing Maven Projects. 12 | * Setup a Cloud Foundry WTP server pointing to the Cloud Foundry cloud you want to target 13 | * Drag and drop the application onto the Cloud Foundry WTP instance, and specify that you need a Redis service and a PostgreSQL service and 512M of RAM. 14 | 15 | You can use the vmc command line tool, too. 16 | * you need to change the name of the application as specified in your manifest.yml file, if there's already an existing application deployed under the same name on the Cloud Foundry instance 17 | * Run 'mvn clean install' on the command line from the root of the project to create a binary. 18 | * From the root of the project, run 'vmc push --path target/springmvc31-1.0.0' 19 | 20 | You should also be able to deploy the project using the Maven Cloud Foundry plugin, which is already configured. You need to specify 21 | connectivity information in your ~/.m2/settings.xml file, as described in http://blog.springsource.org/2011/09/22/rapid-cloud-foundry-deployments-with-maven/ 22 | * you need to change the name of the application as specified in your manifest.yml file, if there's already an existing application deployed under the same name on the Cloud Foundry instance 23 | * from the root of the project, run 'mvn clean install' 24 | * then run 'mvn cf:push' 25 | 26 | 27 | Here are some SQL statements to setup the database: 28 | 29 | ## H2 30 | ``` 31 | insert into customer (firstname ,lastname ,signupdate ) values( 'Juergen' , 'Hoeller', NOW()) ; 32 | insert into customer (firstname ,lastname ,signupdate ) values( 'Mark' , 'Fisher', NOW()) ; 33 | insert into customer (firstname ,lastname ,signupdate ) values( 'Chris' , 'Richardson', NOW()) ; 34 | insert into customer (firstname ,lastname ,signupdate ) values( 'Josh' , 'Long', NOW()) ; 35 | insert into customer (firstname ,lastname ,signupdate ) values( 'Dave' , 'Syer', NOW()) ; 36 | insert into customer (firstname ,lastname ,signupdate ) values( 'Matt' , 'Quinlan', NOW()) ; 37 | insert into customer (firstname ,lastname ,signupdate ) values( 'Gunnar' , 'Hillert', NOW()) ; 38 | insert into customer (firstname ,lastname ,signupdate ) values( 'Dave' , 'McCrory', NOW()) ; 39 | insert into customer (firstname ,lastname ,signupdate ) values( 'Raja' , 'Rao', NOW()) ; 40 | insert into customer (firstname ,lastname ,signupdate ) values( 'Monica' , 'Wilkinson', NOW()) ; 41 | ``` 42 | 43 | ## PostgreSQL 44 | ``` 45 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Mark', 'Fisher', NOW()) ; 46 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Juergen', 'Hoeller', NOW()) ; 47 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Chris', 'Richardson', NOW()) ; 48 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Dave', 'Syer', NOW()) ; 49 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Patrick', 'Chanezon', NOW()) ; 50 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Gunnar', 'Hiller', NOW()) ; 51 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Josh', 'Long', NOW()) ; 52 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Dave', 'McCrory', NOW()) ; 53 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Raja', 'Rao', NOW()) ; 54 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Andy', 'Piper', NOW()) ; 55 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Eric', 'Bottard', NOW()) ; 56 | ``` 57 | -------------------------------------------------------------------------------- /manifest.yml: -------------------------------------------------------------------------------- 1 | --- 2 | applications: 3 | - name: springmvc-hibernate-template 4 | memory: 512M 5 | instances: 1 6 | host: springmvc-hibernate-template-${random-word} 7 | domain: cfapps.io 8 | path: target/web-1.0.0.war 9 | services: 10 | - springmvc-hibernate-db 11 | - springmvc-hibernate-redis 12 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | org.springsource.cloudfoundry.mvc 6 | web 7 | A Spring / Cloud Foundry Template 8 | war 9 | 1.0.0 10 | 11 | 12 | 1.6 13 | 3.2.4.RELEASE 14 | 2.2.2 15 | 1.0.1.BUILD-SNAPSHOT 16 | 17 | 18 | 19 | 20 | org.springframework.cloud 21 | spring-cloud-cloudfoundry-connector 22 | ${spring-cloud.version} 23 | 24 | 25 | org.springframework.cloud 26 | spring-cloud-localconfig-connector 27 | ${spring-cloud.version} 28 | 29 | 30 | org.springframework.cloud 31 | spring-cloud-spring-service-connector 32 | ${spring-cloud.version} 33 | 34 | 35 | 36 | postgresql 37 | postgresql 38 | 9.1-901-1.jdbc4 39 | 40 | 41 | commons-dbcp 42 | commons-dbcp 43 | 1.4 44 | 45 | 46 | org.springframework.data 47 | spring-data-redis 48 | 1.0.0.RELEASE 49 | 50 | 51 | org.thymeleaf 52 | thymeleaf-spring3 53 | 2.0.6 54 | 55 | 56 | org.slf4j 57 | slf4j-api 58 | 1.5.6 59 | 60 | 61 | org.slf4j 62 | slf4j-log4j12 63 | 1.5.6 64 | compile 65 | 66 | 67 | org.hibernate 68 | hibernate-entitymanager 69 | 4.0.0.Final 70 | 71 | 72 | com.h2database 73 | h2 74 | 1.3.162 75 | 76 | 77 | javax.servlet 78 | jstl 79 | 1.2 80 | 81 | 82 | org.glassfish.web 83 | jstl-impl 84 | 1.2 85 | provided 86 | 87 | 88 | com.fasterxml.jackson.core 89 | jackson-core 90 | ${jackson.version} 91 | 92 | 93 | com.fasterxml.jackson.core 94 | jackson-databind 95 | ${jackson.version} 96 | 97 | 98 | 99 | javax.validation 100 | validation-api 101 | 1.0.0.GA 102 | 103 | 104 | junit 105 | junit 106 | 4.8.1 107 | 108 | 109 | org.hibernate 110 | hibernate-validator 111 | 4.0.0.GA 112 | 113 | 114 | org.springframework 115 | spring-test 116 | ${org.springframework-version} 117 | 118 | 119 | org.springframework 120 | spring-webmvc 121 | ${org.springframework-version} 122 | 123 | 124 | org.springframework 125 | spring-aop 126 | ${org.springframework-version} 127 | 128 | 129 | org.springframework 130 | spring-core 131 | ${org.springframework-version} 132 | 133 | 134 | org.springframework 135 | spring-tx 136 | ${org.springframework-version} 137 | 138 | 139 | org.springframework 140 | spring-context 141 | ${org.springframework-version} 142 | 143 | 144 | org.springframework 145 | spring-context-support 146 | ${org.springframework-version} 147 | 148 | 149 | 150 | org.springframework 151 | spring-orm 152 | ${org.springframework-version} 153 | 154 | 155 | org.mortbay.jetty 156 | servlet-api 157 | 3.0.20100224 158 | provided 159 | 160 | 161 | cglib 162 | cglib 163 | 2.2.2 164 | 165 | 166 | 167 | 168 | repository.springframework.maven.milestone 169 | Spring Framework Maven Milestone Repository 170 | http://maven.springframework.org/milestone 171 | 172 | 173 | repository.springframework.maven.snapshot 174 | Spring Framework Maven Milestone Repository 175 | http://maven.springframework.org/snapshot 176 | 177 | 178 | 179 | 180 | repository.springframework.maven.milestone 181 | Spring Framework Maven Milestone Repository 182 | http://maven.springframework.org/milestone 183 | 184 | 185 | 186 | 187 | 188 | 189 | org.apache.maven.plugins 190 | maven-compiler-plugin 191 | 2.3.2 192 | 193 | ${java-version} 194 | ${java-version} 195 | 196 | 197 | 198 | org.apache.maven.plugins 199 | maven-war-plugin 200 | 2.1.1 201 | 202 | false 203 | 204 | 205 | 206 | 207 | 208 | 209 | -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/services/Customer.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.services; 2 | 3 | import javax.persistence.Entity; 4 | import javax.persistence.GeneratedValue; 5 | import javax.persistence.GenerationType; 6 | import javax.persistence.Id; 7 | import javax.validation.constraints.NotNull; 8 | import java.io.Serializable; 9 | import java.util.Date; 10 | 11 | @Entity 12 | public class Customer implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | @Id 17 | @GeneratedValue(strategy = GenerationType.AUTO) 18 | private Integer id; 19 | 20 | @NotNull 21 | private Date signupDate; 22 | 23 | @NotNull 24 | private String firstName; 25 | 26 | @NotNull 27 | private String lastName; 28 | 29 | public Integer getId() { 30 | return id; 31 | } 32 | 33 | public void setId(Integer id) { 34 | this.id = id; 35 | } 36 | 37 | public String getFirstName() { 38 | return firstName; 39 | } 40 | 41 | public void setFirstName(String firstName) { 42 | this.firstName = firstName; 43 | } 44 | 45 | public String getLastName() { 46 | return lastName; 47 | } 48 | 49 | public void setLastName(String lastName) { 50 | this.lastName = lastName; 51 | } 52 | 53 | public Date getSignupDate() { 54 | return signupDate; 55 | } 56 | 57 | public void setSignupDate(Date signupDate) { 58 | this.signupDate = signupDate; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/services/CustomerService.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.services; 2 | 3 | import org.springframework.cache.annotation.CacheEvict; 4 | import org.springframework.cache.annotation.Cacheable; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.transaction.annotation.Transactional; 7 | 8 | import javax.persistence.EntityManager; 9 | import javax.persistence.PersistenceContext; 10 | import java.util.Collection; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | @Service 15 | @SuppressWarnings("unchecked") 16 | @Transactional 17 | public class CustomerService { 18 | 19 | static private final String CUSTOMERS_REGION = "customers"; 20 | 21 | @PersistenceContext 22 | private EntityManager em; 23 | 24 | public Customer createCustomer(String firstName, String lastName, Date signupDate) { 25 | Customer customer = new Customer(); 26 | customer.setFirstName(firstName); 27 | customer.setLastName(lastName); 28 | customer.setSignupDate(signupDate); 29 | em.persist(customer); 30 | return customer; 31 | } 32 | 33 | public Collection search(String name) { 34 | String sqlName = ("%" + name + "%").toLowerCase(); 35 | String sql = "select c.* from customer c where (LOWER( c.firstName ) LIKE :fn OR LOWER( c.lastName ) LIKE :ln)"; 36 | return em.createNativeQuery(sql, Customer.class) 37 | .setParameter("fn", sqlName) 38 | .setParameter("ln", sqlName) 39 | .getResultList(); 40 | } 41 | 42 | 43 | @Transactional(readOnly = true) 44 | public List getAllCustomers() { 45 | return em.createQuery("SELECT * FROM " + Customer.class.getName()).getResultList(); 46 | } 47 | 48 | 49 | @Cacheable(CUSTOMERS_REGION) 50 | @Transactional(readOnly = true) 51 | public Customer getCustomerById(Integer id) { 52 | return em.find(Customer.class, id); 53 | } 54 | 55 | @CacheEvict(CUSTOMERS_REGION) 56 | public void deleteCustomer(Integer id) { 57 | Customer customer = getCustomerById(id); 58 | em.remove(customer); 59 | } 60 | 61 | @CacheEvict(value = CUSTOMERS_REGION, key = "#id") 62 | public void updateCustomer(Integer id, String fn, String ln, Date birthday) { 63 | Customer customer = getCustomerById(id); 64 | customer.setLastName(ln); 65 | customer.setSignupDate(birthday); 66 | customer.setFirstName(fn); 67 | //sessionFactory.getCurrentSession().update(customer); 68 | em.merge(customer); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/services/config/CloudFoundryDataSourceConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.services.config; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import javax.sql.DataSource; 7 | 8 | import org.hibernate.dialect.PostgreSQLDialect; 9 | import org.hibernate.ejb.HibernatePersistence; 10 | import org.springframework.cache.CacheManager; 11 | import org.springframework.cloud.config.java.AbstractCloudConfig; 12 | import org.springframework.context.annotation.Bean; 13 | import org.springframework.context.annotation.Configuration; 14 | import org.springframework.context.annotation.Profile; 15 | import org.springframework.data.redis.cache.RedisCacheManager; 16 | import org.springframework.data.redis.connection.RedisConnectionFactory; 17 | import org.springframework.data.redis.core.RedisTemplate; 18 | import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 19 | import org.springsource.cloudfoundry.mvc.services.Customer; 20 | 21 | @Configuration 22 | @Profile("cloud") 23 | public class CloudFoundryDataSourceConfiguration extends AbstractCloudConfig { 24 | 25 | @Bean 26 | public DataSource dataSource() { 27 | return connectionFactory().dataSource(); 28 | } 29 | 30 | @Bean 31 | public RedisConnectionFactory redisConnectionFactory() { 32 | return connectionFactory().redisConnectionFactory(); 33 | } 34 | 35 | @Bean 36 | public RedisTemplate redisTemplate() throws Exception { 37 | RedisTemplate ro = new RedisTemplate(); 38 | ro.setConnectionFactory(redisConnectionFactory()); 39 | return ro; 40 | } 41 | 42 | 43 | @Bean 44 | public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean( DataSource dataSource ) throws Exception { 45 | LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 46 | em.setDataSource( dataSource ); 47 | em.setPackagesToScan(Customer.class.getPackage().getName()); 48 | em.setPersistenceProvider(new HibernatePersistence()); 49 | Map p = new HashMap(); 50 | p.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, "create"); 51 | p.put(org.hibernate.cfg.Environment.HBM2DDL_IMPORT_FILES, "import_psql.sql"); 52 | p.put(org.hibernate.cfg.Environment.DIALECT, PostgreSQLDialect.class.getName()); 53 | p.put(org.hibernate.cfg.Environment.SHOW_SQL, "true"); 54 | em.setJpaPropertyMap(p); 55 | return em; 56 | } 57 | 58 | @Bean 59 | public CacheManager cacheManager() throws Exception { 60 | return new RedisCacheManager(redisTemplate()); 61 | } 62 | 63 | } 64 | 65 | -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/services/config/LocalDataSourceConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.services.config; 2 | 3 | 4 | import org.hibernate.dialect.H2Dialect; 5 | import org.hibernate.ejb.HibernatePersistence; 6 | import org.springframework.cache.Cache; 7 | import org.springframework.cache.CacheManager; 8 | import org.springframework.cache.concurrent.ConcurrentMapCache; 9 | import org.springframework.cache.support.SimpleCacheManager; 10 | import org.springframework.context.annotation.Bean; 11 | import org.springframework.context.annotation.Configuration; 12 | import org.springframework.context.annotation.Profile; 13 | import org.springframework.core.env.Environment; 14 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; 15 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; 16 | import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; 17 | import org.springsource.cloudfoundry.mvc.services.Customer; 18 | 19 | import javax.sql.DataSource; 20 | import java.util.Arrays; 21 | import java.util.HashMap; 22 | import java.util.Map; 23 | 24 | @Configuration 25 | @Profile("default") 26 | public class LocalDataSourceConfiguration { 27 | 28 | 29 | @Bean 30 | public DataSource dataSource( Environment environment ) throws Exception { 31 | 32 | return new EmbeddedDatabaseBuilder() 33 | .setName("crm") 34 | .setType(EmbeddedDatabaseType.H2) 35 | .build(); 36 | 37 | /* 38 | String user = environment.getProperty("ds.user"), 39 | pw = environment.getProperty("ds.password"), 40 | url = environment.getProperty("ds.url"); 41 | Class driverClass = environment.getPropertyAsClass( "ds.driverClass", Driver.class ); 42 | 43 | BasicDataSource basicDataSource = new BasicDataSource(); 44 | basicDataSource.setDriverClassName( driverClass.getName() ); 45 | basicDataSource.setPassword( pw ); 46 | basicDataSource.setUrl( url ); 47 | basicDataSource.setUsername( user ); 48 | basicDataSource.setInitialSize( 5 ); 49 | basicDataSource.setMaxActive( 10 ); 50 | return basicDataSource; 51 | */ 52 | 53 | } 54 | 55 | @Bean 56 | public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean( DataSource dataSource ) throws Exception { 57 | LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 58 | em.setDataSource( dataSource ); 59 | em.setPackagesToScan(Customer.class.getPackage().getName()); 60 | em.setPersistenceProvider(new HibernatePersistence()); 61 | Map p = new HashMap(); 62 | p.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, "create"); 63 | p.put(org.hibernate.cfg.Environment.HBM2DDL_IMPORT_FILES, "import_h2.sql"); 64 | p.put(org.hibernate.cfg.Environment.DIALECT, H2Dialect.class.getName()); 65 | p.put(org.hibernate.cfg.Environment.SHOW_SQL, "true"); 66 | em.setJpaPropertyMap(p); 67 | return em; 68 | } 69 | 70 | @Bean 71 | public CacheManager cacheManager() throws Exception { 72 | SimpleCacheManager scm = new SimpleCacheManager(); 73 | Cache cache = new ConcurrentMapCache("customers"); 74 | scm.setCaches(Arrays.asList(cache)); 75 | return scm; 76 | } 77 | 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/services/config/ServicesConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.services.config; 2 | 3 | import javax.persistence.EntityManagerFactory; 4 | 5 | import org.springframework.cache.annotation.EnableCaching; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.ComponentScan; 8 | import org.springframework.context.annotation.Configuration; 9 | import org.springframework.context.annotation.Import; 10 | import org.springframework.context.annotation.PropertySource; 11 | import org.springframework.orm.jpa.JpaTransactionManager; 12 | import org.springframework.transaction.PlatformTransactionManager; 13 | import org.springframework.transaction.annotation.EnableTransactionManagement; 14 | import org.springsource.cloudfoundry.mvc.services.CustomerService; 15 | 16 | 17 | @Configuration 18 | @PropertySource("/config.properties") 19 | @EnableCaching 20 | @EnableTransactionManagement 21 | @Import({CloudFoundryDataSourceConfiguration.class, LocalDataSourceConfiguration.class}) 22 | @ComponentScan(basePackageClasses = {CustomerService.class}) 23 | public class ServicesConfiguration { 24 | 25 | @Bean 26 | public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) throws Exception { 27 | return new JpaTransactionManager(entityManagerFactory); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/web/CustomerApiController.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.web; 2 | 3 | import org.apache.log4j.Logger; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.web.bind.annotation.*; 7 | import org.springsource.cloudfoundry.mvc.services.Customer; 8 | import org.springsource.cloudfoundry.mvc.services.CustomerService; 9 | 10 | import java.util.Collection; 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | @Controller 15 | public class CustomerApiController { 16 | private Logger log = Logger.getLogger(getClass()); 17 | 18 | @Autowired private CustomerService customerService; 19 | 20 | public static final String CUSTOMERS_ENTRY_URL = "/crm/customers"; 21 | public static final String CUSTOMERS_SEARCH_URL = "/crm/search"; 22 | public static final String CUSTOMERS_BY_ID_ENTRY_URL = CUSTOMERS_ENTRY_URL + "/{id}"; 23 | 24 | @ResponseBody 25 | @RequestMapping(value = CUSTOMERS_SEARCH_URL, method = RequestMethod.GET) 26 | public Collection search(@RequestParam("q") String query) throws Exception { 27 | Collection customers = customerService.search(query); 28 | if (log.isDebugEnabled()) 29 | log.debug(String.format("retrieved %s results for search query '%s'", Integer.toString(customers.size()), query)); 30 | return customers; 31 | } 32 | 33 | @ResponseBody 34 | @RequestMapping(value = CUSTOMERS_BY_ID_ENTRY_URL, method = RequestMethod.GET) 35 | public Customer customerById(@PathVariable Integer id) { 36 | return this.customerService.getCustomerById(id); 37 | } 38 | 39 | @ResponseBody 40 | @RequestMapping(value = CUSTOMERS_ENTRY_URL, method = RequestMethod.GET) 41 | public List customers() { 42 | return this.customerService.getAllCustomers(); 43 | } 44 | 45 | @ResponseBody 46 | @RequestMapping(value = CUSTOMERS_ENTRY_URL, method = RequestMethod.PUT) 47 | public Integer addCustomer(@RequestParam String firstName, @RequestParam String lastName) { 48 | return customerService.createCustomer(firstName, lastName, new Date()).getId(); 49 | } 50 | 51 | @ResponseBody 52 | @RequestMapping(value = CUSTOMERS_BY_ID_ENTRY_URL, method = RequestMethod.POST) 53 | public Integer updateCustomer(@PathVariable Integer id, @RequestBody Customer customer) { 54 | customerService.updateCustomer(id, customer.getFirstName(), customer.getLastName(), customer.getSignupDate()); 55 | return id; 56 | } 57 | } -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/web/StatusController.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.web; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | import java.util.Map.Entry; 6 | import java.util.Properties; 7 | 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.cloud.Cloud; 10 | import org.springframework.context.annotation.Profile; 11 | import org.springframework.stereotype.Controller; 12 | import org.springframework.web.bind.annotation.RequestMapping; 13 | import org.springframework.web.bind.annotation.ResponseBody; 14 | 15 | /** 16 | * Simple example demonstrating the unique environment properties of your application 17 | * Obviously, these endpoints shouldn't be included if you go to production! 18 | * 19 | * @author Josh Long 20 | */ 21 | @Controller 22 | @Profile("cloud") 23 | public class StatusController { 24 | 25 | @Autowired private Cloud cloud; 26 | 27 | @RequestMapping(value = "/properties") 28 | @ResponseBody 29 | public Map properties() throws Throwable { 30 | Properties props = System.getProperties(); 31 | Map kvs = new HashMap(); 32 | for (String k : props.stringPropertyNames()) 33 | kvs.put(k, props.getProperty(k)); 34 | return kvs; 35 | } 36 | 37 | @RequestMapping(value = "/env") 38 | @ResponseBody 39 | public Map env() throws Throwable { 40 | return System.getenv(); 41 | } 42 | 43 | @ResponseBody 44 | @RequestMapping(value = "/status") 45 | public Map showCloudProperties() { 46 | Map props = new HashMap(); 47 | 48 | for (Entry entry: cloud.getCloudProperties().entrySet()) { 49 | props.put(entry.getKey().toString(), entry.getValue().toString()); 50 | } 51 | return props; 52 | } 53 | } -------------------------------------------------------------------------------- /src/main/java/org/springsource/cloudfoundry/mvc/web/WebMvcConfiguration.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.web; 2 | 3 | import org.springframework.context.MessageSource; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.ComponentScan; 6 | import org.springframework.context.annotation.Configuration; 7 | import org.springframework.context.support.ResourceBundleMessageSource; 8 | import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; 9 | import org.springframework.web.servlet.config.annotation.EnableWebMvc; 10 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 11 | import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; 12 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 13 | import org.springframework.web.servlet.view.InternalResourceViewResolver; 14 | import org.springframework.web.servlet.view.JstlView; 15 | 16 | 17 | @Configuration 18 | @EnableWebMvc 19 | @ComponentScan 20 | public class WebMvcConfiguration extends WebMvcConfigurerAdapter { 21 | 22 | @Bean 23 | public InternalResourceViewResolver internalResourceViewResolver() { 24 | InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); 25 | internalResourceViewResolver.setViewClass(JstlView.class); 26 | internalResourceViewResolver.setPrefix("/WEB-INF/views/"); 27 | internalResourceViewResolver.setSuffix(".jsp"); 28 | return internalResourceViewResolver; 29 | } 30 | 31 | @Bean 32 | public MessageSource messageSource() { 33 | String[] baseNames = "messages".split(","); 34 | ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource(); 35 | resourceBundleMessageSource.setBasenames(baseNames); 36 | return resourceBundleMessageSource; 37 | } 38 | 39 | @Override 40 | public void addResourceHandlers(ResourceHandlerRegistry registry) { 41 | registry.addResourceHandler("/web/**").addResourceLocations("/web/"); 42 | } 43 | 44 | @Override 45 | public void addViewControllers(ViewControllerRegistry registry) { 46 | registry.addViewController("/").setViewName("customers"); 47 | } 48 | 49 | @Override 50 | public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 51 | configurer.enable(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/resources/config.properties: -------------------------------------------------------------------------------- 1 | debug = true 2 | ds.driverClass = org.h2.Driver 3 | ds.url= jdbc:h2:tcp://localhost/~/crm 4 | ds.user=sa 5 | ds.password = 6 | -------------------------------------------------------------------------------- /src/main/resources/import_h2.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO customer(firstname, lastname, signupdate) values ('Juergen','Hoeller', NOW() ); 2 | INSERT INTO customer(firstname, lastname, signupdate) values ('Mark','Fisher', NOW() ); 3 | INSERT INTO customer(firstname, lastname, signupdate) values ('Rod','Johnson', NOW() ); 4 | INSERT INTO customer(firstname, lastname, signupdate) values ('David','Syer', NOW() ); 5 | INSERT INTO customer(firstname, lastname, signupdate) values ('Gunnar','Hillert', NOW() ); 6 | INSERT INTO customer(firstname, lastname, signupdate) values ('Dave','McCrory', NOW() ); 7 | INSERT INTO customer(firstname, lastname, signupdate) values ('Josh','Long', NOW() ); 8 | INSERT INTO customer(firstname, lastname, signupdate) values ('Patrick','Chanezon', NOW() ); 9 | INSERT INTO customer(firstname, lastname, signupdate) values ('Andy','Piper', NOW() ); 10 | INSERT INTO customer(firstname, lastname, signupdate) values ('Eric','Bottard', NOW() ); 11 | INSERT INTO customer(firstname, lastname, signupdate) values ('Chris','Richardson', NOW() ); 12 | INSERT INTO customer(firstname, lastname, signupdate) values ('Raja','Rao', NOW() ); 13 | INSERT INTO customer(firstname, lastname, signupdate) values ('Rajdeep','Dua', NOW() ); 14 | INSERT INTO customer(firstname, lastname, signupdate) values ('Monica','Wilkinson', NOW() ); 15 | INSERT INTO customer(firstname, lastname, signupdate) values ('Mark','Pollack', NOW() ); 16 | -------------------------------------------------------------------------------- /src/main/resources/import_psql.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Juergen', 'Hoeller', NOW()); 2 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Mark', 'Fisher', NOW()); 3 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Rod', 'Johnson', NOW()); 4 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'David', 'Syer', NOW()); 5 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Gunnar', 'Hillert', NOW()); 6 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Dave', 'McCrory', NOW()); 7 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Josh', 'Long', NOW()); 8 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Patrick', 'Chanezon', NOW()); 9 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Andy', 'Piper', NOW()); 10 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Eric', 'Bottard', NOW()); 11 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Chris', 'Richardson', NOW()); 12 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Raja', 'Rao', NOW()); 13 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Rajdeep', 'Dua', NOW()); 14 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Monica', 'Wilkinson', NOW()); 15 | INSERT INTO customer(id, firstname, lastname, signupdate) values( nextval( 'hibernate_sequence') , 'Mark', 'Pollack', NOW()); -------------------------------------------------------------------------------- /src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | # Direct log messages to stdout 2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 | log4j.appender.stdout.Target=System.out 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 6 | 7 | # Root logger option 8 | log4j.rootLogger=DEBUG,stdout 9 | 10 | -------------------------------------------------------------------------------- /src/main/resources/messages.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry-samples/springmvc-hibernate-template/c0ff9e8035d45a7ff255d806e1843e32e5c94741/src/main/resources/messages.properties -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/views/customers.jsp: -------------------------------------------------------------------------------- 1 | <%@ page session="false" %> 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 23 | 24 |
25 | 26 |
27 | 48 |
49 | 50 | 51 |
52 |
53 | 54 | Create New Customer 55 | Update {{customer.firstName}} {{customer.lastName}} - {{customer.id}} 56 | 57 |
58 | 59 | 60 |
61 | 63 | 64 |

Change the first name

65 |
66 |
67 |
68 | 69 | 70 |
71 | 73 | 74 |

Change the last name

75 |
76 |
77 | 78 |
79 | 82 | 83 |
84 |
85 |
86 |
87 | 88 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | contextClass 8 | 9 | org.springframework.web.context.support.AnnotationConfigWebApplicationContext 10 | 11 | 12 | 13 | 14 | contextConfigLocation 15 | org.springsource.cloudfoundry.mvc.services.config.ServicesConfiguration 16 | 17 | 18 | 19 | org.springframework.web.context.ContextLoaderListener 20 | 21 | 22 | 23 | hiddenHttpMethodFilter 24 | org.springframework.web.filter.HiddenHttpMethodFilter 25 | 26 | 27 | hiddenHttpMethodFilter 28 | appServlet 29 | 30 | 31 | 32 | appServlet 33 | org.springframework.web.servlet.DispatcherServlet 34 | 35 | contextClass 36 | org.springframework.web.context.support.AnnotationConfigWebApplicationContext 37 | 38 | 39 | contextConfigLocation 40 | org.springsource.cloudfoundry.mvc.web.WebMvcConfiguration 41 | 42 | 1 43 | 44 | 45 | 46 | appServlet 47 | / 48 | 49 | -------------------------------------------------------------------------------- /src/main/webapp/web/assets/bootstrap/bootstrap.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v2.0.3 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */ 10 | 11 | article, 12 | aside, 13 | details, 14 | figcaption, 15 | figure, 16 | footer, 17 | header, 18 | hgroup, 19 | nav, 20 | section { 21 | display: block; 22 | } 23 | 24 | audio, 25 | canvas, 26 | video { 27 | display: inline-block; 28 | *display: inline; 29 | *zoom: 1; 30 | } 31 | 32 | audio:not([controls]) { 33 | display: none; 34 | } 35 | 36 | html { 37 | font-size: 100%; 38 | -webkit-text-size-adjust: 100%; 39 | -ms-text-size-adjust: 100%; 40 | } 41 | 42 | a:focus { 43 | outline: thin dotted #333; 44 | outline: 5px auto -webkit-focus-ring-color; 45 | outline-offset: -2px; 46 | } 47 | 48 | a:hover, 49 | a:active { 50 | outline: 0; 51 | } 52 | 53 | sub, 54 | sup { 55 | position: relative; 56 | font-size: 75%; 57 | line-height: 0; 58 | vertical-align: baseline; 59 | } 60 | 61 | sup { 62 | top: -0.5em; 63 | } 64 | 65 | sub { 66 | bottom: -0.25em; 67 | } 68 | 69 | img { 70 | max-width: 100%; 71 | vertical-align: middle; 72 | border: 0; 73 | -ms-interpolation-mode: bicubic; 74 | } 75 | 76 | button, 77 | input, 78 | select, 79 | textarea { 80 | margin: 0; 81 | font-size: 100%; 82 | vertical-align: middle; 83 | } 84 | 85 | button, 86 | input { 87 | *overflow: visible; 88 | line-height: normal; 89 | } 90 | 91 | button::-moz-focus-inner, 92 | input::-moz-focus-inner { 93 | padding: 0; 94 | border: 0; 95 | } 96 | 97 | button, 98 | input[type="button"], 99 | input[type="reset"], 100 | input[type="submit"] { 101 | cursor: pointer; 102 | -webkit-appearance: button; 103 | } 104 | 105 | input[type="search"] { 106 | -webkit-box-sizing: content-box; 107 | -moz-box-sizing: content-box; 108 | box-sizing: content-box; 109 | -webkit-appearance: textfield; 110 | } 111 | 112 | input[type="search"]::-webkit-search-decoration, 113 | input[type="search"]::-webkit-search-cancel-button { 114 | -webkit-appearance: none; 115 | } 116 | 117 | textarea { 118 | overflow: auto; 119 | vertical-align: top; 120 | } 121 | 122 | .clearfix { 123 | *zoom: 1; 124 | } 125 | 126 | .clearfix:before, 127 | .clearfix:after { 128 | display: table; 129 | content: ""; 130 | } 131 | 132 | .clearfix:after { 133 | clear: both; 134 | } 135 | 136 | .hide-text { 137 | font: 0/0 a; 138 | color: transparent; 139 | text-shadow: none; 140 | background-color: transparent; 141 | border: 0; 142 | } 143 | 144 | .input-block-level { 145 | display: block; 146 | width: 100%; 147 | min-height: 28px; 148 | -webkit-box-sizing: border-box; 149 | -moz-box-sizing: border-box; 150 | -ms-box-sizing: border-box; 151 | box-sizing: border-box; 152 | } 153 | 154 | body { 155 | margin: 0; 156 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 157 | font-size: 13px; 158 | line-height: 18px; 159 | color: #333333; 160 | background-color: #ffffff; 161 | } 162 | 163 | a { 164 | color: #0088cc; 165 | text-decoration: none; 166 | } 167 | 168 | a:hover { 169 | color: #005580; 170 | text-decoration: underline; 171 | } 172 | 173 | .row { 174 | margin-left: -20px; 175 | *zoom: 1; 176 | } 177 | 178 | .row:before, 179 | .row:after { 180 | display: table; 181 | content: ""; 182 | } 183 | 184 | .row:after { 185 | clear: both; 186 | } 187 | 188 | [class*="span"] { 189 | float: left; 190 | margin-left: 20px; 191 | } 192 | 193 | .container, 194 | .navbar-fixed-top .container, 195 | .navbar-fixed-bottom .container { 196 | width: 940px; 197 | } 198 | 199 | .span12 { 200 | width: 940px; 201 | } 202 | 203 | .span11 { 204 | width: 860px; 205 | } 206 | 207 | .span10 { 208 | width: 780px; 209 | } 210 | 211 | .span9 { 212 | width: 700px; 213 | } 214 | 215 | .span8 { 216 | width: 620px; 217 | } 218 | 219 | .span7 { 220 | width: 540px; 221 | } 222 | 223 | .span6 { 224 | width: 460px; 225 | } 226 | 227 | .span5 { 228 | width: 380px; 229 | } 230 | 231 | .span4 { 232 | width: 300px; 233 | } 234 | 235 | .span3 { 236 | width: 220px; 237 | } 238 | 239 | .span2 { 240 | width: 140px; 241 | } 242 | 243 | .span1 { 244 | width: 60px; 245 | } 246 | 247 | .offset12 { 248 | margin-left: 980px; 249 | } 250 | 251 | .offset11 { 252 | margin-left: 900px; 253 | } 254 | 255 | .offset10 { 256 | margin-left: 820px; 257 | } 258 | 259 | .offset9 { 260 | margin-left: 740px; 261 | } 262 | 263 | .offset8 { 264 | margin-left: 660px; 265 | } 266 | 267 | .offset7 { 268 | margin-left: 580px; 269 | } 270 | 271 | .offset6 { 272 | margin-left: 500px; 273 | } 274 | 275 | .offset5 { 276 | margin-left: 420px; 277 | } 278 | 279 | .offset4 { 280 | margin-left: 340px; 281 | } 282 | 283 | .offset3 { 284 | margin-left: 260px; 285 | } 286 | 287 | .offset2 { 288 | margin-left: 180px; 289 | } 290 | 291 | .offset1 { 292 | margin-left: 100px; 293 | } 294 | 295 | .row-fluid { 296 | width: 100%; 297 | *zoom: 1; 298 | } 299 | 300 | .row-fluid:before, 301 | .row-fluid:after { 302 | display: table; 303 | content: ""; 304 | } 305 | 306 | .row-fluid:after { 307 | clear: both; 308 | } 309 | 310 | .row-fluid [class*="span"] { 311 | display: block; 312 | float: left; 313 | width: 100%; 314 | min-height: 28px; 315 | margin-left: 2.127659574%; 316 | *margin-left: 2.0744680846382977%; 317 | -webkit-box-sizing: border-box; 318 | -moz-box-sizing: border-box; 319 | -ms-box-sizing: border-box; 320 | box-sizing: border-box; 321 | } 322 | 323 | .row-fluid [class*="span"]:first-child { 324 | margin-left: 0; 325 | } 326 | 327 | .row-fluid .span12 { 328 | width: 99.99999998999999%; 329 | *width: 99.94680850063828%; 330 | } 331 | 332 | .row-fluid .span11 { 333 | width: 91.489361693%; 334 | *width: 91.4361702036383%; 335 | } 336 | 337 | .row-fluid .span10 { 338 | width: 82.97872339599999%; 339 | *width: 82.92553190663828%; 340 | } 341 | 342 | .row-fluid .span9 { 343 | width: 74.468085099%; 344 | *width: 74.4148936096383%; 345 | } 346 | 347 | .row-fluid .span8 { 348 | width: 65.95744680199999%; 349 | *width: 65.90425531263828%; 350 | } 351 | 352 | .row-fluid .span7 { 353 | width: 57.446808505%; 354 | *width: 57.3936170156383%; 355 | } 356 | 357 | .row-fluid .span6 { 358 | width: 48.93617020799999%; 359 | *width: 48.88297871863829%; 360 | } 361 | 362 | .row-fluid .span5 { 363 | width: 40.425531911%; 364 | *width: 40.3723404216383%; 365 | } 366 | 367 | .row-fluid .span4 { 368 | width: 31.914893614%; 369 | *width: 31.8617021246383%; 370 | } 371 | 372 | .row-fluid .span3 { 373 | width: 23.404255317%; 374 | *width: 23.3510638276383%; 375 | } 376 | 377 | .row-fluid .span2 { 378 | width: 14.89361702%; 379 | *width: 14.8404255306383%; 380 | } 381 | 382 | .row-fluid .span1 { 383 | width: 6.382978723%; 384 | *width: 6.329787233638298%; 385 | } 386 | 387 | .container { 388 | margin-right: auto; 389 | margin-left: auto; 390 | *zoom: 1; 391 | } 392 | 393 | .container:before, 394 | .container:after { 395 | display: table; 396 | content: ""; 397 | } 398 | 399 | .container:after { 400 | clear: both; 401 | } 402 | 403 | .container-fluid { 404 | padding-right: 20px; 405 | padding-left: 20px; 406 | *zoom: 1; 407 | } 408 | 409 | .container-fluid:before, 410 | .container-fluid:after { 411 | display: table; 412 | content: ""; 413 | } 414 | 415 | .container-fluid:after { 416 | clear: both; 417 | } 418 | 419 | p { 420 | margin: 0 0 9px; 421 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 422 | font-size: 13px; 423 | line-height: 18px; 424 | } 425 | 426 | p small { 427 | font-size: 11px; 428 | color: #999999; 429 | } 430 | 431 | .lead { 432 | margin-bottom: 18px; 433 | font-size: 20px; 434 | font-weight: 200; 435 | line-height: 27px; 436 | } 437 | 438 | h1, 439 | h2, 440 | h3, 441 | h4, 442 | h5, 443 | h6 { 444 | margin: 0; 445 | font-family: inherit; 446 | font-weight: bold; 447 | color: inherit; 448 | text-rendering: optimizelegibility; 449 | } 450 | 451 | h1 small, 452 | h2 small, 453 | h3 small, 454 | h4 small, 455 | h5 small, 456 | h6 small { 457 | font-weight: normal; 458 | color: #999999; 459 | } 460 | 461 | h1 { 462 | font-size: 30px; 463 | line-height: 36px; 464 | } 465 | 466 | h1 small { 467 | font-size: 18px; 468 | } 469 | 470 | h2 { 471 | font-size: 24px; 472 | line-height: 36px; 473 | } 474 | 475 | h2 small { 476 | font-size: 18px; 477 | } 478 | 479 | h3 { 480 | font-size: 18px; 481 | line-height: 27px; 482 | } 483 | 484 | h3 small { 485 | font-size: 14px; 486 | } 487 | 488 | h4, 489 | h5, 490 | h6 { 491 | line-height: 18px; 492 | } 493 | 494 | h4 { 495 | font-size: 14px; 496 | } 497 | 498 | h4 small { 499 | font-size: 12px; 500 | } 501 | 502 | h5 { 503 | font-size: 12px; 504 | } 505 | 506 | h6 { 507 | font-size: 11px; 508 | color: #999999; 509 | text-transform: uppercase; 510 | } 511 | 512 | .page-header { 513 | padding-bottom: 17px; 514 | margin: 18px 0; 515 | border-bottom: 1px solid #eeeeee; 516 | } 517 | 518 | .page-header h1 { 519 | line-height: 1; 520 | } 521 | 522 | ul, 523 | ol { 524 | padding: 0; 525 | margin: 0 0 9px 25px; 526 | } 527 | 528 | ul ul, 529 | ul ol, 530 | ol ol, 531 | ol ul { 532 | margin-bottom: 0; 533 | } 534 | 535 | ul { 536 | list-style: disc; 537 | } 538 | 539 | ol { 540 | list-style: decimal; 541 | } 542 | 543 | li { 544 | line-height: 18px; 545 | } 546 | 547 | ul.unstyled, 548 | ol.unstyled { 549 | margin-left: 0; 550 | list-style: none; 551 | } 552 | 553 | dl { 554 | margin-bottom: 18px; 555 | } 556 | 557 | dt, 558 | dd { 559 | line-height: 18px; 560 | } 561 | 562 | dt { 563 | font-weight: bold; 564 | line-height: 17px; 565 | } 566 | 567 | dd { 568 | margin-left: 9px; 569 | } 570 | 571 | .dl-horizontal dt { 572 | float: left; 573 | width: 120px; 574 | overflow: hidden; 575 | clear: left; 576 | text-align: right; 577 | text-overflow: ellipsis; 578 | white-space: nowrap; 579 | } 580 | 581 | .dl-horizontal dd { 582 | margin-left: 130px; 583 | } 584 | 585 | hr { 586 | margin: 18px 0; 587 | border: 0; 588 | border-top: 1px solid #eeeeee; 589 | border-bottom: 1px solid #ffffff; 590 | } 591 | 592 | strong { 593 | font-weight: bold; 594 | } 595 | 596 | em { 597 | font-style: italic; 598 | } 599 | 600 | .muted { 601 | color: #999999; 602 | } 603 | 604 | abbr[title] { 605 | cursor: help; 606 | border-bottom: 1px dotted #ddd; 607 | } 608 | 609 | abbr.initialism { 610 | font-size: 90%; 611 | text-transform: uppercase; 612 | } 613 | 614 | blockquote { 615 | padding: 0 0 0 15px; 616 | margin: 0 0 18px; 617 | border-left: 5px solid #eeeeee; 618 | } 619 | 620 | blockquote p { 621 | margin-bottom: 0; 622 | font-size: 16px; 623 | font-weight: 300; 624 | line-height: 22.5px; 625 | } 626 | 627 | blockquote small { 628 | display: block; 629 | line-height: 18px; 630 | color: #999999; 631 | } 632 | 633 | blockquote small:before { 634 | content: '\2014 \00A0'; 635 | } 636 | 637 | blockquote.pull-right { 638 | float: right; 639 | padding-right: 15px; 640 | padding-left: 0; 641 | border-right: 5px solid #eeeeee; 642 | border-left: 0; 643 | } 644 | 645 | blockquote.pull-right p, 646 | blockquote.pull-right small { 647 | text-align: right; 648 | } 649 | 650 | q:before, 651 | q:after, 652 | blockquote:before, 653 | blockquote:after { 654 | content: ""; 655 | } 656 | 657 | address { 658 | display: block; 659 | margin-bottom: 18px; 660 | font-style: normal; 661 | line-height: 18px; 662 | } 663 | 664 | small { 665 | font-size: 100%; 666 | } 667 | 668 | cite { 669 | font-style: normal; 670 | } 671 | 672 | code, 673 | pre { 674 | padding: 0 3px 2px; 675 | font-family: Menlo, Monaco, Consolas, "Courier New", monospace; 676 | font-size: 12px; 677 | color: #333333; 678 | -webkit-border-radius: 3px; 679 | -moz-border-radius: 3px; 680 | border-radius: 3px; 681 | } 682 | 683 | code { 684 | padding: 2px 4px; 685 | color: #d14; 686 | background-color: #f7f7f9; 687 | border: 1px solid #e1e1e8; 688 | } 689 | 690 | pre { 691 | display: block; 692 | padding: 8.5px; 693 | margin: 0 0 9px; 694 | font-size: 12.025px; 695 | line-height: 18px; 696 | word-break: break-all; 697 | word-wrap: break-word; 698 | white-space: pre; 699 | white-space: pre-wrap; 700 | background-color: #f5f5f5; 701 | border: 1px solid #ccc; 702 | border: 1px solid rgba(0, 0, 0, 0.15); 703 | -webkit-border-radius: 4px; 704 | -moz-border-radius: 4px; 705 | border-radius: 4px; 706 | } 707 | 708 | pre.prettyprint { 709 | margin-bottom: 18px; 710 | } 711 | 712 | pre code { 713 | padding: 0; 714 | color: inherit; 715 | background-color: transparent; 716 | border: 0; 717 | } 718 | 719 | .pre-scrollable { 720 | max-height: 340px; 721 | overflow-y: scroll; 722 | } 723 | 724 | form { 725 | margin: 0 0 18px; 726 | } 727 | 728 | fieldset { 729 | padding: 0; 730 | margin: 0; 731 | border: 0; 732 | } 733 | 734 | legend { 735 | display: block; 736 | width: 100%; 737 | padding: 0; 738 | margin-bottom: 27px; 739 | font-size: 19.5px; 740 | line-height: 36px; 741 | color: #333333; 742 | border: 0; 743 | border-bottom: 1px solid #eee; 744 | } 745 | 746 | legend small { 747 | font-size: 13.5px; 748 | color: #999999; 749 | } 750 | 751 | label, 752 | input, 753 | button, 754 | select, 755 | textarea { 756 | font-size: 13px; 757 | font-weight: normal; 758 | line-height: 18px; 759 | } 760 | 761 | input, 762 | button, 763 | select, 764 | textarea { 765 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 766 | } 767 | 768 | label { 769 | display: block; 770 | margin-bottom: 5px; 771 | color: #333333; 772 | } 773 | 774 | input, 775 | textarea, 776 | select, 777 | .uneditable-input { 778 | display: inline-block; 779 | width: 210px; 780 | height: 18px; 781 | padding: 4px; 782 | margin-bottom: 9px; 783 | font-size: 13px; 784 | line-height: 18px; 785 | color: #555555; 786 | background-color: #ffffff; 787 | border: 1px solid #cccccc; 788 | -webkit-border-radius: 3px; 789 | -moz-border-radius: 3px; 790 | border-radius: 3px; 791 | } 792 | 793 | .uneditable-textarea { 794 | width: auto; 795 | height: auto; 796 | } 797 | 798 | label input, 799 | label textarea, 800 | label select { 801 | display: block; 802 | } 803 | 804 | input[type="image"], 805 | input[type="checkbox"], 806 | input[type="radio"] { 807 | width: auto; 808 | height: auto; 809 | padding: 0; 810 | margin: 3px 0; 811 | *margin-top: 0; 812 | /* IE7 */ 813 | 814 | line-height: normal; 815 | cursor: pointer; 816 | background-color: transparent; 817 | border: 0 \9; 818 | /* IE9 and down */ 819 | 820 | -webkit-border-radius: 0; 821 | -moz-border-radius: 0; 822 | border-radius: 0; 823 | } 824 | 825 | input[type="image"] { 826 | border: 0; 827 | } 828 | 829 | input[type="file"] { 830 | width: auto; 831 | padding: initial; 832 | line-height: initial; 833 | background-color: #ffffff; 834 | background-color: initial; 835 | border: initial; 836 | -webkit-box-shadow: none; 837 | -moz-box-shadow: none; 838 | box-shadow: none; 839 | } 840 | 841 | input[type="button"], 842 | input[type="reset"], 843 | input[type="submit"] { 844 | width: auto; 845 | height: auto; 846 | } 847 | 848 | select, 849 | input[type="file"] { 850 | height: 28px; 851 | /* In IE7, the height of the select element cannot be changed by height, only font-size */ 852 | 853 | *margin-top: 4px; 854 | /* For IE7, add top margin to align select with labels */ 855 | 856 | line-height: 28px; 857 | } 858 | 859 | input[type="file"] { 860 | line-height: 18px \9; 861 | } 862 | 863 | select { 864 | width: 220px; 865 | background-color: #ffffff; 866 | } 867 | 868 | select[multiple], 869 | select[size] { 870 | height: auto; 871 | } 872 | 873 | input[type="image"] { 874 | -webkit-box-shadow: none; 875 | -moz-box-shadow: none; 876 | box-shadow: none; 877 | } 878 | 879 | textarea { 880 | height: auto; 881 | } 882 | 883 | input[type="hidden"] { 884 | display: none; 885 | } 886 | 887 | .radio, 888 | .checkbox { 889 | min-height: 18px; 890 | padding-left: 18px; 891 | } 892 | 893 | .radio input[type="radio"], 894 | .checkbox input[type="checkbox"] { 895 | float: left; 896 | margin-left: -18px; 897 | } 898 | 899 | .controls > .radio:first-child, 900 | .controls > .checkbox:first-child { 901 | padding-top: 5px; 902 | } 903 | 904 | .radio.inline, 905 | .checkbox.inline { 906 | display: inline-block; 907 | padding-top: 5px; 908 | margin-bottom: 0; 909 | vertical-align: middle; 910 | } 911 | 912 | .radio.inline + .radio.inline, 913 | .checkbox.inline + .checkbox.inline { 914 | margin-left: 10px; 915 | } 916 | 917 | input, 918 | textarea { 919 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 920 | -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 921 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 922 | -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; 923 | -moz-transition: border linear 0.2s, box-shadow linear 0.2s; 924 | -ms-transition: border linear 0.2s, box-shadow linear 0.2s; 925 | -o-transition: border linear 0.2s, box-shadow linear 0.2s; 926 | transition: border linear 0.2s, box-shadow linear 0.2s; 927 | } 928 | 929 | input:focus, 930 | textarea:focus { 931 | border-color: rgba(82, 168, 236, 0.8); 932 | outline: 0; 933 | outline: thin dotted \9; 934 | /* IE6-9 */ 935 | 936 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); 937 | -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); 938 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); 939 | } 940 | 941 | input[type="file"]:focus, 942 | input[type="radio"]:focus, 943 | input[type="checkbox"]:focus, 944 | select:focus { 945 | outline: thin dotted #333; 946 | outline: 5px auto -webkit-focus-ring-color; 947 | outline-offset: -2px; 948 | -webkit-box-shadow: none; 949 | -moz-box-shadow: none; 950 | box-shadow: none; 951 | } 952 | 953 | .input-mini { 954 | width: 60px; 955 | } 956 | 957 | .input-small { 958 | width: 90px; 959 | } 960 | 961 | .input-medium { 962 | width: 150px; 963 | } 964 | 965 | .input-large { 966 | width: 210px; 967 | } 968 | 969 | .input-xlarge { 970 | width: 270px; 971 | } 972 | 973 | .input-xxlarge { 974 | width: 530px; 975 | } 976 | 977 | input[class*="span"], 978 | select[class*="span"], 979 | textarea[class*="span"], 980 | .uneditable-input[class*="span"], 981 | .row-fluid input[class*="span"], 982 | .row-fluid select[class*="span"], 983 | .row-fluid textarea[class*="span"], 984 | .row-fluid .uneditable-input[class*="span"] { 985 | float: none; 986 | margin-left: 0; 987 | } 988 | 989 | input, 990 | textarea, 991 | .uneditable-input { 992 | margin-left: 0; 993 | } 994 | 995 | input.span12, 996 | textarea.span12, 997 | .uneditable-input.span12 { 998 | width: 930px; 999 | } 1000 | 1001 | input.span11, 1002 | textarea.span11, 1003 | .uneditable-input.span11 { 1004 | width: 850px; 1005 | } 1006 | 1007 | input.span10, 1008 | textarea.span10, 1009 | .uneditable-input.span10 { 1010 | width: 770px; 1011 | } 1012 | 1013 | input.span9, 1014 | textarea.span9, 1015 | .uneditable-input.span9 { 1016 | width: 690px; 1017 | } 1018 | 1019 | input.span8, 1020 | textarea.span8, 1021 | .uneditable-input.span8 { 1022 | width: 610px; 1023 | } 1024 | 1025 | input.span7, 1026 | textarea.span7, 1027 | .uneditable-input.span7 { 1028 | width: 530px; 1029 | } 1030 | 1031 | input.span6, 1032 | textarea.span6, 1033 | .uneditable-input.span6 { 1034 | width: 450px; 1035 | } 1036 | 1037 | input.span5, 1038 | textarea.span5, 1039 | .uneditable-input.span5 { 1040 | width: 370px; 1041 | } 1042 | 1043 | input.span4, 1044 | textarea.span4, 1045 | .uneditable-input.span4 { 1046 | width: 290px; 1047 | } 1048 | 1049 | input.span3, 1050 | textarea.span3, 1051 | .uneditable-input.span3 { 1052 | width: 210px; 1053 | } 1054 | 1055 | input.span2, 1056 | textarea.span2, 1057 | .uneditable-input.span2 { 1058 | width: 130px; 1059 | } 1060 | 1061 | input.span1, 1062 | textarea.span1, 1063 | .uneditable-input.span1 { 1064 | width: 50px; 1065 | } 1066 | 1067 | input[disabled], 1068 | select[disabled], 1069 | textarea[disabled], 1070 | input[readonly], 1071 | select[readonly], 1072 | textarea[readonly] { 1073 | cursor: not-allowed; 1074 | background-color: #eeeeee; 1075 | border-color: #ddd; 1076 | } 1077 | 1078 | input[type="radio"][disabled], 1079 | input[type="checkbox"][disabled], 1080 | input[type="radio"][readonly], 1081 | input[type="checkbox"][readonly] { 1082 | background-color: transparent; 1083 | } 1084 | 1085 | .control-group.warning > label, 1086 | .control-group.warning .help-block, 1087 | .control-group.warning .help-inline { 1088 | color: #c09853; 1089 | } 1090 | 1091 | .control-group.warning input, 1092 | .control-group.warning select, 1093 | .control-group.warning textarea { 1094 | color: #c09853; 1095 | border-color: #c09853; 1096 | } 1097 | 1098 | .control-group.warning input:focus, 1099 | .control-group.warning select:focus, 1100 | .control-group.warning textarea:focus { 1101 | border-color: #a47e3c; 1102 | -webkit-box-shadow: 0 0 6px #dbc59e; 1103 | -moz-box-shadow: 0 0 6px #dbc59e; 1104 | box-shadow: 0 0 6px #dbc59e; 1105 | } 1106 | 1107 | .control-group.warning .input-prepend .add-on, 1108 | .control-group.warning .input-append .add-on { 1109 | color: #c09853; 1110 | background-color: #fcf8e3; 1111 | border-color: #c09853; 1112 | } 1113 | 1114 | .control-group.error > label, 1115 | .control-group.error .help-block, 1116 | .control-group.error .help-inline { 1117 | color: #b94a48; 1118 | } 1119 | 1120 | .control-group.error input, 1121 | .control-group.error select, 1122 | .control-group.error textarea { 1123 | color: #b94a48; 1124 | border-color: #b94a48; 1125 | } 1126 | 1127 | .control-group.error input:focus, 1128 | .control-group.error select:focus, 1129 | .control-group.error textarea:focus { 1130 | border-color: #953b39; 1131 | -webkit-box-shadow: 0 0 6px #d59392; 1132 | -moz-box-shadow: 0 0 6px #d59392; 1133 | box-shadow: 0 0 6px #d59392; 1134 | } 1135 | 1136 | .control-group.error .input-prepend .add-on, 1137 | .control-group.error .input-append .add-on { 1138 | color: #b94a48; 1139 | background-color: #f2dede; 1140 | border-color: #b94a48; 1141 | } 1142 | 1143 | .control-group.success > label, 1144 | .control-group.success .help-block, 1145 | .control-group.success .help-inline { 1146 | color: #468847; 1147 | } 1148 | 1149 | .control-group.success input, 1150 | .control-group.success select, 1151 | .control-group.success textarea { 1152 | color: #468847; 1153 | border-color: #468847; 1154 | } 1155 | 1156 | .control-group.success input:focus, 1157 | .control-group.success select:focus, 1158 | .control-group.success textarea:focus { 1159 | border-color: #356635; 1160 | -webkit-box-shadow: 0 0 6px #7aba7b; 1161 | -moz-box-shadow: 0 0 6px #7aba7b; 1162 | box-shadow: 0 0 6px #7aba7b; 1163 | } 1164 | 1165 | .control-group.success .input-prepend .add-on, 1166 | .control-group.success .input-append .add-on { 1167 | color: #468847; 1168 | background-color: #dff0d8; 1169 | border-color: #468847; 1170 | } 1171 | 1172 | input:focus:required:invalid, 1173 | textarea:focus:required:invalid, 1174 | select:focus:required:invalid { 1175 | color: #b94a48; 1176 | border-color: #ee5f5b; 1177 | } 1178 | 1179 | input:focus:required:invalid:focus, 1180 | textarea:focus:required:invalid:focus, 1181 | select:focus:required:invalid:focus { 1182 | border-color: #e9322d; 1183 | -webkit-box-shadow: 0 0 6px #f8b9b7; 1184 | -moz-box-shadow: 0 0 6px #f8b9b7; 1185 | box-shadow: 0 0 6px #f8b9b7; 1186 | } 1187 | 1188 | .form-actions { 1189 | padding: 17px 20px 18px; 1190 | margin-top: 18px; 1191 | margin-bottom: 18px; 1192 | background-color: #f5f5f5; 1193 | border-top: 1px solid #ddd; 1194 | *zoom: 1; 1195 | } 1196 | 1197 | .form-actions:before, 1198 | .form-actions:after { 1199 | display: table; 1200 | content: ""; 1201 | } 1202 | 1203 | .form-actions:after { 1204 | clear: both; 1205 | } 1206 | 1207 | .uneditable-input { 1208 | overflow: hidden; 1209 | white-space: nowrap; 1210 | cursor: not-allowed; 1211 | background-color: #ffffff; 1212 | border-color: #eee; 1213 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); 1214 | -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); 1215 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); 1216 | } 1217 | 1218 | :-moz-placeholder { 1219 | color: #999999; 1220 | } 1221 | 1222 | ::-webkit-input-placeholder { 1223 | color: #999999; 1224 | } 1225 | 1226 | .help-block, 1227 | .help-inline { 1228 | color: #555555; 1229 | } 1230 | 1231 | .help-block { 1232 | display: block; 1233 | margin-bottom: 9px; 1234 | } 1235 | 1236 | .help-inline { 1237 | display: inline-block; 1238 | *display: inline; 1239 | padding-left: 5px; 1240 | vertical-align: middle; 1241 | *zoom: 1; 1242 | } 1243 | 1244 | .input-prepend, 1245 | .input-append { 1246 | margin-bottom: 5px; 1247 | } 1248 | 1249 | .input-prepend input, 1250 | .input-append input, 1251 | .input-prepend select, 1252 | .input-append select, 1253 | .input-prepend .uneditable-input, 1254 | .input-append .uneditable-input { 1255 | position: relative; 1256 | margin-bottom: 0; 1257 | *margin-left: 0; 1258 | vertical-align: middle; 1259 | -webkit-border-radius: 0 3px 3px 0; 1260 | -moz-border-radius: 0 3px 3px 0; 1261 | border-radius: 0 3px 3px 0; 1262 | } 1263 | 1264 | .input-prepend input:focus, 1265 | .input-append input:focus, 1266 | .input-prepend select:focus, 1267 | .input-append select:focus, 1268 | .input-prepend .uneditable-input:focus, 1269 | .input-append .uneditable-input:focus { 1270 | z-index: 2; 1271 | } 1272 | 1273 | .input-prepend .uneditable-input, 1274 | .input-append .uneditable-input { 1275 | border-left-color: #ccc; 1276 | } 1277 | 1278 | .input-prepend .add-on, 1279 | .input-append .add-on { 1280 | display: inline-block; 1281 | width: auto; 1282 | height: 18px; 1283 | min-width: 16px; 1284 | padding: 4px 5px; 1285 | font-weight: normal; 1286 | line-height: 18px; 1287 | text-align: center; 1288 | text-shadow: 0 1px 0 #ffffff; 1289 | vertical-align: middle; 1290 | background-color: #eeeeee; 1291 | border: 1px solid #ccc; 1292 | } 1293 | 1294 | .input-prepend .add-on, 1295 | .input-append .add-on, 1296 | .input-prepend .btn, 1297 | .input-append .btn { 1298 | margin-left: -1px; 1299 | -webkit-border-radius: 0; 1300 | -moz-border-radius: 0; 1301 | border-radius: 0; 1302 | } 1303 | 1304 | .input-prepend .active, 1305 | .input-append .active { 1306 | background-color: #a9dba9; 1307 | border-color: #46a546; 1308 | } 1309 | 1310 | .input-prepend .add-on, 1311 | .input-prepend .btn { 1312 | margin-right: -1px; 1313 | } 1314 | 1315 | .input-prepend .add-on:first-child, 1316 | .input-prepend .btn:first-child { 1317 | -webkit-border-radius: 3px 0 0 3px; 1318 | -moz-border-radius: 3px 0 0 3px; 1319 | border-radius: 3px 0 0 3px; 1320 | } 1321 | 1322 | .input-append input, 1323 | .input-append select, 1324 | .input-append .uneditable-input { 1325 | -webkit-border-radius: 3px 0 0 3px; 1326 | -moz-border-radius: 3px 0 0 3px; 1327 | border-radius: 3px 0 0 3px; 1328 | } 1329 | 1330 | .input-append .uneditable-input { 1331 | border-right-color: #ccc; 1332 | border-left-color: #eee; 1333 | } 1334 | 1335 | .input-append .add-on:last-child, 1336 | .input-append .btn:last-child { 1337 | -webkit-border-radius: 0 3px 3px 0; 1338 | -moz-border-radius: 0 3px 3px 0; 1339 | border-radius: 0 3px 3px 0; 1340 | } 1341 | 1342 | .input-prepend.input-append input, 1343 | .input-prepend.input-append select, 1344 | .input-prepend.input-append .uneditable-input { 1345 | -webkit-border-radius: 0; 1346 | -moz-border-radius: 0; 1347 | border-radius: 0; 1348 | } 1349 | 1350 | .input-prepend.input-append .add-on:first-child, 1351 | .input-prepend.input-append .btn:first-child { 1352 | margin-right: -1px; 1353 | -webkit-border-radius: 3px 0 0 3px; 1354 | -moz-border-radius: 3px 0 0 3px; 1355 | border-radius: 3px 0 0 3px; 1356 | } 1357 | 1358 | .input-prepend.input-append .add-on:last-child, 1359 | .input-prepend.input-append .btn:last-child { 1360 | margin-left: -1px; 1361 | -webkit-border-radius: 0 3px 3px 0; 1362 | -moz-border-radius: 0 3px 3px 0; 1363 | border-radius: 0 3px 3px 0; 1364 | } 1365 | 1366 | .search-query { 1367 | padding-right: 14px; 1368 | padding-right: 4px \9; 1369 | padding-left: 14px; 1370 | padding-left: 4px \9; 1371 | /* IE7-8 doesn't have border-radius, so don't indent the padding */ 1372 | 1373 | margin-bottom: 0; 1374 | -webkit-border-radius: 14px; 1375 | -moz-border-radius: 14px; 1376 | border-radius: 14px; 1377 | } 1378 | 1379 | .form-search input, 1380 | .form-inline input, 1381 | .form-horizontal input, 1382 | .form-search textarea, 1383 | .form-inline textarea, 1384 | .form-horizontal textarea, 1385 | .form-search select, 1386 | .form-inline select, 1387 | .form-horizontal select, 1388 | .form-search .help-inline, 1389 | .form-inline .help-inline, 1390 | .form-horizontal .help-inline, 1391 | .form-search .uneditable-input, 1392 | .form-inline .uneditable-input, 1393 | .form-horizontal .uneditable-input, 1394 | .form-search .input-prepend, 1395 | .form-inline .input-prepend, 1396 | .form-horizontal .input-prepend, 1397 | .form-search .input-append, 1398 | .form-inline .input-append, 1399 | .form-horizontal .input-append { 1400 | display: inline-block; 1401 | *display: inline; 1402 | margin-bottom: 0; 1403 | *zoom: 1; 1404 | } 1405 | 1406 | .form-search .hide, 1407 | .form-inline .hide, 1408 | .form-horizontal .hide { 1409 | display: none; 1410 | } 1411 | 1412 | .form-search label, 1413 | .form-inline label { 1414 | display: inline-block; 1415 | } 1416 | 1417 | .form-search .input-append, 1418 | .form-inline .input-append, 1419 | .form-search .input-prepend, 1420 | .form-inline .input-prepend { 1421 | margin-bottom: 0; 1422 | } 1423 | 1424 | .form-search .radio, 1425 | .form-search .checkbox, 1426 | .form-inline .radio, 1427 | .form-inline .checkbox { 1428 | padding-left: 0; 1429 | margin-bottom: 0; 1430 | vertical-align: middle; 1431 | } 1432 | 1433 | .form-search .radio input[type="radio"], 1434 | .form-search .checkbox input[type="checkbox"], 1435 | .form-inline .radio input[type="radio"], 1436 | .form-inline .checkbox input[type="checkbox"] { 1437 | float: left; 1438 | margin-right: 3px; 1439 | margin-left: 0; 1440 | } 1441 | 1442 | .control-group { 1443 | margin-bottom: 9px; 1444 | } 1445 | 1446 | legend + .control-group { 1447 | margin-top: 18px; 1448 | -webkit-margin-top-collapse: separate; 1449 | } 1450 | 1451 | .form-horizontal .control-group { 1452 | margin-bottom: 18px; 1453 | *zoom: 1; 1454 | } 1455 | 1456 | .form-horizontal .control-group:before, 1457 | .form-horizontal .control-group:after { 1458 | display: table; 1459 | content: ""; 1460 | } 1461 | 1462 | .form-horizontal .control-group:after { 1463 | clear: both; 1464 | } 1465 | 1466 | .form-horizontal .control-label { 1467 | float: left; 1468 | width: 140px; 1469 | padding-top: 5px; 1470 | text-align: right; 1471 | } 1472 | 1473 | .form-horizontal .controls { 1474 | *display: inline-block; 1475 | *padding-left: 20px; 1476 | margin-left: 160px; 1477 | *margin-left: 0; 1478 | } 1479 | 1480 | .form-horizontal .controls:first-child { 1481 | *padding-left: 160px; 1482 | } 1483 | 1484 | .form-horizontal .help-block { 1485 | margin-top: 9px; 1486 | margin-bottom: 0; 1487 | } 1488 | 1489 | .form-horizontal .form-actions { 1490 | padding-left: 160px; 1491 | } 1492 | 1493 | table { 1494 | max-width: 100%; 1495 | background-color: transparent; 1496 | border-collapse: collapse; 1497 | border-spacing: 0; 1498 | } 1499 | 1500 | .table { 1501 | width: 100%; 1502 | margin-bottom: 18px; 1503 | } 1504 | 1505 | .table th, 1506 | .table td { 1507 | padding: 8px; 1508 | line-height: 18px; 1509 | text-align: left; 1510 | vertical-align: top; 1511 | border-top: 1px solid #dddddd; 1512 | } 1513 | 1514 | .table th { 1515 | font-weight: bold; 1516 | } 1517 | 1518 | .table thead th { 1519 | vertical-align: bottom; 1520 | } 1521 | 1522 | .table caption + thead tr:first-child th, 1523 | .table caption + thead tr:first-child td, 1524 | .table colgroup + thead tr:first-child th, 1525 | .table colgroup + thead tr:first-child td, 1526 | .table thead:first-child tr:first-child th, 1527 | .table thead:first-child tr:first-child td { 1528 | border-top: 0; 1529 | } 1530 | 1531 | .table tbody + tbody { 1532 | border-top: 2px solid #dddddd; 1533 | } 1534 | 1535 | .table-condensed th, 1536 | .table-condensed td { 1537 | padding: 4px 5px; 1538 | } 1539 | 1540 | .table-bordered { 1541 | border: 1px solid #dddddd; 1542 | border-collapse: separate; 1543 | *border-collapse: collapsed; 1544 | border-left: 0; 1545 | -webkit-border-radius: 4px; 1546 | -moz-border-radius: 4px; 1547 | border-radius: 4px; 1548 | } 1549 | 1550 | .table-bordered th, 1551 | .table-bordered td { 1552 | border-left: 1px solid #dddddd; 1553 | } 1554 | 1555 | .table-bordered caption + thead tr:first-child th, 1556 | .table-bordered caption + tbody tr:first-child th, 1557 | .table-bordered caption + tbody tr:first-child td, 1558 | .table-bordered colgroup + thead tr:first-child th, 1559 | .table-bordered colgroup + tbody tr:first-child th, 1560 | .table-bordered colgroup + tbody tr:first-child td, 1561 | .table-bordered thead:first-child tr:first-child th, 1562 | .table-bordered tbody:first-child tr:first-child th, 1563 | .table-bordered tbody:first-child tr:first-child td { 1564 | border-top: 0; 1565 | } 1566 | 1567 | .table-bordered thead:first-child tr:first-child th:first-child, 1568 | .table-bordered tbody:first-child tr:first-child td:first-child { 1569 | -webkit-border-top-left-radius: 4px; 1570 | border-top-left-radius: 4px; 1571 | -moz-border-radius-topleft: 4px; 1572 | } 1573 | 1574 | .table-bordered thead:first-child tr:first-child th:last-child, 1575 | .table-bordered tbody:first-child tr:first-child td:last-child { 1576 | -webkit-border-top-right-radius: 4px; 1577 | border-top-right-radius: 4px; 1578 | -moz-border-radius-topright: 4px; 1579 | } 1580 | 1581 | .table-bordered thead:last-child tr:last-child th:first-child, 1582 | .table-bordered tbody:last-child tr:last-child td:first-child { 1583 | -webkit-border-radius: 0 0 0 4px; 1584 | -moz-border-radius: 0 0 0 4px; 1585 | border-radius: 0 0 0 4px; 1586 | -webkit-border-bottom-left-radius: 4px; 1587 | border-bottom-left-radius: 4px; 1588 | -moz-border-radius-bottomleft: 4px; 1589 | } 1590 | 1591 | .table-bordered thead:last-child tr:last-child th:last-child, 1592 | .table-bordered tbody:last-child tr:last-child td:last-child { 1593 | -webkit-border-bottom-right-radius: 4px; 1594 | border-bottom-right-radius: 4px; 1595 | -moz-border-radius-bottomright: 4px; 1596 | } 1597 | 1598 | .table-striped tbody tr:nth-child(odd) td, 1599 | .table-striped tbody tr:nth-child(odd) th { 1600 | background-color: #f9f9f9; 1601 | } 1602 | 1603 | .table tbody tr:hover td, 1604 | .table tbody tr:hover th { 1605 | background-color: #f5f5f5; 1606 | } 1607 | 1608 | table .span1 { 1609 | float: none; 1610 | width: 44px; 1611 | margin-left: 0; 1612 | } 1613 | 1614 | table .span2 { 1615 | float: none; 1616 | width: 124px; 1617 | margin-left: 0; 1618 | } 1619 | 1620 | table .span3 { 1621 | float: none; 1622 | width: 204px; 1623 | margin-left: 0; 1624 | } 1625 | 1626 | table .span4 { 1627 | float: none; 1628 | width: 284px; 1629 | margin-left: 0; 1630 | } 1631 | 1632 | table .span5 { 1633 | float: none; 1634 | width: 364px; 1635 | margin-left: 0; 1636 | } 1637 | 1638 | table .span6 { 1639 | float: none; 1640 | width: 444px; 1641 | margin-left: 0; 1642 | } 1643 | 1644 | table .span7 { 1645 | float: none; 1646 | width: 524px; 1647 | margin-left: 0; 1648 | } 1649 | 1650 | table .span8 { 1651 | float: none; 1652 | width: 604px; 1653 | margin-left: 0; 1654 | } 1655 | 1656 | table .span9 { 1657 | float: none; 1658 | width: 684px; 1659 | margin-left: 0; 1660 | } 1661 | 1662 | table .span10 { 1663 | float: none; 1664 | width: 764px; 1665 | margin-left: 0; 1666 | } 1667 | 1668 | table .span11 { 1669 | float: none; 1670 | width: 844px; 1671 | margin-left: 0; 1672 | } 1673 | 1674 | table .span12 { 1675 | float: none; 1676 | width: 924px; 1677 | margin-left: 0; 1678 | } 1679 | 1680 | table .span13 { 1681 | float: none; 1682 | width: 1004px; 1683 | margin-left: 0; 1684 | } 1685 | 1686 | table .span14 { 1687 | float: none; 1688 | width: 1084px; 1689 | margin-left: 0; 1690 | } 1691 | 1692 | table .span15 { 1693 | float: none; 1694 | width: 1164px; 1695 | margin-left: 0; 1696 | } 1697 | 1698 | table .span16 { 1699 | float: none; 1700 | width: 1244px; 1701 | margin-left: 0; 1702 | } 1703 | 1704 | table .span17 { 1705 | float: none; 1706 | width: 1324px; 1707 | margin-left: 0; 1708 | } 1709 | 1710 | table .span18 { 1711 | float: none; 1712 | width: 1404px; 1713 | margin-left: 0; 1714 | } 1715 | 1716 | table .span19 { 1717 | float: none; 1718 | width: 1484px; 1719 | margin-left: 0; 1720 | } 1721 | 1722 | table .span20 { 1723 | float: none; 1724 | width: 1564px; 1725 | margin-left: 0; 1726 | } 1727 | 1728 | table .span21 { 1729 | float: none; 1730 | width: 1644px; 1731 | margin-left: 0; 1732 | } 1733 | 1734 | table .span22 { 1735 | float: none; 1736 | width: 1724px; 1737 | margin-left: 0; 1738 | } 1739 | 1740 | table .span23 { 1741 | float: none; 1742 | width: 1804px; 1743 | margin-left: 0; 1744 | } 1745 | 1746 | table .span24 { 1747 | float: none; 1748 | width: 1884px; 1749 | margin-left: 0; 1750 | } 1751 | 1752 | [class^="icon-"], 1753 | [class*=" icon-"] { 1754 | display: inline-block; 1755 | width: 14px; 1756 | height: 14px; 1757 | *margin-right: .3em; 1758 | line-height: 14px; 1759 | vertical-align: text-top; 1760 | background-image: url("../img/glyphicons-halflings.png"); 1761 | background-position: 14px 14px; 1762 | background-repeat: no-repeat; 1763 | } 1764 | 1765 | [class^="icon-"]:last-child, 1766 | [class*=" icon-"]:last-child { 1767 | *margin-left: 0; 1768 | } 1769 | 1770 | .icon-white { 1771 | background-image: url("../img/glyphicons-halflings-white.png"); 1772 | } 1773 | 1774 | .icon-glass { 1775 | background-position: 0 0; 1776 | } 1777 | 1778 | .icon-music { 1779 | background-position: -24px 0; 1780 | } 1781 | 1782 | .icon-search { 1783 | background-position: -48px 0; 1784 | } 1785 | 1786 | .icon-envelope { 1787 | background-position: -72px 0; 1788 | } 1789 | 1790 | .icon-heart { 1791 | background-position: -96px 0; 1792 | } 1793 | 1794 | .icon-star { 1795 | background-position: -120px 0; 1796 | } 1797 | 1798 | .icon-star-empty { 1799 | background-position: -144px 0; 1800 | } 1801 | 1802 | .icon-user { 1803 | background-position: -168px 0; 1804 | } 1805 | 1806 | .icon-film { 1807 | background-position: -192px 0; 1808 | } 1809 | 1810 | .icon-th-large { 1811 | background-position: -216px 0; 1812 | } 1813 | 1814 | .icon-th { 1815 | background-position: -240px 0; 1816 | } 1817 | 1818 | .icon-th-list { 1819 | background-position: -264px 0; 1820 | } 1821 | 1822 | .icon-ok { 1823 | background-position: -288px 0; 1824 | } 1825 | 1826 | .icon-remove { 1827 | background-position: -312px 0; 1828 | } 1829 | 1830 | .icon-zoom-in { 1831 | background-position: -336px 0; 1832 | } 1833 | 1834 | .icon-zoom-out { 1835 | background-position: -360px 0; 1836 | } 1837 | 1838 | .icon-off { 1839 | background-position: -384px 0; 1840 | } 1841 | 1842 | .icon-signal { 1843 | background-position: -408px 0; 1844 | } 1845 | 1846 | .icon-cog { 1847 | background-position: -432px 0; 1848 | } 1849 | 1850 | .icon-trash { 1851 | background-position: -456px 0; 1852 | } 1853 | 1854 | .icon-home { 1855 | background-position: 0 -24px; 1856 | } 1857 | 1858 | .icon-file { 1859 | background-position: -24px -24px; 1860 | } 1861 | 1862 | .icon-time { 1863 | background-position: -48px -24px; 1864 | } 1865 | 1866 | .icon-road { 1867 | background-position: -72px -24px; 1868 | } 1869 | 1870 | .icon-download-alt { 1871 | background-position: -96px -24px; 1872 | } 1873 | 1874 | .icon-download { 1875 | background-position: -120px -24px; 1876 | } 1877 | 1878 | .icon-upload { 1879 | background-position: -144px -24px; 1880 | } 1881 | 1882 | .icon-inbox { 1883 | background-position: -168px -24px; 1884 | } 1885 | 1886 | .icon-play-circle { 1887 | background-position: -192px -24px; 1888 | } 1889 | 1890 | .icon-repeat { 1891 | background-position: -216px -24px; 1892 | } 1893 | 1894 | .icon-refresh { 1895 | background-position: -240px -24px; 1896 | } 1897 | 1898 | .icon-list-alt { 1899 | background-position: -264px -24px; 1900 | } 1901 | 1902 | .icon-lock { 1903 | background-position: -287px -24px; 1904 | } 1905 | 1906 | .icon-flag { 1907 | background-position: -312px -24px; 1908 | } 1909 | 1910 | .icon-headphones { 1911 | background-position: -336px -24px; 1912 | } 1913 | 1914 | .icon-volume-off { 1915 | background-position: -360px -24px; 1916 | } 1917 | 1918 | .icon-volume-down { 1919 | background-position: -384px -24px; 1920 | } 1921 | 1922 | .icon-volume-up { 1923 | background-position: -408px -24px; 1924 | } 1925 | 1926 | .icon-qrcode { 1927 | background-position: -432px -24px; 1928 | } 1929 | 1930 | .icon-barcode { 1931 | background-position: -456px -24px; 1932 | } 1933 | 1934 | .icon-tag { 1935 | background-position: 0 -48px; 1936 | } 1937 | 1938 | .icon-tags { 1939 | background-position: -25px -48px; 1940 | } 1941 | 1942 | .icon-book { 1943 | background-position: -48px -48px; 1944 | } 1945 | 1946 | .icon-bookmark { 1947 | background-position: -72px -48px; 1948 | } 1949 | 1950 | .icon-print { 1951 | background-position: -96px -48px; 1952 | } 1953 | 1954 | .icon-camera { 1955 | background-position: -120px -48px; 1956 | } 1957 | 1958 | .icon-font { 1959 | background-position: -144px -48px; 1960 | } 1961 | 1962 | .icon-bold { 1963 | background-position: -167px -48px; 1964 | } 1965 | 1966 | .icon-italic { 1967 | background-position: -192px -48px; 1968 | } 1969 | 1970 | .icon-text-height { 1971 | background-position: -216px -48px; 1972 | } 1973 | 1974 | .icon-text-width { 1975 | background-position: -240px -48px; 1976 | } 1977 | 1978 | .icon-align-left { 1979 | background-position: -264px -48px; 1980 | } 1981 | 1982 | .icon-align-center { 1983 | background-position: -288px -48px; 1984 | } 1985 | 1986 | .icon-align-right { 1987 | background-position: -312px -48px; 1988 | } 1989 | 1990 | .icon-align-justify { 1991 | background-position: -336px -48px; 1992 | } 1993 | 1994 | .icon-list { 1995 | background-position: -360px -48px; 1996 | } 1997 | 1998 | .icon-indent-left { 1999 | background-position: -384px -48px; 2000 | } 2001 | 2002 | .icon-indent-right { 2003 | background-position: -408px -48px; 2004 | } 2005 | 2006 | .icon-facetime-video { 2007 | background-position: -432px -48px; 2008 | } 2009 | 2010 | .icon-picture { 2011 | background-position: -456px -48px; 2012 | } 2013 | 2014 | .icon-pencil { 2015 | background-position: 0 -72px; 2016 | } 2017 | 2018 | .icon-map-marker { 2019 | background-position: -24px -72px; 2020 | } 2021 | 2022 | .icon-adjust { 2023 | background-position: -48px -72px; 2024 | } 2025 | 2026 | .icon-tint { 2027 | background-position: -72px -72px; 2028 | } 2029 | 2030 | .icon-edit { 2031 | background-position: -96px -72px; 2032 | } 2033 | 2034 | .icon-share { 2035 | background-position: -120px -72px; 2036 | } 2037 | 2038 | .icon-check { 2039 | background-position: -144px -72px; 2040 | } 2041 | 2042 | .icon-move { 2043 | background-position: -168px -72px; 2044 | } 2045 | 2046 | .icon-step-backward { 2047 | background-position: -192px -72px; 2048 | } 2049 | 2050 | .icon-fast-backward { 2051 | background-position: -216px -72px; 2052 | } 2053 | 2054 | .icon-backward { 2055 | background-position: -240px -72px; 2056 | } 2057 | 2058 | .icon-play { 2059 | background-position: -264px -72px; 2060 | } 2061 | 2062 | .icon-pause { 2063 | background-position: -288px -72px; 2064 | } 2065 | 2066 | .icon-stop { 2067 | background-position: -312px -72px; 2068 | } 2069 | 2070 | .icon-forward { 2071 | background-position: -336px -72px; 2072 | } 2073 | 2074 | .icon-fast-forward { 2075 | background-position: -360px -72px; 2076 | } 2077 | 2078 | .icon-step-forward { 2079 | background-position: -384px -72px; 2080 | } 2081 | 2082 | .icon-eject { 2083 | background-position: -408px -72px; 2084 | } 2085 | 2086 | .icon-chevron-left { 2087 | background-position: -432px -72px; 2088 | } 2089 | 2090 | .icon-chevron-right { 2091 | background-position: -456px -72px; 2092 | } 2093 | 2094 | .icon-plus-sign { 2095 | background-position: 0 -96px; 2096 | } 2097 | 2098 | .icon-minus-sign { 2099 | background-position: -24px -96px; 2100 | } 2101 | 2102 | .icon-remove-sign { 2103 | background-position: -48px -96px; 2104 | } 2105 | 2106 | .icon-ok-sign { 2107 | background-position: -72px -96px; 2108 | } 2109 | 2110 | .icon-question-sign { 2111 | background-position: -96px -96px; 2112 | } 2113 | 2114 | .icon-info-sign { 2115 | background-position: -120px -96px; 2116 | } 2117 | 2118 | .icon-screenshot { 2119 | background-position: -144px -96px; 2120 | } 2121 | 2122 | .icon-remove-circle { 2123 | background-position: -168px -96px; 2124 | } 2125 | 2126 | .icon-ok-circle { 2127 | background-position: -192px -96px; 2128 | } 2129 | 2130 | .icon-ban-circle { 2131 | background-position: -216px -96px; 2132 | } 2133 | 2134 | .icon-arrow-left { 2135 | background-position: -240px -96px; 2136 | } 2137 | 2138 | .icon-arrow-right { 2139 | background-position: -264px -96px; 2140 | } 2141 | 2142 | .icon-arrow-up { 2143 | background-position: -289px -96px; 2144 | } 2145 | 2146 | .icon-arrow-down { 2147 | background-position: -312px -96px; 2148 | } 2149 | 2150 | .icon-share-alt { 2151 | background-position: -336px -96px; 2152 | } 2153 | 2154 | .icon-resize-full { 2155 | background-position: -360px -96px; 2156 | } 2157 | 2158 | .icon-resize-small { 2159 | background-position: -384px -96px; 2160 | } 2161 | 2162 | .icon-plus { 2163 | background-position: -408px -96px; 2164 | } 2165 | 2166 | .icon-minus { 2167 | background-position: -433px -96px; 2168 | } 2169 | 2170 | .icon-asterisk { 2171 | background-position: -456px -96px; 2172 | } 2173 | 2174 | .icon-exclamation-sign { 2175 | background-position: 0 -120px; 2176 | } 2177 | 2178 | .icon-gift { 2179 | background-position: -24px -120px; 2180 | } 2181 | 2182 | .icon-leaf { 2183 | background-position: -48px -120px; 2184 | } 2185 | 2186 | .icon-fire { 2187 | background-position: -72px -120px; 2188 | } 2189 | 2190 | .icon-eye-open { 2191 | background-position: -96px -120px; 2192 | } 2193 | 2194 | .icon-eye-close { 2195 | background-position: -120px -120px; 2196 | } 2197 | 2198 | .icon-warning-sign { 2199 | background-position: -144px -120px; 2200 | } 2201 | 2202 | .icon-plane { 2203 | background-position: -168px -120px; 2204 | } 2205 | 2206 | .icon-calendar { 2207 | background-position: -192px -120px; 2208 | } 2209 | 2210 | .icon-random { 2211 | background-position: -216px -120px; 2212 | } 2213 | 2214 | .icon-comment { 2215 | background-position: -240px -120px; 2216 | } 2217 | 2218 | .icon-magnet { 2219 | background-position: -264px -120px; 2220 | } 2221 | 2222 | .icon-chevron-up { 2223 | background-position: -288px -120px; 2224 | } 2225 | 2226 | .icon-chevron-down { 2227 | background-position: -313px -119px; 2228 | } 2229 | 2230 | .icon-retweet { 2231 | background-position: -336px -120px; 2232 | } 2233 | 2234 | .icon-shopping-cart { 2235 | background-position: -360px -120px; 2236 | } 2237 | 2238 | .icon-folder-close { 2239 | background-position: -384px -120px; 2240 | } 2241 | 2242 | .icon-folder-open { 2243 | background-position: -408px -120px; 2244 | } 2245 | 2246 | .icon-resize-vertical { 2247 | background-position: -432px -119px; 2248 | } 2249 | 2250 | .icon-resize-horizontal { 2251 | background-position: -456px -118px; 2252 | } 2253 | 2254 | .icon-hdd { 2255 | background-position: 0 -144px; 2256 | } 2257 | 2258 | .icon-bullhorn { 2259 | background-position: -24px -144px; 2260 | } 2261 | 2262 | .icon-bell { 2263 | background-position: -48px -144px; 2264 | } 2265 | 2266 | .icon-certificate { 2267 | background-position: -72px -144px; 2268 | } 2269 | 2270 | .icon-thumbs-up { 2271 | background-position: -96px -144px; 2272 | } 2273 | 2274 | .icon-thumbs-down { 2275 | background-position: -120px -144px; 2276 | } 2277 | 2278 | .icon-hand-right { 2279 | background-position: -144px -144px; 2280 | } 2281 | 2282 | .icon-hand-left { 2283 | background-position: -168px -144px; 2284 | } 2285 | 2286 | .icon-hand-up { 2287 | background-position: -192px -144px; 2288 | } 2289 | 2290 | .icon-hand-down { 2291 | background-position: -216px -144px; 2292 | } 2293 | 2294 | .icon-circle-arrow-right { 2295 | background-position: -240px -144px; 2296 | } 2297 | 2298 | .icon-circle-arrow-left { 2299 | background-position: -264px -144px; 2300 | } 2301 | 2302 | .icon-circle-arrow-up { 2303 | background-position: -288px -144px; 2304 | } 2305 | 2306 | .icon-circle-arrow-down { 2307 | background-position: -312px -144px; 2308 | } 2309 | 2310 | .icon-globe { 2311 | background-position: -336px -144px; 2312 | } 2313 | 2314 | .icon-wrench { 2315 | background-position: -360px -144px; 2316 | } 2317 | 2318 | .icon-tasks { 2319 | background-position: -384px -144px; 2320 | } 2321 | 2322 | .icon-filter { 2323 | background-position: -408px -144px; 2324 | } 2325 | 2326 | .icon-briefcase { 2327 | background-position: -432px -144px; 2328 | } 2329 | 2330 | .icon-fullscreen { 2331 | background-position: -456px -144px; 2332 | } 2333 | 2334 | .dropup, 2335 | .dropdown { 2336 | position: relative; 2337 | } 2338 | 2339 | .dropdown-toggle { 2340 | *margin-bottom: -3px; 2341 | } 2342 | 2343 | .dropdown-toggle:active, 2344 | .open .dropdown-toggle { 2345 | outline: 0; 2346 | } 2347 | 2348 | .caret { 2349 | display: inline-block; 2350 | width: 0; 2351 | height: 0; 2352 | vertical-align: top; 2353 | border-top: 4px solid #000000; 2354 | border-right: 4px solid transparent; 2355 | border-left: 4px solid transparent; 2356 | content: ""; 2357 | opacity: 0.3; 2358 | filter: alpha(opacity=30); 2359 | } 2360 | 2361 | .dropdown .caret { 2362 | margin-top: 8px; 2363 | margin-left: 2px; 2364 | } 2365 | 2366 | .dropdown:hover .caret, 2367 | .open .caret { 2368 | opacity: 1; 2369 | filter: alpha(opacity=100); 2370 | } 2371 | 2372 | .dropdown-menu { 2373 | position: absolute; 2374 | top: 100%; 2375 | left: 0; 2376 | z-index: 1000; 2377 | display: none; 2378 | float: left; 2379 | min-width: 160px; 2380 | padding: 4px 0; 2381 | margin: 1px 0 0; 2382 | list-style: none; 2383 | background-color: #ffffff; 2384 | border: 1px solid #ccc; 2385 | border: 1px solid rgba(0, 0, 0, 0.2); 2386 | *border-right-width: 2px; 2387 | *border-bottom-width: 2px; 2388 | -webkit-border-radius: 5px; 2389 | -moz-border-radius: 5px; 2390 | border-radius: 5px; 2391 | -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 2392 | -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 2393 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); 2394 | -webkit-background-clip: padding-box; 2395 | -moz-background-clip: padding; 2396 | background-clip: padding-box; 2397 | } 2398 | 2399 | .dropdown-menu.pull-right { 2400 | right: 0; 2401 | left: auto; 2402 | } 2403 | 2404 | .dropdown-menu .divider { 2405 | *width: 100%; 2406 | height: 1px; 2407 | margin: 8px 1px; 2408 | *margin: -5px 0 5px; 2409 | overflow: hidden; 2410 | background-color: #e5e5e5; 2411 | border-bottom: 1px solid #ffffff; 2412 | } 2413 | 2414 | .dropdown-menu a { 2415 | display: block; 2416 | padding: 3px 15px; 2417 | clear: both; 2418 | font-weight: normal; 2419 | line-height: 18px; 2420 | color: #333333; 2421 | white-space: nowrap; 2422 | } 2423 | 2424 | .dropdown-menu li > a:hover, 2425 | .dropdown-menu .active > a, 2426 | .dropdown-menu .active > a:hover { 2427 | color: #ffffff; 2428 | text-decoration: none; 2429 | background-color: #0088cc; 2430 | } 2431 | 2432 | .open { 2433 | *z-index: 1000; 2434 | } 2435 | 2436 | .open .dropdown-menu { 2437 | display: block; 2438 | } 2439 | 2440 | .pull-right .dropdown-menu { 2441 | right: 0; 2442 | left: auto; 2443 | } 2444 | 2445 | .dropup .caret, 2446 | .navbar-fixed-bottom .dropdown .caret { 2447 | border-top: 0; 2448 | border-bottom: 4px solid #000000; 2449 | content: "\2191"; 2450 | } 2451 | 2452 | .dropup .dropdown-menu, 2453 | .navbar-fixed-bottom .dropdown .dropdown-menu { 2454 | top: auto; 2455 | bottom: 100%; 2456 | margin-bottom: 1px; 2457 | } 2458 | 2459 | .typeahead { 2460 | margin-top: 2px; 2461 | -webkit-border-radius: 4px; 2462 | -moz-border-radius: 4px; 2463 | border-radius: 4px; 2464 | } 2465 | 2466 | .well { 2467 | min-height: 20px; 2468 | padding: 19px; 2469 | margin-bottom: 20px; 2470 | background-color: #f5f5f5; 2471 | border: 1px solid #eee; 2472 | border: 1px solid rgba(0, 0, 0, 0.05); 2473 | -webkit-border-radius: 4px; 2474 | -moz-border-radius: 4px; 2475 | border-radius: 4px; 2476 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); 2477 | -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); 2478 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); 2479 | } 2480 | 2481 | .well blockquote { 2482 | border-color: #ddd; 2483 | border-color: rgba(0, 0, 0, 0.15); 2484 | } 2485 | 2486 | .well-large { 2487 | padding: 24px; 2488 | -webkit-border-radius: 6px; 2489 | -moz-border-radius: 6px; 2490 | border-radius: 6px; 2491 | } 2492 | 2493 | .well-small { 2494 | padding: 9px; 2495 | -webkit-border-radius: 3px; 2496 | -moz-border-radius: 3px; 2497 | border-radius: 3px; 2498 | } 2499 | 2500 | .fade { 2501 | opacity: 0; 2502 | filter: alpha(opacity=0); 2503 | -webkit-transition: opacity 0.15s linear; 2504 | -moz-transition: opacity 0.15s linear; 2505 | -ms-transition: opacity 0.15s linear; 2506 | -o-transition: opacity 0.15s linear; 2507 | transition: opacity 0.15s linear; 2508 | } 2509 | 2510 | .fade.in { 2511 | opacity: 1; 2512 | filter: alpha(opacity=100); 2513 | } 2514 | 2515 | .collapse { 2516 | position: relative; 2517 | height: 0; 2518 | overflow: hidden; 2519 | -webkit-transition: height 0.35s ease; 2520 | -moz-transition: height 0.35s ease; 2521 | -ms-transition: height 0.35s ease; 2522 | -o-transition: height 0.35s ease; 2523 | transition: height 0.35s ease; 2524 | } 2525 | 2526 | .collapse.in { 2527 | height: auto; 2528 | } 2529 | 2530 | .close { 2531 | float: right; 2532 | font-size: 20px; 2533 | font-weight: bold; 2534 | line-height: 18px; 2535 | color: #000000; 2536 | text-shadow: 0 1px 0 #ffffff; 2537 | opacity: 0.2; 2538 | filter: alpha(opacity=20); 2539 | } 2540 | 2541 | .close:hover { 2542 | color: #000000; 2543 | text-decoration: none; 2544 | cursor: pointer; 2545 | opacity: 0.4; 2546 | filter: alpha(opacity=40); 2547 | } 2548 | 2549 | button.close { 2550 | padding: 0; 2551 | cursor: pointer; 2552 | background: transparent; 2553 | border: 0; 2554 | -webkit-appearance: none; 2555 | } 2556 | 2557 | .btn { 2558 | display: inline-block; 2559 | *display: inline; 2560 | padding: 4px 10px 4px; 2561 | margin-bottom: 0; 2562 | *margin-left: .3em; 2563 | font-size: 13px; 2564 | line-height: 18px; 2565 | *line-height: 20px; 2566 | color: #333333; 2567 | text-align: center; 2568 | text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); 2569 | vertical-align: middle; 2570 | cursor: pointer; 2571 | background-color: #f5f5f5; 2572 | *background-color: #e6e6e6; 2573 | background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); 2574 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); 2575 | background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); 2576 | background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); 2577 | background-image: linear-gradient(top, #ffffff, #e6e6e6); 2578 | background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); 2579 | background-repeat: repeat-x; 2580 | border: 1px solid #cccccc; 2581 | *border: 0; 2582 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2583 | border-color: #e6e6e6 #e6e6e6 #bfbfbf; 2584 | border-bottom-color: #b3b3b3; 2585 | -webkit-border-radius: 4px; 2586 | -moz-border-radius: 4px; 2587 | border-radius: 4px; 2588 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); 2589 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 2590 | *zoom: 1; 2591 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 2592 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 2593 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 2594 | } 2595 | 2596 | .btn:hover, 2597 | .btn:active, 2598 | .btn.active, 2599 | .btn.disabled, 2600 | .btn[disabled] { 2601 | background-color: #e6e6e6; 2602 | *background-color: #d9d9d9; 2603 | } 2604 | 2605 | .btn:active, 2606 | .btn.active { 2607 | background-color: #cccccc \9; 2608 | } 2609 | 2610 | .btn:first-child { 2611 | *margin-left: 0; 2612 | } 2613 | 2614 | .btn:hover { 2615 | color: #333333; 2616 | text-decoration: none; 2617 | background-color: #e6e6e6; 2618 | *background-color: #d9d9d9; 2619 | /* Buttons in IE7 don't get borders, so darken on hover */ 2620 | 2621 | background-position: 0 -15px; 2622 | -webkit-transition: background-position 0.1s linear; 2623 | -moz-transition: background-position 0.1s linear; 2624 | -ms-transition: background-position 0.1s linear; 2625 | -o-transition: background-position 0.1s linear; 2626 | transition: background-position 0.1s linear; 2627 | } 2628 | 2629 | .btn:focus { 2630 | outline: thin dotted #333; 2631 | outline: 5px auto -webkit-focus-ring-color; 2632 | outline-offset: -2px; 2633 | } 2634 | 2635 | .btn.active, 2636 | .btn:active { 2637 | background-color: #e6e6e6; 2638 | background-color: #d9d9d9 \9; 2639 | background-image: none; 2640 | outline: 0; 2641 | -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 2642 | -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 2643 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 2644 | } 2645 | 2646 | .btn.disabled, 2647 | .btn[disabled] { 2648 | cursor: default; 2649 | background-color: #e6e6e6; 2650 | background-image: none; 2651 | opacity: 0.65; 2652 | filter: alpha(opacity=65); 2653 | -webkit-box-shadow: none; 2654 | -moz-box-shadow: none; 2655 | box-shadow: none; 2656 | } 2657 | 2658 | .btn-large { 2659 | padding: 9px 14px; 2660 | font-size: 15px; 2661 | line-height: normal; 2662 | -webkit-border-radius: 5px; 2663 | -moz-border-radius: 5px; 2664 | border-radius: 5px; 2665 | } 2666 | 2667 | .btn-large [class^="icon-"] { 2668 | margin-top: 1px; 2669 | } 2670 | 2671 | .btn-small { 2672 | padding: 5px 9px; 2673 | font-size: 11px; 2674 | line-height: 16px; 2675 | } 2676 | 2677 | .btn-small [class^="icon-"] { 2678 | margin-top: -1px; 2679 | } 2680 | 2681 | .btn-mini { 2682 | padding: 2px 6px; 2683 | font-size: 11px; 2684 | line-height: 14px; 2685 | } 2686 | 2687 | .btn-primary, 2688 | .btn-primary:hover, 2689 | .btn-warning, 2690 | .btn-warning:hover, 2691 | .btn-danger, 2692 | .btn-danger:hover, 2693 | .btn-success, 2694 | .btn-success:hover, 2695 | .btn-info, 2696 | .btn-info:hover, 2697 | .btn-inverse, 2698 | .btn-inverse:hover { 2699 | color: #ffffff; 2700 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 2701 | } 2702 | 2703 | .btn-primary.active, 2704 | .btn-warning.active, 2705 | .btn-danger.active, 2706 | .btn-success.active, 2707 | .btn-info.active, 2708 | .btn-inverse.active { 2709 | color: rgba(255, 255, 255, 0.75); 2710 | } 2711 | 2712 | .btn { 2713 | border-color: #ccc; 2714 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2715 | } 2716 | 2717 | .btn-primary { 2718 | background-color: #0074cc; 2719 | *background-color: #0055cc; 2720 | background-image: -ms-linear-gradient(top, #0088cc, #0055cc); 2721 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc)); 2722 | background-image: -webkit-linear-gradient(top, #0088cc, #0055cc); 2723 | background-image: -o-linear-gradient(top, #0088cc, #0055cc); 2724 | background-image: -moz-linear-gradient(top, #0088cc, #0055cc); 2725 | background-image: linear-gradient(top, #0088cc, #0055cc); 2726 | background-repeat: repeat-x; 2727 | border-color: #0055cc #0055cc #003580; 2728 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2729 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0); 2730 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 2731 | } 2732 | 2733 | .btn-primary:hover, 2734 | .btn-primary:active, 2735 | .btn-primary.active, 2736 | .btn-primary.disabled, 2737 | .btn-primary[disabled] { 2738 | background-color: #0055cc; 2739 | *background-color: #004ab3; 2740 | } 2741 | 2742 | .btn-primary:active, 2743 | .btn-primary.active { 2744 | background-color: #004099 \9; 2745 | } 2746 | 2747 | .btn-warning { 2748 | background-color: #faa732; 2749 | *background-color: #f89406; 2750 | background-image: -ms-linear-gradient(top, #fbb450, #f89406); 2751 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); 2752 | background-image: -webkit-linear-gradient(top, #fbb450, #f89406); 2753 | background-image: -o-linear-gradient(top, #fbb450, #f89406); 2754 | background-image: -moz-linear-gradient(top, #fbb450, #f89406); 2755 | background-image: linear-gradient(top, #fbb450, #f89406); 2756 | background-repeat: repeat-x; 2757 | border-color: #f89406 #f89406 #ad6704; 2758 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2759 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); 2760 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 2761 | } 2762 | 2763 | .btn-warning:hover, 2764 | .btn-warning:active, 2765 | .btn-warning.active, 2766 | .btn-warning.disabled, 2767 | .btn-warning[disabled] { 2768 | background-color: #f89406; 2769 | *background-color: #df8505; 2770 | } 2771 | 2772 | .btn-warning:active, 2773 | .btn-warning.active { 2774 | background-color: #c67605 \9; 2775 | } 2776 | 2777 | .btn-danger { 2778 | background-color: #da4f49; 2779 | *background-color: #bd362f; 2780 | background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); 2781 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); 2782 | background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); 2783 | background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); 2784 | background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); 2785 | background-image: linear-gradient(top, #ee5f5b, #bd362f); 2786 | background-repeat: repeat-x; 2787 | border-color: #bd362f #bd362f #802420; 2788 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2789 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); 2790 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 2791 | } 2792 | 2793 | .btn-danger:hover, 2794 | .btn-danger:active, 2795 | .btn-danger.active, 2796 | .btn-danger.disabled, 2797 | .btn-danger[disabled] { 2798 | background-color: #bd362f; 2799 | *background-color: #a9302a; 2800 | } 2801 | 2802 | .btn-danger:active, 2803 | .btn-danger.active { 2804 | background-color: #942a25 \9; 2805 | } 2806 | 2807 | .btn-success { 2808 | background-color: #5bb75b; 2809 | *background-color: #51a351; 2810 | background-image: -ms-linear-gradient(top, #62c462, #51a351); 2811 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); 2812 | background-image: -webkit-linear-gradient(top, #62c462, #51a351); 2813 | background-image: -o-linear-gradient(top, #62c462, #51a351); 2814 | background-image: -moz-linear-gradient(top, #62c462, #51a351); 2815 | background-image: linear-gradient(top, #62c462, #51a351); 2816 | background-repeat: repeat-x; 2817 | border-color: #51a351 #51a351 #387038; 2818 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2819 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); 2820 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 2821 | } 2822 | 2823 | .btn-success:hover, 2824 | .btn-success:active, 2825 | .btn-success.active, 2826 | .btn-success.disabled, 2827 | .btn-success[disabled] { 2828 | background-color: #51a351; 2829 | *background-color: #499249; 2830 | } 2831 | 2832 | .btn-success:active, 2833 | .btn-success.active { 2834 | background-color: #408140 \9; 2835 | } 2836 | 2837 | .btn-info { 2838 | background-color: #49afcd; 2839 | *background-color: #2f96b4; 2840 | background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); 2841 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); 2842 | background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); 2843 | background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); 2844 | background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); 2845 | background-image: linear-gradient(top, #5bc0de, #2f96b4); 2846 | background-repeat: repeat-x; 2847 | border-color: #2f96b4 #2f96b4 #1f6377; 2848 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2849 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); 2850 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 2851 | } 2852 | 2853 | .btn-info:hover, 2854 | .btn-info:active, 2855 | .btn-info.active, 2856 | .btn-info.disabled, 2857 | .btn-info[disabled] { 2858 | background-color: #2f96b4; 2859 | *background-color: #2a85a0; 2860 | } 2861 | 2862 | .btn-info:active, 2863 | .btn-info.active { 2864 | background-color: #24748c \9; 2865 | } 2866 | 2867 | .btn-inverse { 2868 | background-color: #414141; 2869 | *background-color: #222222; 2870 | background-image: -ms-linear-gradient(top, #555555, #222222); 2871 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222)); 2872 | background-image: -webkit-linear-gradient(top, #555555, #222222); 2873 | background-image: -o-linear-gradient(top, #555555, #222222); 2874 | background-image: -moz-linear-gradient(top, #555555, #222222); 2875 | background-image: linear-gradient(top, #555555, #222222); 2876 | background-repeat: repeat-x; 2877 | border-color: #222222 #222222 #000000; 2878 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 2879 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0); 2880 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 2881 | } 2882 | 2883 | .btn-inverse:hover, 2884 | .btn-inverse:active, 2885 | .btn-inverse.active, 2886 | .btn-inverse.disabled, 2887 | .btn-inverse[disabled] { 2888 | background-color: #222222; 2889 | *background-color: #151515; 2890 | } 2891 | 2892 | .btn-inverse:active, 2893 | .btn-inverse.active { 2894 | background-color: #080808 \9; 2895 | } 2896 | 2897 | button.btn, 2898 | input[type="submit"].btn { 2899 | *padding-top: 2px; 2900 | *padding-bottom: 2px; 2901 | } 2902 | 2903 | button.btn::-moz-focus-inner, 2904 | input[type="submit"].btn::-moz-focus-inner { 2905 | padding: 0; 2906 | border: 0; 2907 | } 2908 | 2909 | button.btn.btn-large, 2910 | input[type="submit"].btn.btn-large { 2911 | *padding-top: 7px; 2912 | *padding-bottom: 7px; 2913 | } 2914 | 2915 | button.btn.btn-small, 2916 | input[type="submit"].btn.btn-small { 2917 | *padding-top: 3px; 2918 | *padding-bottom: 3px; 2919 | } 2920 | 2921 | button.btn.btn-mini, 2922 | input[type="submit"].btn.btn-mini { 2923 | *padding-top: 1px; 2924 | *padding-bottom: 1px; 2925 | } 2926 | 2927 | .btn-group { 2928 | position: relative; 2929 | *margin-left: .3em; 2930 | *zoom: 1; 2931 | } 2932 | 2933 | .btn-group:before, 2934 | .btn-group:after { 2935 | display: table; 2936 | content: ""; 2937 | } 2938 | 2939 | .btn-group:after { 2940 | clear: both; 2941 | } 2942 | 2943 | .btn-group:first-child { 2944 | *margin-left: 0; 2945 | } 2946 | 2947 | .btn-group + .btn-group { 2948 | margin-left: 5px; 2949 | } 2950 | 2951 | .btn-toolbar { 2952 | margin-top: 9px; 2953 | margin-bottom: 9px; 2954 | } 2955 | 2956 | .btn-toolbar .btn-group { 2957 | display: inline-block; 2958 | *display: inline; 2959 | /* IE7 inline-block hack */ 2960 | 2961 | *zoom: 1; 2962 | } 2963 | 2964 | .btn-group > .btn { 2965 | position: relative; 2966 | float: left; 2967 | margin-left: -1px; 2968 | -webkit-border-radius: 0; 2969 | -moz-border-radius: 0; 2970 | border-radius: 0; 2971 | } 2972 | 2973 | .btn-group > .btn:first-child { 2974 | margin-left: 0; 2975 | -webkit-border-bottom-left-radius: 4px; 2976 | border-bottom-left-radius: 4px; 2977 | -webkit-border-top-left-radius: 4px; 2978 | border-top-left-radius: 4px; 2979 | -moz-border-radius-bottomleft: 4px; 2980 | -moz-border-radius-topleft: 4px; 2981 | } 2982 | 2983 | .btn-group > .btn:last-child, 2984 | .btn-group > .dropdown-toggle { 2985 | -webkit-border-top-right-radius: 4px; 2986 | border-top-right-radius: 4px; 2987 | -webkit-border-bottom-right-radius: 4px; 2988 | border-bottom-right-radius: 4px; 2989 | -moz-border-radius-topright: 4px; 2990 | -moz-border-radius-bottomright: 4px; 2991 | } 2992 | 2993 | .btn-group > .btn.large:first-child { 2994 | margin-left: 0; 2995 | -webkit-border-bottom-left-radius: 6px; 2996 | border-bottom-left-radius: 6px; 2997 | -webkit-border-top-left-radius: 6px; 2998 | border-top-left-radius: 6px; 2999 | -moz-border-radius-bottomleft: 6px; 3000 | -moz-border-radius-topleft: 6px; 3001 | } 3002 | 3003 | .btn-group > .btn.large:last-child, 3004 | .btn-group > .large.dropdown-toggle { 3005 | -webkit-border-top-right-radius: 6px; 3006 | border-top-right-radius: 6px; 3007 | -webkit-border-bottom-right-radius: 6px; 3008 | border-bottom-right-radius: 6px; 3009 | -moz-border-radius-topright: 6px; 3010 | -moz-border-radius-bottomright: 6px; 3011 | } 3012 | 3013 | .btn-group > .btn:hover, 3014 | .btn-group > .btn:focus, 3015 | .btn-group > .btn:active, 3016 | .btn-group > .btn.active { 3017 | z-index: 2; 3018 | } 3019 | 3020 | .btn-group .dropdown-toggle:active, 3021 | .btn-group.open .dropdown-toggle { 3022 | outline: 0; 3023 | } 3024 | 3025 | .btn-group > .dropdown-toggle { 3026 | *padding-top: 4px; 3027 | padding-right: 8px; 3028 | *padding-bottom: 4px; 3029 | padding-left: 8px; 3030 | -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 3031 | -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 3032 | box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); 3033 | } 3034 | 3035 | .btn-group > .btn-mini.dropdown-toggle { 3036 | padding-right: 5px; 3037 | padding-left: 5px; 3038 | } 3039 | 3040 | .btn-group > .btn-small.dropdown-toggle { 3041 | *padding-top: 4px; 3042 | *padding-bottom: 4px; 3043 | } 3044 | 3045 | .btn-group > .btn-large.dropdown-toggle { 3046 | padding-right: 12px; 3047 | padding-left: 12px; 3048 | } 3049 | 3050 | .btn-group.open .dropdown-toggle { 3051 | background-image: none; 3052 | -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 3053 | -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 3054 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); 3055 | } 3056 | 3057 | .btn-group.open .btn.dropdown-toggle { 3058 | background-color: #e6e6e6; 3059 | } 3060 | 3061 | .btn-group.open .btn-primary.dropdown-toggle { 3062 | background-color: #0055cc; 3063 | } 3064 | 3065 | .btn-group.open .btn-warning.dropdown-toggle { 3066 | background-color: #f89406; 3067 | } 3068 | 3069 | .btn-group.open .btn-danger.dropdown-toggle { 3070 | background-color: #bd362f; 3071 | } 3072 | 3073 | .btn-group.open .btn-success.dropdown-toggle { 3074 | background-color: #51a351; 3075 | } 3076 | 3077 | .btn-group.open .btn-info.dropdown-toggle { 3078 | background-color: #2f96b4; 3079 | } 3080 | 3081 | .btn-group.open .btn-inverse.dropdown-toggle { 3082 | background-color: #222222; 3083 | } 3084 | 3085 | .btn .caret { 3086 | margin-top: 7px; 3087 | margin-left: 0; 3088 | } 3089 | 3090 | .btn:hover .caret, 3091 | .open.btn-group .caret { 3092 | opacity: 1; 3093 | filter: alpha(opacity=100); 3094 | } 3095 | 3096 | .btn-mini .caret { 3097 | margin-top: 5px; 3098 | } 3099 | 3100 | .btn-small .caret { 3101 | margin-top: 6px; 3102 | } 3103 | 3104 | .btn-large .caret { 3105 | margin-top: 6px; 3106 | border-top-width: 5px; 3107 | border-right-width: 5px; 3108 | border-left-width: 5px; 3109 | } 3110 | 3111 | .dropup .btn-large .caret { 3112 | border-top: 0; 3113 | border-bottom: 5px solid #000000; 3114 | } 3115 | 3116 | .btn-primary .caret, 3117 | .btn-warning .caret, 3118 | .btn-danger .caret, 3119 | .btn-info .caret, 3120 | .btn-success .caret, 3121 | .btn-inverse .caret { 3122 | border-top-color: #ffffff; 3123 | border-bottom-color: #ffffff; 3124 | opacity: 0.75; 3125 | filter: alpha(opacity=75); 3126 | } 3127 | 3128 | .alert { 3129 | padding: 8px 35px 8px 14px; 3130 | margin-bottom: 18px; 3131 | color: #c09853; 3132 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); 3133 | background-color: #fcf8e3; 3134 | border: 1px solid #fbeed5; 3135 | -webkit-border-radius: 4px; 3136 | -moz-border-radius: 4px; 3137 | border-radius: 4px; 3138 | } 3139 | 3140 | .alert-heading { 3141 | color: inherit; 3142 | } 3143 | 3144 | .alert .close { 3145 | position: relative; 3146 | top: -2px; 3147 | right: -21px; 3148 | line-height: 18px; 3149 | } 3150 | 3151 | .alert-success { 3152 | color: #468847; 3153 | background-color: #dff0d8; 3154 | border-color: #d6e9c6; 3155 | } 3156 | 3157 | .alert-danger, 3158 | .alert-error { 3159 | color: #b94a48; 3160 | background-color: #f2dede; 3161 | border-color: #eed3d7; 3162 | } 3163 | 3164 | .alert-info { 3165 | color: #3a87ad; 3166 | background-color: #d9edf7; 3167 | border-color: #bce8f1; 3168 | } 3169 | 3170 | .alert-block { 3171 | padding-top: 14px; 3172 | padding-bottom: 14px; 3173 | } 3174 | 3175 | .alert-block > p, 3176 | .alert-block > ul { 3177 | margin-bottom: 0; 3178 | } 3179 | 3180 | .alert-block p + p { 3181 | margin-top: 5px; 3182 | } 3183 | 3184 | .nav { 3185 | margin-bottom: 18px; 3186 | margin-left: 0; 3187 | list-style: none; 3188 | } 3189 | 3190 | .nav > li > a { 3191 | display: block; 3192 | } 3193 | 3194 | .nav > li > a:hover { 3195 | text-decoration: none; 3196 | background-color: #eeeeee; 3197 | } 3198 | 3199 | .nav > .pull-right { 3200 | float: right; 3201 | } 3202 | 3203 | .nav .nav-header { 3204 | display: block; 3205 | padding: 3px 15px; 3206 | font-size: 11px; 3207 | font-weight: bold; 3208 | line-height: 18px; 3209 | color: #999999; 3210 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); 3211 | text-transform: uppercase; 3212 | } 3213 | 3214 | .nav li + .nav-header { 3215 | margin-top: 9px; 3216 | } 3217 | 3218 | .nav-list { 3219 | padding-right: 15px; 3220 | padding-left: 15px; 3221 | margin-bottom: 0; 3222 | } 3223 | 3224 | .nav-list > li > a, 3225 | .nav-list .nav-header { 3226 | margin-right: -15px; 3227 | margin-left: -15px; 3228 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); 3229 | } 3230 | 3231 | .nav-list > li > a { 3232 | padding: 3px 15px; 3233 | } 3234 | 3235 | .nav-list > .active > a, 3236 | .nav-list > .active > a:hover { 3237 | color: #ffffff; 3238 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); 3239 | background-color: #0088cc; 3240 | } 3241 | 3242 | .nav-list [class^="icon-"] { 3243 | margin-right: 2px; 3244 | } 3245 | 3246 | .nav-list .divider { 3247 | *width: 100%; 3248 | height: 1px; 3249 | margin: 8px 1px; 3250 | *margin: -5px 0 5px; 3251 | overflow: hidden; 3252 | background-color: #e5e5e5; 3253 | border-bottom: 1px solid #ffffff; 3254 | } 3255 | 3256 | .nav-tabs, 3257 | .nav-pills { 3258 | *zoom: 1; 3259 | } 3260 | 3261 | .nav-tabs:before, 3262 | .nav-pills:before, 3263 | .nav-tabs:after, 3264 | .nav-pills:after { 3265 | display: table; 3266 | content: ""; 3267 | } 3268 | 3269 | .nav-tabs:after, 3270 | .nav-pills:after { 3271 | clear: both; 3272 | } 3273 | 3274 | .nav-tabs > li, 3275 | .nav-pills > li { 3276 | float: left; 3277 | } 3278 | 3279 | .nav-tabs > li > a, 3280 | .nav-pills > li > a { 3281 | padding-right: 12px; 3282 | padding-left: 12px; 3283 | margin-right: 2px; 3284 | line-height: 14px; 3285 | } 3286 | 3287 | .nav-tabs { 3288 | border-bottom: 1px solid #ddd; 3289 | } 3290 | 3291 | .nav-tabs > li { 3292 | margin-bottom: -1px; 3293 | } 3294 | 3295 | .nav-tabs > li > a { 3296 | padding-top: 8px; 3297 | padding-bottom: 8px; 3298 | line-height: 18px; 3299 | border: 1px solid transparent; 3300 | -webkit-border-radius: 4px 4px 0 0; 3301 | -moz-border-radius: 4px 4px 0 0; 3302 | border-radius: 4px 4px 0 0; 3303 | } 3304 | 3305 | .nav-tabs > li > a:hover { 3306 | border-color: #eeeeee #eeeeee #dddddd; 3307 | } 3308 | 3309 | .nav-tabs > .active > a, 3310 | .nav-tabs > .active > a:hover { 3311 | color: #555555; 3312 | cursor: default; 3313 | background-color: #ffffff; 3314 | border: 1px solid #ddd; 3315 | border-bottom-color: transparent; 3316 | } 3317 | 3318 | .nav-pills > li > a { 3319 | padding-top: 8px; 3320 | padding-bottom: 8px; 3321 | margin-top: 2px; 3322 | margin-bottom: 2px; 3323 | -webkit-border-radius: 5px; 3324 | -moz-border-radius: 5px; 3325 | border-radius: 5px; 3326 | } 3327 | 3328 | .nav-pills > .active > a, 3329 | .nav-pills > .active > a:hover { 3330 | color: #ffffff; 3331 | background-color: #0088cc; 3332 | } 3333 | 3334 | .nav-stacked > li { 3335 | float: none; 3336 | } 3337 | 3338 | .nav-stacked > li > a { 3339 | margin-right: 0; 3340 | } 3341 | 3342 | .nav-tabs.nav-stacked { 3343 | border-bottom: 0; 3344 | } 3345 | 3346 | .nav-tabs.nav-stacked > li > a { 3347 | border: 1px solid #ddd; 3348 | -webkit-border-radius: 0; 3349 | -moz-border-radius: 0; 3350 | border-radius: 0; 3351 | } 3352 | 3353 | .nav-tabs.nav-stacked > li:first-child > a { 3354 | -webkit-border-radius: 4px 4px 0 0; 3355 | -moz-border-radius: 4px 4px 0 0; 3356 | border-radius: 4px 4px 0 0; 3357 | } 3358 | 3359 | .nav-tabs.nav-stacked > li:last-child > a { 3360 | -webkit-border-radius: 0 0 4px 4px; 3361 | -moz-border-radius: 0 0 4px 4px; 3362 | border-radius: 0 0 4px 4px; 3363 | } 3364 | 3365 | .nav-tabs.nav-stacked > li > a:hover { 3366 | z-index: 2; 3367 | border-color: #ddd; 3368 | } 3369 | 3370 | .nav-pills.nav-stacked > li > a { 3371 | margin-bottom: 3px; 3372 | } 3373 | 3374 | .nav-pills.nav-stacked > li:last-child > a { 3375 | margin-bottom: 1px; 3376 | } 3377 | 3378 | .nav-tabs .dropdown-menu { 3379 | -webkit-border-radius: 0 0 5px 5px; 3380 | -moz-border-radius: 0 0 5px 5px; 3381 | border-radius: 0 0 5px 5px; 3382 | } 3383 | 3384 | .nav-pills .dropdown-menu { 3385 | -webkit-border-radius: 4px; 3386 | -moz-border-radius: 4px; 3387 | border-radius: 4px; 3388 | } 3389 | 3390 | .nav-tabs .dropdown-toggle .caret, 3391 | .nav-pills .dropdown-toggle .caret { 3392 | margin-top: 6px; 3393 | border-top-color: #0088cc; 3394 | border-bottom-color: #0088cc; 3395 | } 3396 | 3397 | .nav-tabs .dropdown-toggle:hover .caret, 3398 | .nav-pills .dropdown-toggle:hover .caret { 3399 | border-top-color: #005580; 3400 | border-bottom-color: #005580; 3401 | } 3402 | 3403 | .nav-tabs .active .dropdown-toggle .caret, 3404 | .nav-pills .active .dropdown-toggle .caret { 3405 | border-top-color: #333333; 3406 | border-bottom-color: #333333; 3407 | } 3408 | 3409 | .nav > .dropdown.active > a:hover { 3410 | color: #000000; 3411 | cursor: pointer; 3412 | } 3413 | 3414 | .nav-tabs .open .dropdown-toggle, 3415 | .nav-pills .open .dropdown-toggle, 3416 | .nav > li.dropdown.open.active > a:hover { 3417 | color: #ffffff; 3418 | background-color: #999999; 3419 | border-color: #999999; 3420 | } 3421 | 3422 | .nav li.dropdown.open .caret, 3423 | .nav li.dropdown.open.active .caret, 3424 | .nav li.dropdown.open a:hover .caret { 3425 | border-top-color: #ffffff; 3426 | border-bottom-color: #ffffff; 3427 | opacity: 1; 3428 | filter: alpha(opacity=100); 3429 | } 3430 | 3431 | .tabs-stacked .open > a:hover { 3432 | border-color: #999999; 3433 | } 3434 | 3435 | .tabbable { 3436 | *zoom: 1; 3437 | } 3438 | 3439 | .tabbable:before, 3440 | .tabbable:after { 3441 | display: table; 3442 | content: ""; 3443 | } 3444 | 3445 | .tabbable:after { 3446 | clear: both; 3447 | } 3448 | 3449 | .tab-content { 3450 | overflow: auto; 3451 | } 3452 | 3453 | .tabs-below > .nav-tabs, 3454 | .tabs-right > .nav-tabs, 3455 | .tabs-left > .nav-tabs { 3456 | border-bottom: 0; 3457 | } 3458 | 3459 | .tab-content > .tab-pane, 3460 | .pill-content > .pill-pane { 3461 | display: none; 3462 | } 3463 | 3464 | .tab-content > .active, 3465 | .pill-content > .active { 3466 | display: block; 3467 | } 3468 | 3469 | .tabs-below > .nav-tabs { 3470 | border-top: 1px solid #ddd; 3471 | } 3472 | 3473 | .tabs-below > .nav-tabs > li { 3474 | margin-top: -1px; 3475 | margin-bottom: 0; 3476 | } 3477 | 3478 | .tabs-below > .nav-tabs > li > a { 3479 | -webkit-border-radius: 0 0 4px 4px; 3480 | -moz-border-radius: 0 0 4px 4px; 3481 | border-radius: 0 0 4px 4px; 3482 | } 3483 | 3484 | .tabs-below > .nav-tabs > li > a:hover { 3485 | border-top-color: #ddd; 3486 | border-bottom-color: transparent; 3487 | } 3488 | 3489 | .tabs-below > .nav-tabs > .active > a, 3490 | .tabs-below > .nav-tabs > .active > a:hover { 3491 | border-color: transparent #ddd #ddd #ddd; 3492 | } 3493 | 3494 | .tabs-left > .nav-tabs > li, 3495 | .tabs-right > .nav-tabs > li { 3496 | float: none; 3497 | } 3498 | 3499 | .tabs-left > .nav-tabs > li > a, 3500 | .tabs-right > .nav-tabs > li > a { 3501 | min-width: 74px; 3502 | margin-right: 0; 3503 | margin-bottom: 3px; 3504 | } 3505 | 3506 | .tabs-left > .nav-tabs { 3507 | float: left; 3508 | margin-right: 19px; 3509 | border-right: 1px solid #ddd; 3510 | } 3511 | 3512 | .tabs-left > .nav-tabs > li > a { 3513 | margin-right: -1px; 3514 | -webkit-border-radius: 4px 0 0 4px; 3515 | -moz-border-radius: 4px 0 0 4px; 3516 | border-radius: 4px 0 0 4px; 3517 | } 3518 | 3519 | .tabs-left > .nav-tabs > li > a:hover { 3520 | border-color: #eeeeee #dddddd #eeeeee #eeeeee; 3521 | } 3522 | 3523 | .tabs-left > .nav-tabs .active > a, 3524 | .tabs-left > .nav-tabs .active > a:hover { 3525 | border-color: #ddd transparent #ddd #ddd; 3526 | *border-right-color: #ffffff; 3527 | } 3528 | 3529 | .tabs-right > .nav-tabs { 3530 | float: right; 3531 | margin-left: 19px; 3532 | border-left: 1px solid #ddd; 3533 | } 3534 | 3535 | .tabs-right > .nav-tabs > li > a { 3536 | margin-left: -1px; 3537 | -webkit-border-radius: 0 4px 4px 0; 3538 | -moz-border-radius: 0 4px 4px 0; 3539 | border-radius: 0 4px 4px 0; 3540 | } 3541 | 3542 | .tabs-right > .nav-tabs > li > a:hover { 3543 | border-color: #eeeeee #eeeeee #eeeeee #dddddd; 3544 | } 3545 | 3546 | .tabs-right > .nav-tabs .active > a, 3547 | .tabs-right > .nav-tabs .active > a:hover { 3548 | border-color: #ddd #ddd #ddd transparent; 3549 | *border-left-color: #ffffff; 3550 | } 3551 | 3552 | .navbar { 3553 | *position: relative; 3554 | *z-index: 2; 3555 | margin-bottom: 18px; 3556 | overflow: visible; 3557 | } 3558 | 3559 | .navbar-inner { 3560 | min-height: 40px; 3561 | padding-right: 20px; 3562 | padding-left: 20px; 3563 | background-color: #2c2c2c; 3564 | background-image: -moz-linear-gradient(top, #333333, #222222); 3565 | background-image: -ms-linear-gradient(top, #333333, #222222); 3566 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); 3567 | background-image: -webkit-linear-gradient(top, #333333, #222222); 3568 | background-image: -o-linear-gradient(top, #333333, #222222); 3569 | background-image: linear-gradient(top, #333333, #222222); 3570 | background-repeat: repeat-x; 3571 | -webkit-border-radius: 4px; 3572 | -moz-border-radius: 4px; 3573 | border-radius: 4px; 3574 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); 3575 | -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); 3576 | -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); 3577 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); 3578 | } 3579 | 3580 | .navbar .container { 3581 | width: auto; 3582 | } 3583 | 3584 | .nav-collapse.collapse { 3585 | height: auto; 3586 | } 3587 | 3588 | .navbar { 3589 | color: #999999; 3590 | } 3591 | 3592 | .navbar .brand:hover { 3593 | text-decoration: none; 3594 | } 3595 | 3596 | .navbar .brand { 3597 | display: block; 3598 | float: left; 3599 | padding: 8px 20px 12px; 3600 | margin-left: -20px; 3601 | font-size: 20px; 3602 | font-weight: 200; 3603 | line-height: 1; 3604 | color: #999999; 3605 | } 3606 | 3607 | .navbar .navbar-text { 3608 | margin-bottom: 0; 3609 | line-height: 40px; 3610 | } 3611 | 3612 | .navbar .navbar-link { 3613 | color: #999999; 3614 | } 3615 | 3616 | .navbar .navbar-link:hover { 3617 | color: #ffffff; 3618 | } 3619 | 3620 | .navbar .btn, 3621 | .navbar .btn-group { 3622 | margin-top: 5px; 3623 | } 3624 | 3625 | .navbar .btn-group .btn { 3626 | margin: 0; 3627 | } 3628 | 3629 | .navbar-form { 3630 | margin-bottom: 0; 3631 | *zoom: 1; 3632 | } 3633 | 3634 | .navbar-form:before, 3635 | .navbar-form:after { 3636 | display: table; 3637 | content: ""; 3638 | } 3639 | 3640 | .navbar-form:after { 3641 | clear: both; 3642 | } 3643 | 3644 | .navbar-form input, 3645 | .navbar-form select, 3646 | .navbar-form .radio, 3647 | .navbar-form .checkbox { 3648 | margin-top: 5px; 3649 | } 3650 | 3651 | .navbar-form input, 3652 | .navbar-form select { 3653 | display: inline-block; 3654 | margin-bottom: 0; 3655 | } 3656 | 3657 | .navbar-form input[type="image"], 3658 | .navbar-form input[type="checkbox"], 3659 | .navbar-form input[type="radio"] { 3660 | margin-top: 3px; 3661 | } 3662 | 3663 | .navbar-form .input-append, 3664 | .navbar-form .input-prepend { 3665 | margin-top: 6px; 3666 | white-space: nowrap; 3667 | } 3668 | 3669 | .navbar-form .input-append input, 3670 | .navbar-form .input-prepend input { 3671 | margin-top: 0; 3672 | } 3673 | 3674 | .navbar-search { 3675 | position: relative; 3676 | float: left; 3677 | margin-top: 6px; 3678 | margin-bottom: 0; 3679 | } 3680 | 3681 | .navbar-search .search-query { 3682 | padding: 4px 9px; 3683 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 3684 | font-size: 13px; 3685 | font-weight: normal; 3686 | line-height: 1; 3687 | color: #ffffff; 3688 | background-color: #626262; 3689 | border: 1px solid #151515; 3690 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); 3691 | -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); 3692 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); 3693 | -webkit-transition: none; 3694 | -moz-transition: none; 3695 | -ms-transition: none; 3696 | -o-transition: none; 3697 | transition: none; 3698 | } 3699 | 3700 | .navbar-search .search-query:-moz-placeholder { 3701 | color: #cccccc; 3702 | } 3703 | 3704 | .navbar-search .search-query::-webkit-input-placeholder { 3705 | color: #cccccc; 3706 | } 3707 | 3708 | .navbar-search .search-query:focus, 3709 | .navbar-search .search-query.focused { 3710 | padding: 5px 10px; 3711 | color: #333333; 3712 | text-shadow: 0 1px 0 #ffffff; 3713 | background-color: #ffffff; 3714 | border: 0; 3715 | outline: 0; 3716 | -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); 3717 | -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); 3718 | box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); 3719 | } 3720 | 3721 | .navbar-fixed-top, 3722 | .navbar-fixed-bottom { 3723 | position: fixed; 3724 | right: 0; 3725 | left: 0; 3726 | z-index: 1030; 3727 | margin-bottom: 0; 3728 | } 3729 | 3730 | .navbar-fixed-top .navbar-inner, 3731 | .navbar-fixed-bottom .navbar-inner { 3732 | padding-right: 0; 3733 | padding-left: 0; 3734 | -webkit-border-radius: 0; 3735 | -moz-border-radius: 0; 3736 | border-radius: 0; 3737 | } 3738 | 3739 | .navbar-fixed-top .container, 3740 | .navbar-fixed-bottom .container { 3741 | width: 940px; 3742 | } 3743 | 3744 | .navbar-fixed-top { 3745 | top: 0; 3746 | } 3747 | 3748 | .navbar-fixed-bottom { 3749 | bottom: 0; 3750 | } 3751 | 3752 | .navbar .nav { 3753 | position: relative; 3754 | left: 0; 3755 | display: block; 3756 | float: left; 3757 | margin: 0 10px 0 0; 3758 | } 3759 | 3760 | .navbar .nav.pull-right { 3761 | float: right; 3762 | } 3763 | 3764 | .navbar .nav > li { 3765 | display: block; 3766 | float: left; 3767 | } 3768 | 3769 | .navbar .nav > li > a { 3770 | float: none; 3771 | padding: 9px 10px 11px; 3772 | line-height: 19px; 3773 | color: #999999; 3774 | text-decoration: none; 3775 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 3776 | } 3777 | 3778 | .navbar .btn { 3779 | display: inline-block; 3780 | padding: 4px 10px 4px; 3781 | margin: 5px 5px 6px; 3782 | line-height: 18px; 3783 | } 3784 | 3785 | .navbar .btn-group { 3786 | padding: 5px 5px 6px; 3787 | margin: 0; 3788 | } 3789 | 3790 | .navbar .nav > li > a:hover { 3791 | color: #ffffff; 3792 | text-decoration: none; 3793 | background-color: transparent; 3794 | } 3795 | 3796 | .navbar .nav .active > a, 3797 | .navbar .nav .active > a:hover { 3798 | color: #ffffff; 3799 | text-decoration: none; 3800 | background-color: #222222; 3801 | } 3802 | 3803 | .navbar .divider-vertical { 3804 | width: 1px; 3805 | height: 40px; 3806 | margin: 0 9px; 3807 | overflow: hidden; 3808 | background-color: #222222; 3809 | border-right: 1px solid #333333; 3810 | } 3811 | 3812 | .navbar .nav.pull-right { 3813 | margin-right: 0; 3814 | margin-left: 10px; 3815 | } 3816 | 3817 | .navbar .btn-navbar { 3818 | display: none; 3819 | float: right; 3820 | padding: 7px 10px; 3821 | margin-right: 5px; 3822 | margin-left: 5px; 3823 | background-color: #2c2c2c; 3824 | *background-color: #222222; 3825 | background-image: -ms-linear-gradient(top, #333333, #222222); 3826 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); 3827 | background-image: -webkit-linear-gradient(top, #333333, #222222); 3828 | background-image: -o-linear-gradient(top, #333333, #222222); 3829 | background-image: linear-gradient(top, #333333, #222222); 3830 | background-image: -moz-linear-gradient(top, #333333, #222222); 3831 | background-repeat: repeat-x; 3832 | border-color: #222222 #222222 #000000; 3833 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); 3834 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); 3835 | filter: progid:dximagetransform.microsoft.gradient(enabled=false); 3836 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); 3837 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); 3838 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); 3839 | } 3840 | 3841 | .navbar .btn-navbar:hover, 3842 | .navbar .btn-navbar:active, 3843 | .navbar .btn-navbar.active, 3844 | .navbar .btn-navbar.disabled, 3845 | .navbar .btn-navbar[disabled] { 3846 | background-color: #222222; 3847 | *background-color: #151515; 3848 | } 3849 | 3850 | .navbar .btn-navbar:active, 3851 | .navbar .btn-navbar.active { 3852 | background-color: #080808 \9; 3853 | } 3854 | 3855 | .navbar .btn-navbar .icon-bar { 3856 | display: block; 3857 | width: 18px; 3858 | height: 2px; 3859 | background-color: #f5f5f5; 3860 | -webkit-border-radius: 1px; 3861 | -moz-border-radius: 1px; 3862 | border-radius: 1px; 3863 | -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); 3864 | -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); 3865 | box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); 3866 | } 3867 | 3868 | .btn-navbar .icon-bar + .icon-bar { 3869 | margin-top: 3px; 3870 | } 3871 | 3872 | .navbar .dropdown-menu:before { 3873 | position: absolute; 3874 | top: -7px; 3875 | left: 9px; 3876 | display: inline-block; 3877 | border-right: 7px solid transparent; 3878 | border-bottom: 7px solid #ccc; 3879 | border-left: 7px solid transparent; 3880 | border-bottom-color: rgba(0, 0, 0, 0.2); 3881 | content: ''; 3882 | } 3883 | 3884 | .navbar .dropdown-menu:after { 3885 | position: absolute; 3886 | top: -6px; 3887 | left: 10px; 3888 | display: inline-block; 3889 | border-right: 6px solid transparent; 3890 | border-bottom: 6px solid #ffffff; 3891 | border-left: 6px solid transparent; 3892 | content: ''; 3893 | } 3894 | 3895 | .navbar-fixed-bottom .dropdown-menu:before { 3896 | top: auto; 3897 | bottom: -7px; 3898 | border-top: 7px solid #ccc; 3899 | border-bottom: 0; 3900 | border-top-color: rgba(0, 0, 0, 0.2); 3901 | } 3902 | 3903 | .navbar-fixed-bottom .dropdown-menu:after { 3904 | top: auto; 3905 | bottom: -6px; 3906 | border-top: 6px solid #ffffff; 3907 | border-bottom: 0; 3908 | } 3909 | 3910 | .navbar .nav li.dropdown .dropdown-toggle .caret, 3911 | .navbar .nav li.dropdown.open .caret { 3912 | border-top-color: #ffffff; 3913 | border-bottom-color: #ffffff; 3914 | } 3915 | 3916 | .navbar .nav li.dropdown.active .caret { 3917 | opacity: 1; 3918 | filter: alpha(opacity=100); 3919 | } 3920 | 3921 | .navbar .nav li.dropdown.open > .dropdown-toggle, 3922 | .navbar .nav li.dropdown.active > .dropdown-toggle, 3923 | .navbar .nav li.dropdown.open.active > .dropdown-toggle { 3924 | background-color: transparent; 3925 | } 3926 | 3927 | .navbar .nav li.dropdown.active > .dropdown-toggle:hover { 3928 | color: #ffffff; 3929 | } 3930 | 3931 | .navbar .pull-right .dropdown-menu, 3932 | .navbar .dropdown-menu.pull-right { 3933 | right: 0; 3934 | left: auto; 3935 | } 3936 | 3937 | .navbar .pull-right .dropdown-menu:before, 3938 | .navbar .dropdown-menu.pull-right:before { 3939 | right: 12px; 3940 | left: auto; 3941 | } 3942 | 3943 | .navbar .pull-right .dropdown-menu:after, 3944 | .navbar .dropdown-menu.pull-right:after { 3945 | right: 13px; 3946 | left: auto; 3947 | } 3948 | 3949 | .breadcrumb { 3950 | padding: 7px 14px; 3951 | margin: 0 0 18px; 3952 | list-style: none; 3953 | background-color: #fbfbfb; 3954 | background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); 3955 | background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); 3956 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); 3957 | background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); 3958 | background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); 3959 | background-image: linear-gradient(top, #ffffff, #f5f5f5); 3960 | background-repeat: repeat-x; 3961 | border: 1px solid #ddd; 3962 | -webkit-border-radius: 3px; 3963 | -moz-border-radius: 3px; 3964 | border-radius: 3px; 3965 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); 3966 | -webkit-box-shadow: inset 0 1px 0 #ffffff; 3967 | -moz-box-shadow: inset 0 1px 0 #ffffff; 3968 | box-shadow: inset 0 1px 0 #ffffff; 3969 | } 3970 | 3971 | .breadcrumb li { 3972 | display: inline-block; 3973 | *display: inline; 3974 | text-shadow: 0 1px 0 #ffffff; 3975 | *zoom: 1; 3976 | } 3977 | 3978 | .breadcrumb .divider { 3979 | padding: 0 5px; 3980 | color: #999999; 3981 | } 3982 | 3983 | .breadcrumb .active a { 3984 | color: #333333; 3985 | } 3986 | 3987 | .pagination { 3988 | height: 36px; 3989 | margin: 18px 0; 3990 | } 3991 | 3992 | .pagination ul { 3993 | display: inline-block; 3994 | *display: inline; 3995 | margin-bottom: 0; 3996 | margin-left: 0; 3997 | -webkit-border-radius: 3px; 3998 | -moz-border-radius: 3px; 3999 | border-radius: 3px; 4000 | *zoom: 1; 4001 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 4002 | -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 4003 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 4004 | } 4005 | 4006 | .pagination li { 4007 | display: inline; 4008 | } 4009 | 4010 | .pagination a { 4011 | float: left; 4012 | padding: 0 14px; 4013 | line-height: 34px; 4014 | text-decoration: none; 4015 | border: 1px solid #ddd; 4016 | border-left-width: 0; 4017 | } 4018 | 4019 | .pagination a:hover, 4020 | .pagination .active a { 4021 | background-color: #f5f5f5; 4022 | } 4023 | 4024 | .pagination .active a { 4025 | color: #999999; 4026 | cursor: default; 4027 | } 4028 | 4029 | .pagination .disabled span, 4030 | .pagination .disabled a, 4031 | .pagination .disabled a:hover { 4032 | color: #999999; 4033 | cursor: default; 4034 | background-color: transparent; 4035 | } 4036 | 4037 | .pagination li:first-child a { 4038 | border-left-width: 1px; 4039 | -webkit-border-radius: 3px 0 0 3px; 4040 | -moz-border-radius: 3px 0 0 3px; 4041 | border-radius: 3px 0 0 3px; 4042 | } 4043 | 4044 | .pagination li:last-child a { 4045 | -webkit-border-radius: 0 3px 3px 0; 4046 | -moz-border-radius: 0 3px 3px 0; 4047 | border-radius: 0 3px 3px 0; 4048 | } 4049 | 4050 | .pagination-centered { 4051 | text-align: center; 4052 | } 4053 | 4054 | .pagination-right { 4055 | text-align: right; 4056 | } 4057 | 4058 | .pager { 4059 | margin-bottom: 18px; 4060 | margin-left: 0; 4061 | text-align: center; 4062 | list-style: none; 4063 | *zoom: 1; 4064 | } 4065 | 4066 | .pager:before, 4067 | .pager:after { 4068 | display: table; 4069 | content: ""; 4070 | } 4071 | 4072 | .pager:after { 4073 | clear: both; 4074 | } 4075 | 4076 | .pager li { 4077 | display: inline; 4078 | } 4079 | 4080 | .pager a { 4081 | display: inline-block; 4082 | padding: 5px 14px; 4083 | background-color: #fff; 4084 | border: 1px solid #ddd; 4085 | -webkit-border-radius: 15px; 4086 | -moz-border-radius: 15px; 4087 | border-radius: 15px; 4088 | } 4089 | 4090 | .pager a:hover { 4091 | text-decoration: none; 4092 | background-color: #f5f5f5; 4093 | } 4094 | 4095 | .pager .next a { 4096 | float: right; 4097 | } 4098 | 4099 | .pager .previous a { 4100 | float: left; 4101 | } 4102 | 4103 | .pager .disabled a, 4104 | .pager .disabled a:hover { 4105 | color: #999999; 4106 | cursor: default; 4107 | background-color: #fff; 4108 | } 4109 | 4110 | .modal-open .dropdown-menu { 4111 | z-index: 2050; 4112 | } 4113 | 4114 | .modal-open .dropdown.open { 4115 | *z-index: 2050; 4116 | } 4117 | 4118 | .modal-open .popover { 4119 | z-index: 2060; 4120 | } 4121 | 4122 | .modal-open .tooltip { 4123 | z-index: 2070; 4124 | } 4125 | 4126 | .modal-backdrop { 4127 | position: fixed; 4128 | top: 0; 4129 | right: 0; 4130 | bottom: 0; 4131 | left: 0; 4132 | z-index: 1040; 4133 | background-color: #000000; 4134 | } 4135 | 4136 | .modal-backdrop.fade { 4137 | opacity: 0; 4138 | } 4139 | 4140 | .modal-backdrop, 4141 | .modal-backdrop.fade.in { 4142 | opacity: 0.8; 4143 | filter: alpha(opacity=80); 4144 | } 4145 | 4146 | .modal { 4147 | position: fixed; 4148 | top: 50%; 4149 | left: 50%; 4150 | z-index: 1050; 4151 | width: 560px; 4152 | margin: -250px 0 0 -280px; 4153 | overflow: auto; 4154 | background-color: #ffffff; 4155 | border: 1px solid #999; 4156 | border: 1px solid rgba(0, 0, 0, 0.3); 4157 | *border: 1px solid #999; 4158 | -webkit-border-radius: 6px; 4159 | -moz-border-radius: 6px; 4160 | border-radius: 6px; 4161 | -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); 4162 | -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); 4163 | box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); 4164 | -webkit-background-clip: padding-box; 4165 | -moz-background-clip: padding-box; 4166 | background-clip: padding-box; 4167 | } 4168 | 4169 | .modal.fade { 4170 | top: -25%; 4171 | -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; 4172 | -moz-transition: opacity 0.3s linear, top 0.3s ease-out; 4173 | -ms-transition: opacity 0.3s linear, top 0.3s ease-out; 4174 | -o-transition: opacity 0.3s linear, top 0.3s ease-out; 4175 | transition: opacity 0.3s linear, top 0.3s ease-out; 4176 | } 4177 | 4178 | .modal.fade.in { 4179 | top: 50%; 4180 | } 4181 | 4182 | .modal-header { 4183 | padding: 9px 15px; 4184 | border-bottom: 1px solid #eee; 4185 | } 4186 | 4187 | .modal-header .close { 4188 | margin-top: 2px; 4189 | } 4190 | 4191 | .modal-body { 4192 | max-height: 400px; 4193 | padding: 15px; 4194 | overflow-y: auto; 4195 | } 4196 | 4197 | .modal-form { 4198 | margin-bottom: 0; 4199 | } 4200 | 4201 | .modal-footer { 4202 | padding: 14px 15px 15px; 4203 | margin-bottom: 0; 4204 | text-align: right; 4205 | background-color: #f5f5f5; 4206 | border-top: 1px solid #ddd; 4207 | -webkit-border-radius: 0 0 6px 6px; 4208 | -moz-border-radius: 0 0 6px 6px; 4209 | border-radius: 0 0 6px 6px; 4210 | *zoom: 1; 4211 | -webkit-box-shadow: inset 0 1px 0 #ffffff; 4212 | -moz-box-shadow: inset 0 1px 0 #ffffff; 4213 | box-shadow: inset 0 1px 0 #ffffff; 4214 | } 4215 | 4216 | .modal-footer:before, 4217 | .modal-footer:after { 4218 | display: table; 4219 | content: ""; 4220 | } 4221 | 4222 | .modal-footer:after { 4223 | clear: both; 4224 | } 4225 | 4226 | .modal-footer .btn + .btn { 4227 | margin-bottom: 0; 4228 | margin-left: 5px; 4229 | } 4230 | 4231 | .modal-footer .btn-group .btn + .btn { 4232 | margin-left: -1px; 4233 | } 4234 | 4235 | .tooltip { 4236 | position: absolute; 4237 | z-index: 1020; 4238 | display: block; 4239 | padding: 5px; 4240 | font-size: 11px; 4241 | opacity: 0; 4242 | filter: alpha(opacity=0); 4243 | visibility: visible; 4244 | } 4245 | 4246 | .tooltip.in { 4247 | opacity: 0.8; 4248 | filter: alpha(opacity=80); 4249 | } 4250 | 4251 | .tooltip.top { 4252 | margin-top: -2px; 4253 | } 4254 | 4255 | .tooltip.right { 4256 | margin-left: 2px; 4257 | } 4258 | 4259 | .tooltip.bottom { 4260 | margin-top: 2px; 4261 | } 4262 | 4263 | .tooltip.left { 4264 | margin-left: -2px; 4265 | } 4266 | 4267 | .tooltip.top .tooltip-arrow { 4268 | bottom: 0; 4269 | left: 50%; 4270 | margin-left: -5px; 4271 | border-top: 5px solid #000000; 4272 | border-right: 5px solid transparent; 4273 | border-left: 5px solid transparent; 4274 | } 4275 | 4276 | .tooltip.left .tooltip-arrow { 4277 | top: 50%; 4278 | right: 0; 4279 | margin-top: -5px; 4280 | border-top: 5px solid transparent; 4281 | border-bottom: 5px solid transparent; 4282 | border-left: 5px solid #000000; 4283 | } 4284 | 4285 | .tooltip.bottom .tooltip-arrow { 4286 | top: 0; 4287 | left: 50%; 4288 | margin-left: -5px; 4289 | border-right: 5px solid transparent; 4290 | border-bottom: 5px solid #000000; 4291 | border-left: 5px solid transparent; 4292 | } 4293 | 4294 | .tooltip.right .tooltip-arrow { 4295 | top: 50%; 4296 | left: 0; 4297 | margin-top: -5px; 4298 | border-top: 5px solid transparent; 4299 | border-right: 5px solid #000000; 4300 | border-bottom: 5px solid transparent; 4301 | } 4302 | 4303 | .tooltip-inner { 4304 | max-width: 200px; 4305 | padding: 3px 8px; 4306 | color: #ffffff; 4307 | text-align: center; 4308 | text-decoration: none; 4309 | background-color: #000000; 4310 | -webkit-border-radius: 4px; 4311 | -moz-border-radius: 4px; 4312 | border-radius: 4px; 4313 | } 4314 | 4315 | .tooltip-arrow { 4316 | position: absolute; 4317 | width: 0; 4318 | height: 0; 4319 | } 4320 | 4321 | .popover { 4322 | position: absolute; 4323 | top: 0; 4324 | left: 0; 4325 | z-index: 1010; 4326 | display: none; 4327 | padding: 5px; 4328 | } 4329 | 4330 | .popover.top { 4331 | margin-top: -5px; 4332 | } 4333 | 4334 | .popover.right { 4335 | margin-left: 5px; 4336 | } 4337 | 4338 | .popover.bottom { 4339 | margin-top: 5px; 4340 | } 4341 | 4342 | .popover.left { 4343 | margin-left: -5px; 4344 | } 4345 | 4346 | .popover.top .arrow { 4347 | bottom: 0; 4348 | left: 50%; 4349 | margin-left: -5px; 4350 | border-top: 5px solid #000000; 4351 | border-right: 5px solid transparent; 4352 | border-left: 5px solid transparent; 4353 | } 4354 | 4355 | .popover.right .arrow { 4356 | top: 50%; 4357 | left: 0; 4358 | margin-top: -5px; 4359 | border-top: 5px solid transparent; 4360 | border-right: 5px solid #000000; 4361 | border-bottom: 5px solid transparent; 4362 | } 4363 | 4364 | .popover.bottom .arrow { 4365 | top: 0; 4366 | left: 50%; 4367 | margin-left: -5px; 4368 | border-right: 5px solid transparent; 4369 | border-bottom: 5px solid #000000; 4370 | border-left: 5px solid transparent; 4371 | } 4372 | 4373 | .popover.left .arrow { 4374 | top: 50%; 4375 | right: 0; 4376 | margin-top: -5px; 4377 | border-top: 5px solid transparent; 4378 | border-bottom: 5px solid transparent; 4379 | border-left: 5px solid #000000; 4380 | } 4381 | 4382 | .popover .arrow { 4383 | position: absolute; 4384 | width: 0; 4385 | height: 0; 4386 | } 4387 | 4388 | .popover-inner { 4389 | width: 280px; 4390 | padding: 3px; 4391 | overflow: hidden; 4392 | background: #000000; 4393 | background: rgba(0, 0, 0, 0.8); 4394 | -webkit-border-radius: 6px; 4395 | -moz-border-radius: 6px; 4396 | border-radius: 6px; 4397 | -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); 4398 | -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); 4399 | box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); 4400 | } 4401 | 4402 | .popover-title { 4403 | padding: 9px 15px; 4404 | line-height: 1; 4405 | background-color: #f5f5f5; 4406 | border-bottom: 1px solid #eee; 4407 | -webkit-border-radius: 3px 3px 0 0; 4408 | -moz-border-radius: 3px 3px 0 0; 4409 | border-radius: 3px 3px 0 0; 4410 | } 4411 | 4412 | .popover-content { 4413 | padding: 14px; 4414 | background-color: #ffffff; 4415 | -webkit-border-radius: 0 0 3px 3px; 4416 | -moz-border-radius: 0 0 3px 3px; 4417 | border-radius: 0 0 3px 3px; 4418 | -webkit-background-clip: padding-box; 4419 | -moz-background-clip: padding-box; 4420 | background-clip: padding-box; 4421 | } 4422 | 4423 | .popover-content p, 4424 | .popover-content ul, 4425 | .popover-content ol { 4426 | margin-bottom: 0; 4427 | } 4428 | 4429 | .thumbnails { 4430 | margin-left: -20px; 4431 | list-style: none; 4432 | *zoom: 1; 4433 | } 4434 | 4435 | .thumbnails:before, 4436 | .thumbnails:after { 4437 | display: table; 4438 | content: ""; 4439 | } 4440 | 4441 | .thumbnails:after { 4442 | clear: both; 4443 | } 4444 | 4445 | .row-fluid .thumbnails { 4446 | margin-left: 0; 4447 | } 4448 | 4449 | .thumbnails > li { 4450 | float: left; 4451 | margin-bottom: 18px; 4452 | margin-left: 20px; 4453 | } 4454 | 4455 | .thumbnail { 4456 | display: block; 4457 | padding: 4px; 4458 | line-height: 1; 4459 | border: 1px solid #ddd; 4460 | -webkit-border-radius: 4px; 4461 | -moz-border-radius: 4px; 4462 | border-radius: 4px; 4463 | -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); 4464 | -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); 4465 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); 4466 | } 4467 | 4468 | a.thumbnail:hover { 4469 | border-color: #0088cc; 4470 | -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); 4471 | -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); 4472 | box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); 4473 | } 4474 | 4475 | .thumbnail > img { 4476 | display: block; 4477 | max-width: 100%; 4478 | margin-right: auto; 4479 | margin-left: auto; 4480 | } 4481 | 4482 | .thumbnail .caption { 4483 | padding: 9px; 4484 | } 4485 | 4486 | .label, 4487 | .badge { 4488 | font-size: 10.998px; 4489 | font-weight: bold; 4490 | line-height: 14px; 4491 | color: #ffffff; 4492 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 4493 | white-space: nowrap; 4494 | vertical-align: baseline; 4495 | background-color: #999999; 4496 | } 4497 | 4498 | .label { 4499 | padding: 1px 4px 2px; 4500 | -webkit-border-radius: 3px; 4501 | -moz-border-radius: 3px; 4502 | border-radius: 3px; 4503 | } 4504 | 4505 | .badge { 4506 | padding: 1px 9px 2px; 4507 | -webkit-border-radius: 9px; 4508 | -moz-border-radius: 9px; 4509 | border-radius: 9px; 4510 | } 4511 | 4512 | a.label:hover, 4513 | a.badge:hover { 4514 | color: #ffffff; 4515 | text-decoration: none; 4516 | cursor: pointer; 4517 | } 4518 | 4519 | .label-important, 4520 | .badge-important { 4521 | background-color: #b94a48; 4522 | } 4523 | 4524 | .label-important[href], 4525 | .badge-important[href] { 4526 | background-color: #953b39; 4527 | } 4528 | 4529 | .label-warning, 4530 | .badge-warning { 4531 | background-color: #f89406; 4532 | } 4533 | 4534 | .label-warning[href], 4535 | .badge-warning[href] { 4536 | background-color: #c67605; 4537 | } 4538 | 4539 | .label-success, 4540 | .badge-success { 4541 | background-color: #468847; 4542 | } 4543 | 4544 | .label-success[href], 4545 | .badge-success[href] { 4546 | background-color: #356635; 4547 | } 4548 | 4549 | .label-info, 4550 | .badge-info { 4551 | background-color: #3a87ad; 4552 | } 4553 | 4554 | .label-info[href], 4555 | .badge-info[href] { 4556 | background-color: #2d6987; 4557 | } 4558 | 4559 | .label-inverse, 4560 | .badge-inverse { 4561 | background-color: #333333; 4562 | } 4563 | 4564 | .label-inverse[href], 4565 | .badge-inverse[href] { 4566 | background-color: #1a1a1a; 4567 | } 4568 | 4569 | @-webkit-keyframes progress-bar-stripes { 4570 | from { 4571 | background-position: 40px 0; 4572 | } 4573 | to { 4574 | background-position: 0 0; 4575 | } 4576 | } 4577 | 4578 | @-moz-keyframes progress-bar-stripes { 4579 | from { 4580 | background-position: 40px 0; 4581 | } 4582 | to { 4583 | background-position: 0 0; 4584 | } 4585 | } 4586 | 4587 | @-ms-keyframes progress-bar-stripes { 4588 | from { 4589 | background-position: 40px 0; 4590 | } 4591 | to { 4592 | background-position: 0 0; 4593 | } 4594 | } 4595 | 4596 | @-o-keyframes progress-bar-stripes { 4597 | from { 4598 | background-position: 0 0; 4599 | } 4600 | to { 4601 | background-position: 40px 0; 4602 | } 4603 | } 4604 | 4605 | @keyframes progress-bar-stripes { 4606 | from { 4607 | background-position: 40px 0; 4608 | } 4609 | to { 4610 | background-position: 0 0; 4611 | } 4612 | } 4613 | 4614 | .progress { 4615 | height: 18px; 4616 | margin-bottom: 18px; 4617 | overflow: hidden; 4618 | background-color: #f7f7f7; 4619 | background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); 4620 | background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); 4621 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); 4622 | background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); 4623 | background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); 4624 | background-image: linear-gradient(top, #f5f5f5, #f9f9f9); 4625 | background-repeat: repeat-x; 4626 | -webkit-border-radius: 4px; 4627 | -moz-border-radius: 4px; 4628 | border-radius: 4px; 4629 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); 4630 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); 4631 | -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); 4632 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); 4633 | } 4634 | 4635 | .progress .bar { 4636 | width: 0; 4637 | height: 18px; 4638 | font-size: 12px; 4639 | color: #ffffff; 4640 | text-align: center; 4641 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 4642 | background-color: #0e90d2; 4643 | background-image: -moz-linear-gradient(top, #149bdf, #0480be); 4644 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); 4645 | background-image: -webkit-linear-gradient(top, #149bdf, #0480be); 4646 | background-image: -o-linear-gradient(top, #149bdf, #0480be); 4647 | background-image: linear-gradient(top, #149bdf, #0480be); 4648 | background-image: -ms-linear-gradient(top, #149bdf, #0480be); 4649 | background-repeat: repeat-x; 4650 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); 4651 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); 4652 | -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); 4653 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); 4654 | -webkit-box-sizing: border-box; 4655 | -moz-box-sizing: border-box; 4656 | -ms-box-sizing: border-box; 4657 | box-sizing: border-box; 4658 | -webkit-transition: width 0.6s ease; 4659 | -moz-transition: width 0.6s ease; 4660 | -ms-transition: width 0.6s ease; 4661 | -o-transition: width 0.6s ease; 4662 | transition: width 0.6s ease; 4663 | } 4664 | 4665 | .progress-striped .bar { 4666 | background-color: #149bdf; 4667 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4668 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4669 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4670 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4671 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 4672 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4673 | -webkit-background-size: 40px 40px; 4674 | -moz-background-size: 40px 40px; 4675 | -o-background-size: 40px 40px; 4676 | background-size: 40px 40px; 4677 | } 4678 | 4679 | .progress.active .bar { 4680 | -webkit-animation: progress-bar-stripes 2s linear infinite; 4681 | -moz-animation: progress-bar-stripes 2s linear infinite; 4682 | -ms-animation: progress-bar-stripes 2s linear infinite; 4683 | -o-animation: progress-bar-stripes 2s linear infinite; 4684 | animation: progress-bar-stripes 2s linear infinite; 4685 | } 4686 | 4687 | .progress-danger .bar { 4688 | background-color: #dd514c; 4689 | background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); 4690 | background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); 4691 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); 4692 | background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); 4693 | background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); 4694 | background-image: linear-gradient(top, #ee5f5b, #c43c35); 4695 | background-repeat: repeat-x; 4696 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); 4697 | } 4698 | 4699 | .progress-danger.progress-striped .bar { 4700 | background-color: #ee5f5b; 4701 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 4702 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4703 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4704 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4705 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4706 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4707 | } 4708 | 4709 | .progress-success .bar { 4710 | background-color: #5eb95e; 4711 | background-image: -moz-linear-gradient(top, #62c462, #57a957); 4712 | background-image: -ms-linear-gradient(top, #62c462, #57a957); 4713 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); 4714 | background-image: -webkit-linear-gradient(top, #62c462, #57a957); 4715 | background-image: -o-linear-gradient(top, #62c462, #57a957); 4716 | background-image: linear-gradient(top, #62c462, #57a957); 4717 | background-repeat: repeat-x; 4718 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); 4719 | } 4720 | 4721 | .progress-success.progress-striped .bar { 4722 | background-color: #62c462; 4723 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 4724 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4725 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4726 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4727 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4728 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4729 | } 4730 | 4731 | .progress-info .bar { 4732 | background-color: #4bb1cf; 4733 | background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); 4734 | background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); 4735 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); 4736 | background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); 4737 | background-image: -o-linear-gradient(top, #5bc0de, #339bb9); 4738 | background-image: linear-gradient(top, #5bc0de, #339bb9); 4739 | background-repeat: repeat-x; 4740 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); 4741 | } 4742 | 4743 | .progress-info.progress-striped .bar { 4744 | background-color: #5bc0de; 4745 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 4746 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4747 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4748 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4749 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4750 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4751 | } 4752 | 4753 | .progress-warning .bar { 4754 | background-color: #faa732; 4755 | background-image: -moz-linear-gradient(top, #fbb450, #f89406); 4756 | background-image: -ms-linear-gradient(top, #fbb450, #f89406); 4757 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); 4758 | background-image: -webkit-linear-gradient(top, #fbb450, #f89406); 4759 | background-image: -o-linear-gradient(top, #fbb450, #f89406); 4760 | background-image: linear-gradient(top, #fbb450, #f89406); 4761 | background-repeat: repeat-x; 4762 | filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); 4763 | } 4764 | 4765 | .progress-warning.progress-striped .bar { 4766 | background-color: #fbb450; 4767 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); 4768 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4769 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4770 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4771 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4772 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 4773 | } 4774 | 4775 | .accordion { 4776 | margin-bottom: 18px; 4777 | } 4778 | 4779 | .accordion-group { 4780 | margin-bottom: 2px; 4781 | border: 1px solid #e5e5e5; 4782 | -webkit-border-radius: 4px; 4783 | -moz-border-radius: 4px; 4784 | border-radius: 4px; 4785 | } 4786 | 4787 | .accordion-heading { 4788 | border-bottom: 0; 4789 | } 4790 | 4791 | .accordion-heading .accordion-toggle { 4792 | display: block; 4793 | padding: 8px 15px; 4794 | } 4795 | 4796 | .accordion-toggle { 4797 | cursor: pointer; 4798 | } 4799 | 4800 | .accordion-inner { 4801 | padding: 9px 15px; 4802 | border-top: 1px solid #e5e5e5; 4803 | } 4804 | 4805 | .carousel { 4806 | position: relative; 4807 | margin-bottom: 18px; 4808 | line-height: 1; 4809 | } 4810 | 4811 | .carousel-inner { 4812 | position: relative; 4813 | width: 100%; 4814 | overflow: hidden; 4815 | } 4816 | 4817 | .carousel .item { 4818 | position: relative; 4819 | display: none; 4820 | -webkit-transition: 0.6s ease-in-out left; 4821 | -moz-transition: 0.6s ease-in-out left; 4822 | -ms-transition: 0.6s ease-in-out left; 4823 | -o-transition: 0.6s ease-in-out left; 4824 | transition: 0.6s ease-in-out left; 4825 | } 4826 | 4827 | .carousel .item > img { 4828 | display: block; 4829 | line-height: 1; 4830 | } 4831 | 4832 | .carousel .active, 4833 | .carousel .next, 4834 | .carousel .prev { 4835 | display: block; 4836 | } 4837 | 4838 | .carousel .active { 4839 | left: 0; 4840 | } 4841 | 4842 | .carousel .next, 4843 | .carousel .prev { 4844 | position: absolute; 4845 | top: 0; 4846 | width: 100%; 4847 | } 4848 | 4849 | .carousel .next { 4850 | left: 100%; 4851 | } 4852 | 4853 | .carousel .prev { 4854 | left: -100%; 4855 | } 4856 | 4857 | .carousel .next.left, 4858 | .carousel .prev.right { 4859 | left: 0; 4860 | } 4861 | 4862 | .carousel .active.left { 4863 | left: -100%; 4864 | } 4865 | 4866 | .carousel .active.right { 4867 | left: 100%; 4868 | } 4869 | 4870 | .carousel-control { 4871 | position: absolute; 4872 | top: 40%; 4873 | left: 15px; 4874 | width: 40px; 4875 | height: 40px; 4876 | margin-top: -20px; 4877 | font-size: 60px; 4878 | font-weight: 100; 4879 | line-height: 30px; 4880 | color: #ffffff; 4881 | text-align: center; 4882 | background: #222222; 4883 | border: 3px solid #ffffff; 4884 | -webkit-border-radius: 23px; 4885 | -moz-border-radius: 23px; 4886 | border-radius: 23px; 4887 | opacity: 0.5; 4888 | filter: alpha(opacity=50); 4889 | } 4890 | 4891 | .carousel-control.right { 4892 | right: 15px; 4893 | left: auto; 4894 | } 4895 | 4896 | .carousel-control:hover { 4897 | color: #ffffff; 4898 | text-decoration: none; 4899 | opacity: 0.9; 4900 | filter: alpha(opacity=90); 4901 | } 4902 | 4903 | .carousel-caption { 4904 | position: absolute; 4905 | right: 0; 4906 | bottom: 0; 4907 | left: 0; 4908 | padding: 10px 15px 5px; 4909 | background: #333333; 4910 | background: rgba(0, 0, 0, 0.75); 4911 | } 4912 | 4913 | .carousel-caption h4, 4914 | .carousel-caption p { 4915 | color: #ffffff; 4916 | } 4917 | 4918 | .hero-unit { 4919 | padding: 60px; 4920 | margin-bottom: 30px; 4921 | background-color: #eeeeee; 4922 | -webkit-border-radius: 6px; 4923 | -moz-border-radius: 6px; 4924 | border-radius: 6px; 4925 | } 4926 | 4927 | .hero-unit h1 { 4928 | margin-bottom: 0; 4929 | font-size: 60px; 4930 | line-height: 1; 4931 | letter-spacing: -1px; 4932 | color: inherit; 4933 | } 4934 | 4935 | .hero-unit p { 4936 | font-size: 18px; 4937 | font-weight: 200; 4938 | line-height: 27px; 4939 | color: inherit; 4940 | } 4941 | 4942 | .pull-right { 4943 | float: right; 4944 | } 4945 | 4946 | .pull-left { 4947 | float: left; 4948 | } 4949 | 4950 | .hide { 4951 | display: none; 4952 | } 4953 | 4954 | .show { 4955 | display: block; 4956 | } 4957 | 4958 | .invisible { 4959 | visibility: hidden; 4960 | } 4961 | -------------------------------------------------------------------------------- /src/main/webapp/web/assets/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry-samples/springmvc-hibernate-template/c0ff9e8035d45a7ff255d806e1843e32e5c94741/src/main/webapp/web/assets/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /src/main/webapp/web/views/customers.css: -------------------------------------------------------------------------------- 1 | .customer-visible-true { 2 | display:inline; 3 | } 4 | .customer-visible-false { 5 | display:none; 6 | } 7 | .done-true { 8 | text-decoration: line-through; 9 | color: grey; 10 | } -------------------------------------------------------------------------------- /src/main/webapp/web/views/customers.js: -------------------------------------------------------------------------------- 1 | /*** 2 | * Controller to handle interfacing with the RESTful endpoint 3 | */ 4 | $.ajaxSetup({ 5 | cache:false 6 | }); 7 | 8 | var utils = { 9 | _url:'', 10 | setup:function (u) { 11 | this._url = u; 12 | }, 13 | url:function (u) { 14 | return this._url + u; 15 | }, 16 | get:function (url, data, cb) { 17 | $.ajax({ 18 | type:'GET', 19 | url:url, 20 | cache:false, 21 | dataType:'json', 22 | contentType:'application/json; charset=utf-8', 23 | success:cb, 24 | error:function () { 25 | alert('error trying to retrieve ' + u); 26 | } 27 | }); 28 | }, 29 | put:function (url, data, cb) { 30 | var k = '_method', 31 | v = 'PUT'; 32 | data[k] = v; 33 | var headers = {}; 34 | headers[k] = v; 35 | $.ajax({ 36 | type:'POST', 37 | url:url, 38 | cache:false, 39 | headers:headers, 40 | data:data, 41 | success:function (result) { 42 | cb(result); 43 | }, 44 | error:function (e) { 45 | console.log('error PUT\'ing to url ' + url + '. ' + JSON.stringify(e)); 46 | } 47 | }); // todo 48 | 49 | }, 50 | post:function (u, data, cb) { 51 | $.ajax({ 52 | type:'POST', 53 | url:u, 54 | cache:false, 55 | dataType:'json', 56 | data:data, 57 | contentType:'application/json; charset=utf-8', 58 | success:cb, 59 | error:function () { 60 | alert('error trying to post to ' + u); 61 | } 62 | }); 63 | } 64 | }; 65 | 66 | function CustomerCtrl($scope) { 67 | $scope.customers = []; 68 | 69 | $scope.query = 'juergen'; 70 | 71 | $scope.searchResultsFound = function () { 72 | return $scope.customers != null && $scope.customers.length > 0; 73 | }; 74 | 75 | $scope.load = function (customer) { 76 | $scope.customer = customer; 77 | $scope.id = customer.id; 78 | }; 79 | 80 | $scope.search = function () { 81 | var u = utils.url('/crm/search?q=' + $scope.query); 82 | utils.get(u, {}, function (customers) { 83 | $scope.$apply(function () { 84 | $scope.customers = customers; 85 | if ($scope.searchResultsFound()) { 86 | if (customers.length == 1) { 87 | $scope.load(customers[0]); 88 | } 89 | } 90 | }); 91 | }); 92 | }; 93 | $scope.isCustomerLoaded = function () { 94 | return $scope.customer != null && $scope.customer.id != null && $scope.customer.id > 0; 95 | }; 96 | 97 | function loadCustomerById(id, cb) { 98 | var u = utils.url('/crm/customers/' + id); 99 | utils.get(u, {}, cb); 100 | } 101 | 102 | $scope.lookupCustomer = function () { 103 | loadCustomerById($scope.id, function (c) { 104 | $scope.$apply(function () { 105 | $scope.load(c); 106 | }); 107 | }); 108 | }; 109 | 110 | $scope.save = function () { 111 | var id = $scope.id; 112 | var data = { firstName:$scope.customer.firstName, lastName:$scope.customer.lastName }; 113 | 114 | function exists(o, p, cb) { 115 | if (o[p] && o[p] != null) { 116 | cb(p, o[p]); 117 | } 118 | } 119 | 120 | exists($scope.customer, 'id', function (pName, val) { 121 | data[pName] = val; 122 | }); 123 | exists($scope.customer, 'signupDate', function (pN, v) { 124 | data[pN] = v; 125 | }); 126 | var idReceivingCallback = function (id) { 127 | console.log('id is ' + id); 128 | $scope.$apply(function () { 129 | $scope.id = id; 130 | $scope.lookupCustomer(); 131 | }); 132 | 133 | }; 134 | 135 | var u = null; 136 | if (id != null && id > 0) { 137 | // then we're simply going to update it 138 | u = utils.url('/crm/customers/' + id); 139 | console.log('JSON to send' + JSON.stringify(data)) 140 | utils.post(u, JSON.stringify(data), idReceivingCallback); 141 | } 142 | else { 143 | u = utils.url('/crm/customers'); 144 | utils.put(u, data, idReceivingCallback); 145 | } 146 | 147 | }; 148 | 149 | $scope.trash = function () { 150 | $scope.id = null; 151 | $scope.customer = null; 152 | }; 153 | } 154 | 155 | -------------------------------------------------------------------------------- /src/test/java/org/springsource/cloudfoundry/mvc/services/CustomerServiceTest.java: -------------------------------------------------------------------------------- 1 | package org.springsource.cloudfoundry.mvc.services; 2 | 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.context.annotation.Configuration; 8 | import org.springframework.context.annotation.Import; 9 | import org.springframework.jdbc.core.JdbcTemplate; 10 | import org.springframework.test.context.ActiveProfiles; 11 | import org.springframework.test.context.ContextConfiguration; 12 | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 | import org.springframework.transaction.PlatformTransactionManager; 14 | import org.springframework.transaction.TransactionStatus; 15 | import org.springframework.transaction.support.TransactionCallbackWithoutResult; 16 | import org.springframework.transaction.support.TransactionTemplate; 17 | import org.springsource.cloudfoundry.mvc.services.config.ServicesConfiguration; 18 | 19 | import javax.sql.DataSource; 20 | import java.util.Date; 21 | 22 | import static org.junit.Assert.assertEquals; 23 | import static org.junit.Assert.assertNotNull; 24 | 25 | @RunWith(SpringJUnit4ClassRunner.class) 26 | @ActiveProfiles("default") 27 | @ContextConfiguration 28 | public class CustomerServiceTest { 29 | 30 | 31 | @Autowired 32 | private CustomerService customerService; 33 | 34 | @Autowired 35 | private PlatformTransactionManager transactionManager; 36 | 37 | @Autowired 38 | private DataSource dataSource; 39 | 40 | Date signupDate = new Date(); 41 | 42 | String firstName = "Josh"; 43 | 44 | String lastName = "Long"; 45 | 46 | JdbcTemplate jdbcTemplate; 47 | 48 | 49 | @Configuration 50 | @Import({ServicesConfiguration.class}) 51 | public static class CustomerServiceTestConfiguration { 52 | // noop we just want the beans in the ServicesConfiguration class 53 | } 54 | 55 | 56 | @Before 57 | public void before() throws Exception { 58 | 59 | jdbcTemplate = new JdbcTemplate(dataSource); 60 | 61 | TransactionTemplate transactionTemplate = new TransactionTemplate(this.transactionManager); 62 | transactionTemplate.execute(new TransactionCallbackWithoutResult() { 63 | @Override 64 | protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { 65 | jdbcTemplate.execute("delete from CUSTOMER"); 66 | } 67 | }); 68 | } 69 | 70 | @Test 71 | public void testCreatingCustomers() { 72 | Customer customer = customerService.createCustomer(this.firstName, this.lastName, this.signupDate); 73 | assertNotNull("the customer can't be null", customer); 74 | assertEquals(customer.getFirstName(), this.firstName); 75 | assertEquals(customer.getLastName(), this.lastName); 76 | assertEquals(customer.getSignupDate(), this.signupDate); 77 | } 78 | 79 | @Test 80 | public void testUpdatingACustomer() throws Exception { 81 | Customer customer = customerService.createCustomer(this.firstName, this.lastName, this.signupDate); 82 | assertNotNull("the customer can't be null", customer); 83 | assertEquals(customer.getFirstName(), this.firstName); 84 | assertEquals(customer.getLastName(), this.lastName); 85 | assertEquals(customer.getSignupDate(), this.signupDate); 86 | 87 | customerService.updateCustomer(customer.getId(), "Joshua", customer.getLastName(), customer.getSignupDate()); 88 | 89 | customer = customerService.getCustomerById(customer.getId()); 90 | assertEquals(customer.getFirstName(), "Joshua"); 91 | 92 | } 93 | 94 | @Test 95 | public void testSearchingForCustomers() throws Exception { 96 | Customer customer = customerService.createCustomer(this.firstName, this.lastName, this.signupDate); 97 | 98 | assertEquals(1, customerService.search("josh").size()); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /todo.txt: -------------------------------------------------------------------------------- 1 | - remove the AppFog specific configuratoin (but test that it's not needed, first!) 2 | - add a search field (which shows search results) 3 | - add an create capability to the form 4 | - list search results 5 | - setup a dentists appointment for next week --------------------------------------------------------------------------------